In molte finestre di dialogo di conferma è utile avere tale opzione (modo rapido per disabilitare la conferma). Ma non riesco a trovare come farlo. Non voglio progettarlo da solo perché ho bisogno che questa finestra di dialogo sia di tipo standard e non si voglia riprogettare con ogni aggiornamento di Delphi. C'è un modo semplice per usare la finestra di conferma standard di Delphi con tale checkbox?Come utilizzare la finestra di dialogo di conferma standard di Delphi ma con la casella di controllo "Non chiedermelo più"?
UPDATE2. La libreria SynTaskDialog suggerita dal progetto Synopse fa un ottimo lavoro (tutto ciò di cui ho bisogno e anche di più), lo userò nei miei progetti. Grazie!
AGGIORNAMENTO. Quindi, grazie ragazzi per le idee. Funzione di sistema MessageBoxCheck è una soluzione piacevole ma sembra non essere così stabile come dovrebbe essere. In generale, sono d'accordo che è una buona idea usare le ultime funzioni API per fornire agli utenti la migliore esperienza di interfaccia utente dei sistemi operativi moderni e utilizzare un design vecchio stile per i sistemi più vecchi. Al momento rimango in una soluzione semplice (il codice segue), ma se qualcuno condivide il codice con il supporto dell'interfaccia utente per il sistema operativo moderno, sarà bello.
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;
La funzione 'SHMessageBoxCheck' è la via più naturale per Windows. – TLama
SHMessageBoxCheck non sembra essere supportato oltre XP –
@David, basta testarlo proprio ora. Uhm, forse manca solo l'esportazione di esso ... (da qui il modo usato nel post di RBA) – TLama