質問

メッセージボックス(、ハンドル '?あなたが本当に終了しますか'、 'あなたはよろしいですか?'、1);

このボタンでユーザーが何ができるか二つのことが、あります。 OKキャンセル。 私は、キャンセルを押したときに?

、ボタンが「OK」でプログラムを終了し、ダイアログを終了していること、書くためにどのようなコード持っています
役に立ちましたか?

解決

Delphiはメッセージボックスを表示するための優れたソリューションを提供しています。 私は、MessageDlg関数を使用する必要があります。 MessageDlg(およびメッセージボックス)関数の戻り値は、ユーザーの選択肢を示しています。ユーザーが[はい]ボタンを押したときにだからあなたはMessageDlgで[はい]ボタンを配置する場合、戻り値はmrYesになります。 だからあなたのコードは次のようになります:

var
  ShouldClose: Boolean;
begin
  if MessageDlg('Do you really want to quit?', mtConfirmation, 
      [mbYes, mbNo], 0) = mrYes then
    ShouldClose := True
  else
    ShouldClose := False;
end;

また、ユーザーがはいを選択した場合は、アプリケーションを閉じます。 あなたは、通常のDelphi VCLアプリケーションを持っている場合、あなたはあなたのCloseQueryイベントを実装することができMainFormを、CloseQueryイベントは、あなたが(closebuttonをクリックするように)あなたのMainFormを閉じようとしたときに実行し、変数CanCloseを持っています。 Trueに設定CanCloseはMainFormをがクローズからあなたのMainFormを防ぐことができますfalseに設定、閉じるためにOKであることを意味します:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := MessageDlg('Do you really want to quit?', mtConfirmation, 
    [mbYes, mbNo], 0) = mrYes;
end;

他のヒント

まず、メッセージボックスのボタンがテキストと一致することを確認します。だから、テキストがある場合は、「あなたが本当に終了しますか?」その後、ボタンが「はい」と「いいえ」である必要があります。

あなたのコードは、後で読みやすくなるように、

第二に、適切な定数を使用します。それは次のようになります:

var
  Res: integer;

Res := Application.MessageBox('Do you really want to exit?', 'Are you sure?',
  MB_ICONQUESTION or MB_YESNO);

その結果はIDYESまたはIDNOのいずれかになります。だから、呼び出しは、あなたのメインフォームのメソッド内であると仮定すると、あなたはそれが好きで使用することになります:

if Res = IDYES then
  Close;

あなたが別の場所からこれを呼び出した場合、あなたも呼び出すことができます。

if Res = IDYES then
  Application.Terminate;

編集をも Vistaのユーザーのどの状態のダイアログボックス上のintefaceを指針ます:

  

不要な確認が迷惑している。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top