多くの確認ダイアログでは、そのようなオプションがあると便利です (確認を無効にする簡単な方法)。しかし、私はそれを行う方法を見つけることができません。このダイアログを標準のようにする必要があり、Delphi の更新ごとに再設計する必要がないため、自分で設計したくありません。そのようなチェックボックスでDelphi標準の確認ダイアログを使用する簡単な方法はありますか?
更新2。Synopse プロジェクトの推奨される SynTaskDialog ライブラリは素晴らしい仕事をしてくれます (私が必要とするすべて、さらにはそれ以上のもの)。私は自分のプロジェクトでそれを使用します。ありがとう!
アップデート。それでは、アイデアをありがとうございました。システム関数 MessageBoxCheck は優れたソリューションですが、本来あるべきほど安定していないようです。一般に、最新の API 関数を使用して、ユーザーに最新の OS の最高の UI エクスペリエンスを提供し、古いシステムには昔ながらのデザインを使用することをお勧めします。現時点では、単純なソリューション (コードは次のとおりです) にとどまっていますが、最新の OS の 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;