Trong nhiều hộp thoại xác nhận, rất hữu ích khi có tùy chọn như vậy (xác nhận tắt tiếng nhanh để tắt xác nhận). Nhưng tôi không thể tìm ra cách để làm điều đó. Tôi không muốn thiết kế nó bản thân mình bởi vì tôi cần hộp thoại này là tiêu chuẩn giống như và không wont để thiết kế lại với mỗi bản cập nhật của Delphi. Có cách đơn giản để sử dụng Delphi hộp thoại xác nhận tiêu chuẩn với hộp kiểm như vậy?Cách sử dụng hộp thoại xác nhận chuẩn Delphi nhưng với hộp kiểm "Không hỏi lại tôi"?
UPDATE2. Thư viện SynTaskDialog được đề xuất từ dự án Synopse thực hiện công việc tuyệt vời (tất cả những gì tôi cần và thậm chí nhiều hơn), tôi sẽ sử dụng nó trong các dự án của mình. Cảm ơn!
CẬP NHẬT. Vì vậy, cảm ơn các bạn vì những ý tưởng. Chức năng hệ thống MessageBoxCheck là giải pháp tốt nhưng có vẻ không ổn định như trước. Nói chung, tôi đồng ý rằng bạn nên sử dụng các chức năng API mới nhất để cung cấp cho người dùng trải nghiệm giao diện người dùng tốt nhất của hệ điều hành hiện đại và sử dụng thiết kế kiểu cũ cho các hệ thống cũ hơn. Tại thời điểm tôi ở lại trên giải pháp đơn giản (mã là sau), nhưng nếu ai đó chia sẻ mã với sự hỗ trợ của giao diện người dùng cho hệ điều hành hiện đại, nó sẽ được tốt đẹp.
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;
Chức năng 'SHMessageBoxCheck' là cách tự nhiên nhất trong Windows. – TLama
SHMessageBoxCheck dường như không được hỗ trợ ngoài XP –
@David, chỉ cần kiểm tra nó ngay bây giờ. Uhm, có lẽ chỉ có thiếu xuất khẩu của nó ... (do đó cách được sử dụng trong bài của RBA) – TLama