理由を説明すると長いので省略しますが、
メッセージを出してOKをプログラムで押したいのですが、
Enterってどうコードを書けばいいでしょうか?
お願いします。
showmessage('msgmsg');
ここでEnter(OK)を押す。
MessageDlg関数じゃダメなのでしょうか?
フォーカスが移ることを考慮しなくてもいいなら、こんな感じ。
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled := true;
ShowMessage('test');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled := false;
Timer1.Interval := 3000;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := false;
keybd_event(VK_RETURN, 0, 0, 0);
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled := true;
ShowMessage('test');
Timer1.Enabled := false; // ここ
end;
としておくと、ユーザが押した場合もOKですね。
どこで拾ってきたのか、自分で作ったのか、忘れましたが、
2年前日付のユニットからみつけだしたコードの一部抜粋。
動作していますし、特別怪しいコードもなさそう・・・。
一応、ダイアログが最前面でなくても大丈夫です。
type
TForm1=class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
public
procedure HogeHoge(Sender: TObject);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
dlg: TForm;
timer: TTimer;
begin
//ダイアログ準備
dlg := CreateMessageDialog('適当なメッセージ', mtCustom, [mbOK]);
try
//dlg.Caption := 適当なCaption;
dlg.Position := poScreenCenter;
//自動で閉じるタイマー準備
//オーナーがダイアログなので、破棄はおまかせにする
timer := TTimer.Create(dlg);
timer.Interval := 5000; //5秒
//イベント割り当て
timer.OnTimer := HogeHoge;
//メッセージダイアログのアドレスを強引に数値化
timer.Tag := Integer(Pointer(dlg));
//タイマー開始
timer.Enabled := True;
//ダイアログ表示
dlg.ShowModal;
finally
//破棄
dlg.Free;
end;
end;
procedure TForm1.HogeHoge(Sender: TObject);
begin
if (Sender is TTimer) and (TTimer(Sender).Tag > 0) then begin
TForm(Pointer(TTimer(Sender).Tag)).ModalResult := mrOK;
end;
end;
えーと さん
大変ありがとうございました。
できました!勉強になります。
ツイート | ![]() |