Как показать диалоговое окно с двумя кнопками (продолжить / закрыть) в Delphi

Я хочу создать диалоговое окно предупреждения, которое спрашивает пользователей, была ли информация, введенная во время регистрации, правильной, и спрашивает его, хочет ли он продолжить или закрыть этот диалог и исправить свою информацию.

4 ответов


var
  td: TTaskDialog;
  tb: TTaskDialogBaseButtonItem;
begin
  td := TTaskDialog.Create(nil);
  try
    td.Caption := 'Warning';
    td.Text := 'Continue or Close?';
    td.MainIcon := tdiWarning;
    td.CommonButtons := [];

    tb := td.Buttons.Add;
    tb.Caption := 'Continue';
    tb.ModalResult := 100;

    tb := td.Buttons.Add;
    tb.Caption := 'Close';
    tb.ModalResult := 101;

    td.Execute;

    if td.ModalResult = 100 then
      ShowMessage('Continue')
    else if td.ModalResult = 101 then
      ShowMessage('Close');

  finally
    td.Free;
  end;
end;

enter image description here

Примечание: это будет работать только в Windows Vista или более поздней версии.


var
  AMsgDialog: TForm;
  abutton: TButton;
  bbutton: TButton;
begin

  AMsgDialog := CreateMessageDialog('This is a test message.', mtWarning,[]);
  abutton := TButton.Create(AMsgDialog);
  bbutton :=  TButton.Create(AMsgDialog);

  with AMsgDialog do

    try

      Caption := 'Dialog Title' ;
      Height := 140;
      AMsgDialog.Width := 260 ;

      with abutton do
      begin
        Parent := AMsgDialog;
        Caption := 'Continue';
        Top := 67;
        Left := 60;
        // OnClick :tnotyfievent ;
      end;

      with bbutton do
      begin
        Parent := AMsgDialog;
        Caption := 'Close';
        Top := 67;
        Left := 140;
        //OnClick :tnotyfievent ;
      end;

       ShowModal ;

    finally
      abutton.Free;
      bbutton.Free;
      Free;
    end;

enter image description here


если delphi тогда

if mrYes=MessageDlg('Continue?',mtwarning,[mbYes, mbNo],0) then 
  begin
        //do somthing
  end
else
exit; //go out

на основе этой:

procedure HookResourceString(rs: PResStringRec; newStr: PChar);
var
  oldprotect: DWORD;
begin
  VirtualProtect(rs, SizeOf(rs^), PAGE_EXECUTE_READWRITE, @oldProtect);
  rs^.Identifier := Integer(newStr);
  VirtualProtect(rs, SizeOf(rs^), oldProtect, @oldProtect);
end;

const
  SContinue = 'Continue';
  SClose = 'Close';

procedure TForm1.Button1Click(Sender: TObject);
begin
  HookResourceString(@SMsgDlgOK, SContinue);
  HookResourceString(@SMsgDlgCancel, SClose);
  if MessageDlg('My Message', mtConfirmation, [mbOK, mbCancel], 0) = mrOK then
  begin
    // OK...
  end;
end;