タイトルのままなのですが、マウスを動かさずにOnMouseMoveイベントを発生させる方法がわかりません。初心者です。教えてください。
文面通りであれば、単にOnMouseMoveイベントに割り当てたプロシージャを呼ぶだけです。
にしの様 お世話になります。
単にOnMouseMoveを呼び出しましたら、動きました。
こちらのプログラムではOnMouseMoveを実行した後、また何か処理されてしまい画面に反映されないようです。確認してみます。
以下のコードでは,FormにButtonを配置し,Button1をクリックすると,
文面の通り,Button1のOnMouseMoveイベントが発生します.
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1MouseMove(Self,[ssShift],0,0);
end;
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
ShowMessage('OnMouseMoveイベントを呼んだよ');
end;
>Button1をクリックすると,
>文面の通り,Button1のOnMouseMoveイベントが発生します.
ゴメンなさい.これではクリックしなくても発生してしまいますね.
MrXRAYさん ありがとうございます。
とりあえず、動いたのですが、この時マウスカソールの位置を知ることができますか?
GetCursorPos APIを使ってみては?
お、Mouse.Cursorposでも可です。
どちらか好きな方をつかってください。
マウスカーソルの位置というは引数のX,Yですが...
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
AP1,AP2: TPoint;
begin
AP2.X:=X;
AP2.Y:=Y;
Canvas.TextOut(20,20,'X='+IntToStr(X)+' Y='+IntTosTr(Y));
AP1:=Button1.ClientToScreen(AP2);
Canvas.TextOut(20,40,'X='+IntToStr(AP1.X)+' Y='+IntTosTr(AP2.Y));
end;
な感じの値のことですか.
それでさっきのマウスイベントですが,以下ならButton1のクリックで発生
します.意味があるかどうかはともかく...
procedure TForm1.FormCreate(Sender: TObject);
begin
OnMouseMove:=nil;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
OnMouseMove:=FormMouseMove;
FormMouseMove(Self,[ssShift],0,0);
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
ShowMessage('MouseMoveイベント発生');
OnMouseMove:=nil;
end;
たかみちえさん ありがとうございます。
'GetCursorPos' ですね。早速調べてみます。
ツイート | ![]() |