初歩の質問ですいません。
「実行しますか?」と表示し、[yes]、[no]のボタンを用意し、それぞれの処理をする方法を教えてください。
form1で、メインの処理をしており、ボタン1で「実行しますか」といった表示をさせたいのですが..
form2.showだと表示して次の処理に行ってしまいますし...
宜しくお願いします。
こんにちわです。
たぶんですが
Form2.Showmodal
の事だとおもいます。
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のボタンを押したときのそれぞれの処理は、どこに書けばいいのでしょうか?
そういう機能は、MessageDlg() を使います。
procedure TForm1.Button1Click(Sender: TObject);
begin
if MessageDlg('実行しますか?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
Label1.Caption := 'Yes'
else
Label1.Caption := 'No';
end;
こんばんわです。
舌足らずでしたね。
呼び出し元
//-----------------------------------------------
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です。
Form2に過敏反応しちゃいましたが…
jokさんの標準ダイアログを表示させる方法が的確な解です。
私の方法は、標準ダイアログじゃ役不足の時にダイアログもどきを作る方法です。
余談ですが
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';
いや…単に逃避行動してるだけなんですけどね。
スタテツさん、jok さんありがとうございました。
うまくできました。
ツイート | ![]() |