マウスボタンのクリック、マウスの位置情報の取得


●マウスによるプロシージャの起動

DELでマウスがいつ押されたか?どこで押されたかを知るには
それ専用のイベントが用意されている。
例えばFORM内での情報ならばインスペクタのイベントに
マウスが押された時や動いた時にイベントが起動するような
命令を持っている。

そして例えばOnMouseDownをダブルクリックすれば、以下のような
マウスが押された時に起動するプロシージャが現れる。
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin

end;
ただし、これはTForm1での宣言なので反応するのはあくまでもFORM上のみ。
他のイメージやLABELの上でマウスが押されても無反応。

イメージ上でのマウスの動きが見たければ
イメージのインスペクタにあるマウスイベントで処理させる。

押す場所によって起動するプロシージャが違うので
いちいち分けなくて便利である。

●マウスの情報取得

(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
マウスの情報は、起動プロシージャのカッコ内で説明されている。
これにより、プロシージャ内で自分が宣言せずに
Button、Shift、X, Yの情報を使用できる。ただし、あくまでも情報を
読み出せるだけで、自分で書き換えることはできない。
以下、説明。

X, Y
 一番左上を0,0とし、ドット単位で右へはX、下へはYを増加としている数値。
 マウスの位置は矢印の先端。型式はInteger。

Button
 どのマウスボタンでこのプロシージャが起動されたかの情報。
 mbLeft, mbRight, mbMiddleの情報がある。
 if Button = mbLeft then のように扱う。

Shift
 起動時に他にどのボタンが押されっぱなしになっていたかを見る情報。

ssShift 〔Shift〕キーが押されている
ssAlt 〔Alt〕キーが押されている
ssCtrl 〔Ctrl〕キーが押されている
ssLeft マウスの左ボタンが押されている
ssRight マウスの右ボタンが押されている
ssMiddle マウスの中央ボタンが押されている
ssDouble マウスがダブルクリックされた
扱い方は以下
//単一ボタン限定の場合
if Shift = [ssCtrl] then

//複数の条件の場合
if Shift = [ssCtrl,ssAlt] then

//他が押されていてもいい場合
if ssShift in Shift then

●マウスカーソルの変更の仕方

情報の取得とは違うが、マウスカーソルの形状を変更する方法。
インスペクタのプロパティにあるCursorを変更する。
プログラム内で変更する場合は以下。
//プログラム途中で変更する場合
Form1.Cursor := crCross;

//カーソルを消す場合
Form1.Cursor := crNone;
カーソルを消す場合は、プロパティでのCursorをcrNoneに
指定しても無理。プログラムで指定しないといけない。

 戻る