yes/noを聞いて処理する方法

解決


office-hosokawa  2004-04-27 03:30:03  No: 8704

初歩の質問ですいません。
「実行しますか?」と表示し、[yes]、[no]のボタンを用意し、それぞれの処理をする方法を教えてください。
form1で、メインの処理をしており、ボタン1で「実行しますか」といった表示をさせたいのですが..
form2.showだと表示して次の処理に行ってしまいますし...

宜しくお願いします。


スタテツ  2004-04-27 03:36:48  No: 8705

こんにちわです。
たぶんですが
Form2.Showmodal
の事だとおもいます。


office-hosokawa  2004-04-27 03:55:26  No: 8706

begin
  //日付取得
  datNow  := Now;
  //年月日分解
  decodeDate(datNow,YY,MM,DD);
  //日付表示
  Label2.Caption := '今日は '+IntToStr(YY)+'年'+IntToStr(MM)+
                     '月'+IntToStr(DD)+'日';
  //指定日設定と確認
  Yoteibi := 26 ;
  if Yoteibi = DD then
    begin
      //送信実施のメッセージ
      Form2.Showmodal;
      Form2.Refresh;
      Label3.Caption := '指定日となっております。' ;
      //各メールの設定
      ShowMessage('指定した相手にメール送信行います。');
      Atesaki    := '';
      Kenmei     := '件名は、テストです。';
      Hassin     := 'Auto-Mail';
      Mailserver := '';
      Bun1       := '題名:てすと';
      Bun2       := 'これは、テスト用データです。';
      honbun     := Bun1 +Char($D) +Bun2;
      //メールの送信
      IdSMTP1.QuickSend(Mailserver,Kenmei,Atesaki,Hassin,Honbun);
    end
  else
    //このプログラム終了
    Application.Terminate;

end;

end.

上記のようにして  FORM2で表示させ止りましたが、yes/noのボタンを押したときのそれぞれの処理は、どこに書けばいいのでしょうか?


jok  2004-04-27 04:11:02  No: 8707

そういう機能は、MessageDlg() を使います。

procedure TForm1.Button1Click(Sender: TObject);
begin
  if MessageDlg('実行しますか?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
    Label1.Caption := 'Yes'
  else
    Label1.Caption := 'No';
end;


スタテツ  2004-04-27 04:13:40  No: 8708

こんばんわです。
舌足らずでしたね。

呼び出し元
//-----------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
i:=Form2.ShowModal;
case i of
mrYes: Showmessage('はい');
mrNo : Showmessage('いいえ');
else   Showmessage('それ以外');
end;
//-----------------------------------------------
呼び出され先
//-----------------------------------------------
procedure TForm2.Button1Click(Sender: TObject);
begin
ModalResult := mrYes;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
ModalResult := mrNo;
end;

とりあえずTModalResultをヘルプってみてください。
整数型なので独自仕様でいくなら適当な数値でもOKです。


スタテツ  2004-04-27 04:19:19  No: 8709

Form2に過敏反応しちゃいましたが…
jokさんの標準ダイアログを表示させる方法が的確な解です。
私の方法は、標準ダイアログじゃ役不足の時にダイアログもどきを作る方法です。


スタテツ  2004-04-27 04:52:32  No: 8710

余談ですが
MessageDlgは非常に手軽に扱えますがDelphi独自仕様です。
WindowsXpからかは知りませんが、マウスポインタのオプション機能に
「ポインタを自動的に規定のボタン上に移動する」
という機能が付いています。
MessageDlgではこの機能は働きません。
それとYes,No以外にキャンセル(×)が使えます。
ちょっと慣れてきたらWin32APIのMessageBox,MessageBoxExなんてのがありますんで調べてみると楽しいかもしれません。

var i:integer;
begin
i:=MessageBox(Handle,PChar('実行しますか?'),PChar('test'),
              MB_YESNO or MB_ICONQUESTION or MB_APPLMODAL);
if i=mrYes then
    Caption := 'Yes'
  else
    Caption := 'No';

いや…単に逃避行動してるだけなんですけどね。


office-hosokawa  2004-04-27 05:24:26  No: 8711

スタテツさん、jok さんありがとうございました。
うまくできました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加