ダイアログ(例えばMessageDlg)を開くと「はい」「いいえ」のようなボタンが表示され「はい」のボタンが点線も表示されています。
ダイアログが開いたときマウスポインタを自動的に「はい」に移動する方法をありましたら教えてください。
PCのマウス設定は「ポインタを自動的に規定のボタンに移動」に設定しているのですが、いろいろな他のソフトでも自動的に移動する物としない物があります。マウスドライバの性能でしょうか。
お願いします。
自前のアプリで開いたダイアログのことなのか、
それとも、他のアプリが出すダイアログすべてのことなのか...
かくにんだけさん、レスありがとうございます。
自前のアプリです。舌足らずで申し訳ないです。
こんなことかな?。
http://www.asahi-net.or.jp/~HA3T-NKMR/tips011.htm
ご免なさい。
意味を取り違えて居ました。
前項を削除(取り消し)致します。
もう少し、緻密に各コントロールのWidthなどから数値を求めた方が良いと思いますが、概略こういった方向でどうでしょうか?
すみませんが実際に動かしていないので、誤りがあったら訂正お願いします。
procedure TForm.OnCreate(Sender: TObject);
var
dwFlags : DWORD;
X,Y : Integer;
TempPos : TPoint;
begin
dwFlags:=MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE;
//ボタンの位置を計算
X:=Trunc((Left + Button1.Left + 15)/Screen.Width*65537);
Y:=Trunc((Top + Button1.Top + 25)/Screen.Height*65535);
//マウスカーソル移動
Mouse_Event(dwFlags,X,Y,0,0);
end;
補足ですが、デュアルモニタを考慮していないのでその辺りも制御して下さい。
Nullさん、moruさんレスありがとうございます。
moruさんの回答でダイアログのボタンの位置が取得できませんでした。
ダイアログ(例えばMessageDlg)が開くと「はい」「いいえ」のボタンがありますが、このダイアログの「はい」ボタンの座標を取得出来ません。
Button1をフォームに貼り付けた場合は取得できますが、
ダイアログのボタンの場合は判りませんでした。
すみません。
真琴:「ダイアログの出し方って、イロイロあるんでしょ? ハルコさん」
春子:「そう…あるよイロイロ…、これは CreateMessageDialog を使った例だけど」
procedure WmAPP(var msg: TMessage); Message WM_APP;
.....
procedure TForm1.Button1Click(Sender: TObject);
begin
with CreateMessageDialog('「はい」押してね', mtInformation, [mbYes, mbNo]) do try
ActiveControl := TWinControl(FindComponent('Yes'));
PostMessage(Self.Handle, WM_APP, 0, ActiveControl.Handle);
if ShowModal = mrYes then begin
Beep;
// ShowMessage('Yesボタンが押されたヨ');
end;
finally
Free;
end;
end;
procedure TForm1.WmAPP(var msg: TMessage);
var
R: TRect;
begin
GetWindowRect(msg.LParam, R);
SetCursorPos(R.Left+30, R.Top+10);
end;
真琴:「アタシ、CreateMessageDialogって知らなかった、MessageDlgじゃダメ?」
春子:「ダメってコトはないよ、"はい"ボタンのハンドルが分かればいいんだから」
真琴:「このWM_APPっていうメッセージ、マウスカーソル動かすコトにも使えるんだぁ」
春子:「そうヨ、何にでも使える便利メッセージなの」
真琴:「この PostMessageは、SendMessageじゃいけないんだよね?」
春子:「ううん、この場合は、そっち使ってもいいヨ」
真琴:「えぇ、いいの?…だって、SendMessageだと、ShowModalの前に届いちゃうよ」
春子:「そうだけど、でもダイジョウブなんだ」
真琴:「だって、まだダイアログが無いのに、メッセージ届くなんて変じゃない」
春子:「ダイアログはあるの、場所も決まってる、Create済みだからョ。ただ見えてないだけ」
真琴:「そうなの? なんかピンとこないけど…」
春子:「ねぇ、マコト」
真琴:「ん?、なに?」
春子:「マコトがメッセージ入れたビンを海に投げた時、届けたい島はもう存在してるよネ」
真琴:「えっ?それはあたりまえじゃ…」
春子:「でも、ここからは見えない、でしょ?」
真琴:「うん、見えない…」
春子:「それと似たようなモンよ、マコト、分かった?」
真琴:「…ぅん、分かったような気がする…あるのね…」
春子:「そうだよ、見えなくてもあるの、…マコト、今日は涼しいね、昨日はあんなに暑かったのに」
真琴:「ねぇ、ハルコさん」
春子:「ん?、なに?」
真琴:「従業員部屋に幽霊がいるって知ってる?」
春子:「えっ?ホント? そんな話、聞いたことないよ」
真琴:「ハルコさん、今日みたいに急に涼しくなると、その幽霊出るんだって」
春子:「マコトぉ、ウソでしょ? 幽霊なんているわけない…」
真琴:「確かにいるの、ただ、いつもは見えないだけ…だけどぉ、ホラ、いまハルコさんの後ろに…」
春子:「きゃー!!」
真琴:「ハルコさん、アタシもネ、おじいちゃんにこうやって、おどかされたの^^」
春子:「マコト、もぉう〜」
涼しくなるとさんありがとうございました。
おかげさまで解決しました。
ありがとうございました。
>ダイアログ(例えばMessageDlg)を開くと
失礼しました。上記のように記載されていましたね。
自作のダイアログ上のボタンと勘違いしていました。
ツイート | ![]() |