在许多确认对话框中,具有此类选项(禁用确认的快捷方式)很有用。
但是我找不到怎么做。我不想自己设计它,因为我需要这个对话框是标准的,并且不会在每次Delphi更新时都进行重新设计。有没有简单的方法可以使用带有此复选框的Delphi标准确认对话框?

UPDATE2。建议来自Synopse项目的SynTaskDialog库做得很好(我需要做的甚至更多),我将在我的项目中使用它。谢谢!

更新。所以,谢谢大家的想法。系统功能MessageBoxCheck是一个不错的解决方案,但似乎并不稳定。总的来说,我同意使用最新的API函数为用户提供现代操作系统的最佳UI体验,并针对较旧的系统使用老式的设计是个好主意。目前,我仍然使用简单的解决方案(以下是代码),但是如果有人在现代操作系统的UI支持下共享该代码,那就太好了。

function MsgDlgWithCB(const Msg,Title,CBMsg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; DefaultButton: TMsgDlgBtn;
  var cbDontAskAnymore: TCheckBox): TForm;
var
  i: integer;
  b: TButton;
  y: integer;
begin
  Result := CreateMessageDialog(Msg, DlgType, Buttons, DefaultButton) ;
  Result.Position := poScreenCenter;
  cbDontAskAnymore := TCheckBox.Create(Result);
  cbDontAskAnymore.Caption := CBMsg;
  cbDontAskAnymore.Width := 130;
  y := -1;
  for i := 0 to result.ComponentCount-1 do
    if result.Components[i] is TButton then
    begin
      b := TButton(result.Components[i]);
      b.Left := b.Left + cbDontAskAnymore.Width + 16;
      Result.ClientWidth := Max(Result.ClientWidth, b.Left+b.Width+16);
      y := b.Top+b.Height-cbDontAskAnymore.Height;
    end;
  if y<0 then
    y := Result.ClientHeight - cbDontAskAnymore.height - 16;
  Result.Caption := Title;
  cbDontAskAnymore.Parent := Result;
  cbDontAskAnymore.Top := y;
  cbDontAskAnymore.Left := 8;
end;

function MessageDlgCheckbox(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; DefaultButton: TMsgDlgBtn;
  var cbDontAskAnymore: Boolean;
  const Title: string ='Confirmation';
  const CBMsg: string = 'Don''t ask anymore'): integer;
var
  f: TForm;
  c: TCheckbox;
begin
  f := MsgDlgWithCB(Msg,Title,CBMsg,DlgType,Buttons,DefaultButton,c);
  try
    result := f.ShowModal;
    cbDontAskAnymore := c.Checked;
  finally
    f.free;
  end;
end;

最佳答案

您可以使用our Open Source SynTaskDialog unit

Windows提供自Vista/Seven 7以来可用的通用任务对话框。但是以前的Windows版本(即Windows XP或2K)没有可用的功能。

该单元(在MPL/GPL/LGPL三许可下获得许可)将使用Vista/Seven下的新TaskDialog API,并在XP或2K下使用纯Delphi代码和标准主题VCL组件对其进行仿真。它支持高达XE4的Delphi 6,并且支持Win32/Win64 Unicode。

这是在一台Windows 7 64位计算机下的结果:

这是从我们的模拟纯Delphi代码创建的对话框:

由于此屏幕截图是在Win 7机器上制作的,因此样式是该OS的固有样式。当对话框的仿真版本在XP上运行时,它将以该操作系统固有的样式显示。

您有“下次不要求此设置”复选框...并且可能还有更多!

10-06 13:37