またしても質問です、よろしくお願いいたします。
あるアプリケーションを作っていて、そのアプリケーション実行中に
特定のキーを押すと、自分のフォームの例えば(100,100)を
クリックしたことにするメソッドを作ろうとして悩んでいます。
Mouse_Eventを使えばかろうじてできたのですが、マウスカーソルには
動いて欲しくないのです。
ということで、SendMessageをつかったのですが、これがどうも・・・。
SendMessage(Self.Handle, WM_LBUTTONDOWN, 0, 100 * $FFFF + 100);
で思ったとおり動作しません。三つ目と四つ目の引数が怪しい気がするのですが。
それと、これをした後一度だけマウスの操作が聞かなくなります。
ReleaseCaptureというのを使わないといけないのでしょうか?
自分ではここまで調べるのが限界でした。よろしくお願いいたします。
クリック=「押して、離す」ですよね。
WM_LBUTTONDOWNだけでは「押す」だけです。
離さないといけません。
WM_LBUTTONUPを使えばよろしいかと思います。
・・・そういえばそうですね。
全く恥ずかしい質問でした。
にしの様、いつもお付き合いいただきすいません。
ご回答ありがとうございました。
はじめまして、つい先日Delphiはじめたばかりの超初心者です
>SendMessage(Self.Handle, WM_LBUTTONDOWN, 0, 100 * $FFFF + 100);
「0, 100 * $FFFF + 100」の意味を教えて頂けませんか?
X = 右の数字 - 左の数字、Y = 左の数字
みたいになってるようですけれど・・・
Delphi 付属の Win32.hlp によると
WM_LBUTTONDOWN
fwKeys = wParam; // key flags
xPos = LOWORD(lParam); // horizontal position of cursor
yPos = HIWORD(lParam); // vertical position of cursor
となっていますので、
「0, 100 * $FFFF + 100」の最初のゼロは、どのバーチャルキーも押していない
ことを示し、100 * $FFFF + 100 は yPos が 100、xPos も 100 であること
を設定しています。後者は普通 MakeLParam(100,100) を使います。
function MakeLParam(l, h: Word): LPARAM;
なるほど、納得しました
jokさんありがとうございます!