通常、フォーム上のボタンを押すために、マウスカーソルをボタンにあわせて左クリックしますが、カーソルをあわせることなく右クリックしただけで、ボタンが押される処理というのは、どういうふうにするのでしょうか?出来れば左クリックについても教えて欲しいです。よろしくお願いします。
わたしも最近、聞いたことですけど——。
TApplication.OnMessageには、アプリケーションのあらゆるメッセージが送られてきます(どのコントロールに送られたものであっても)。
WM_LBUTTONDOWNなどももちろん送られてきます。
ボタンをクリックさせるには、TButton.Clickをはじめ、いろいろな方法があります(メッセージを送るとか、関連付けたアクションのExecuteを呼ぶとか——
B級プログラマというのならば、これ以上の説明は不要ですよね(^_^)
けっして見栄をはったわけではないのですが、実は私はただの学生です。誤解を生むようなネームを使用してすいませんでした。結果、たかみちえ様の発言の意味を理解するだけの知識を持ち合わせていません。よろしければ、もう少しやさしく教えていただいてもよろしいでしょうか?ほんとすいません。
procedure TForm1.WMLButtonDown(var MSG:TWMLButtonDown );
begin
button1.Click
end;
たかみちえ様のレスをもとに、上記のソースを導き出せることが出来ました。
いろいろややこしくて、すいませんでした。
解決ということなのですが,
これって,もしかして,
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('右だよ');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('左だよ');
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbRight then Button1Click(nil);
if Button=mbLeft then Button2Click(nil);
end;
という動作のことですか.最初の文章から,この動作のことかとは思ったの
ですが,これだとイベントで簡単にできてしまうので,違うかなと.
Formの外側でマウスをクリックしてもということなのでしょうか.
(Delphi7で確認.Delphi7じゃないこのイベントはないのかしらん)
解決ということなのですが,
これって,もしかして,
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('右だよ');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('左だよ');
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbRight then Button1Click(nil);
if Button=mbLeft then Button2Click(nil);
end;
という動作のことですか.最初の文章から,この動作のことかとは思ったの
ですが,これだとイベントで簡単にできてしまうので,違うかなと.
Formの外側でマウスをクリックしてもということなのでしょうか.
(Delphi7で確認.Delphi7じゃないこのイベントはないのかしらん)
解決ということなのですが,
これって,もしかして,
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('右だよ');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('左だよ');
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbRight then Button1Click(nil);
if Button=mbLeft then Button2Click(nil);
end;
という動作のことですか.最初の文章から,この動作のことかとは思ったの
ですが,これだとイベントで簡単にできてしまうので,違うかなと.
Formの外側でマウスをクリックしてもということなのでしょうか.
(Delphi7で確認.Delphi7じゃないこのイベントはないのかしらん)
ごめんなさい.
操作ミスで同じのをたくさん送ってしまいました.
確かにそれでもできるんですけど、
それだとフォームの中のコントロールにフォーカスが当たってるとき、メッセージが来ませんね。
質問者本人の書いたソースも、同じ問題が起こるはずです。わたしがやってみたのはWM_KEYDOWNだったので、ちょっと違うかもしれませんが。
OnMessegeならば、フォームのどこにフォーカスがあろうとも、ちゃんとメッセージが回ってきます。
そのときにWM_LBUTTONDOWNなどを拾って処理してあげれば、いいです。
> 実は私はただの学生です。
ちなみにわたしもただの学生
>OnMessegeならば、フォームのどこにフォーカスがあろうとも
なるほど.そういうことですか.
了解しました.
Halbow です。
> OnMessegeならば、フォームのどこにフォーカスがあろうとも、ちゃんとメッセージが回ってきます。
そうですね。Application.OnMessage は、メインのメッセージループが回っていて、メッセージキューに入るメッセージだけを受け取れます。コントロールが親に送る SendMessage() や TOpenDialog などの非VCLのダイアログを表示しているときや、メニューループのときのメッセージは受け取れません。これらをちゃんと受け取るためにはローカルフックが必要です。
> ちなみにわたしもただの学生
わたしはただのオヤジです。(笑)
余談なんですが,恥ずかしながら,かなり(少し?)前まで,ローカルフック
も,EXE組込みのリソースも,何で必要なんだろう,と思っていました.
でも,今は,ローカルフックもグローバルフックも,EXE組込みのリソース
もしっかりお世話になっています.
きっかけは,ある動作や仕様を満たしたいがどうやったら...
と考えていたところ,MLや色々の掲示板,サイトで過去にみた情報が役に
たったという訳です.
Application.OnMessageにはかなり悩んだものです.
本当にフックは強力ですね.
>わたしはただのオヤジです。(笑)
わたしもただのオヤジです.(^_^);
みなさんたくさんのご意見ありがとうございました。ぶっちゃけた話、みなさんのデルファイレベルが高すぎて、理解できるレスは、皆無と言っていいほどでした。
私も早くデルファイ談義ができるように日々、勉強したいと思っています。レスをくれたみなさん、本当にありがとうございました。
ツイート | ![]() |