0

messagebox (handle, '本当に終了しますか?', 'よろしいですか?', 1);

このボタンには、ユーザーができることが 2 つあります。はい、キャンセルします。キャンセルを押すと、ボタンが「OK」でプログラムを閉じてダイアログを終了するコードを書く必要がありますか?

4

2 に答える 2

3

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

次に、適切な定数を使用して、後でコードを読みやすくします。それは次のようになります:

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ユーザーインターフェイスガイドラインも確認してください。

不必要な確認は迷惑です

于 2009-02-09T12:06:14.960 に答える
2

Delphi は、メッセージ ボックスを表示するためのより優れたソリューションを提供します。MessageDlg 関数を使用する必要があります。MessageDlg (および MessageBox) 関数の戻り値は、ユーザーの選択を示します。したがって、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 イベントを実装できます。メインフォームを閉じようとすると (閉じるボタンをクリックするなど)、変数 CanClose を持つときに CloseQuery イベントが実行されます。CanClose を True に設定すると、MainForm を閉じても問題ないことを意味します。false に設定すると、メインフォームが閉じなくなります。

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := MessageDlg('Do you really want to quit?', mtConfirmation, 
    [mbYes, mbNo], 0) = mrYes;
end;
于 2009-02-09T12:19:55.850 に答える