在许多确认对话框中,有这样的选项是有用的(快速方法来禁用确认).
但我找不到如何做到这一点.我不想自己设计它,因为我需要这个对话框是标准的,不要随着Delphi的每次更新重新设计.有没有简单的方法使用Delphi标准确认对话框这样的复选框?
但我找不到如何做到这一点.我不想自己设计它,因为我需要这个对话框是标准的,不要随着Delphi的每次更新重新设计.有没有简单的方法使用Delphi标准确认对话框这样的复选框?
UPDATE2. Synopse项目推荐的SynTaskDialog库做得很好(我需要的甚至更多),我将在我的项目中使用它.谢谢!
UPDATE.所以,谢谢你们的想法.系统函数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,CBMsg,DefaultButton,c); try result := f.ShowModal; cbDontAskAnymore := c.Checked; finally f.free; end; end;
解决方法
你可以使用
our Open Source SynTaskDialog unit.
Windows提供自Vista / Seven以来可用的通用任务对话框.但是以前版本的Windows(即Windows XP或2K)都没有.
该单元(根据MPL / GPL / LGPL三重许可证授权)将使用Vista / Seven下的新TaskDialog API,并使用纯粹的Delphi代码和XP或2K下的标准主题VCL组件进行仿真.它支持Delphi 6到XE4,并且准备好Win32 / Win64 Unicode.
这是Windows 7 64位计算机下的结果:
这是从我们模拟的纯Delphi代码创建的相同对话框:
由于此屏幕截图是在Win 7计算机上制作的,因此该操作系统的样式是原生的.当对话框的模拟版本在XP上运行时,它将以该操作系统的原生样式显示.
你有“下次不要求这个设置”复选框……还有更多!