お世話になります。
Image.Canvas上でマウスを使用してラインを書いている途中にスペースキーを
押し別処理をしたいのですがどのようにしたらスペースキーを押したことを認識
できるのでしょうか分かる方御教授願います。
そのImageはどこに配置してありますか.
Formなど,OnkeyDownなどのイベントがあれば,そのイベントが利用できる
はずです.
>Formなど,OnkeyDownなどのイベントがあれば,そのイベントが利用できる
ただし,この方法は,マウスカーソルがImageの上にあるかどうかの
判定を行う必要があります.
また,他の方法は,キーイベント付きのImageコンポーネントを作成
するか,Imageでキーフックを行う機能を付けてしまうなどの方法も
あります.
いろいろ試してみて下さい.
Mr.XRAYさんありがとうございます。
ImageコンポーネントはPanelニ配置してありますがImageにはOnkeyDownなどのイベ
ントがありませんのでどのようにしたらいいか困っていましたがImageコンポーネン
トに作画途中でも直前に操作したListBox等でOnkeyDownが機能することがわかりま
した。
>ListBox等でOnkeyDownが機能することがわかりました。
PanelはOnKeyDownないですからね.
Formであれば以下の様な感じです.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
APoint : TPoint;
begin
{画面(スクリーン)のどこにマウスカーソルがあるが調査}
GetCursorPos(APoint);
{それをImage上の座標に変換}
APoint:=Image1.ScreenToClient(APoint);
if PtInRect(Image1.ClientRect,APoint) then begin
if Key=VK_SPACE then begin
{Image内でSpace押下時の処理}
end else begin
{Image外で押下時の処理}
end;
end;
end;
今最初の発言を読み返してみたんですが,
>Image.Canvas上でマウスを使用してラインを書いている途中にスペースキーを
これって,もしかしてマウスイベント内で判断する必要があるんじゃ
ないでしょうか.もちろん,KeyDownで判断してフラグかなんかを
使用していも可能とは思いますが...
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
KeyState: TKeyboardState;
begin
GetKeyboardState(KeyState);
if KeyState[VK_SPACE]<>0 then ....
end;
こんな感じでしょうか.
Mr.XRAYさん再三の指導ありがとうございます。
>これって,もしかしてマウスイベント内で判断する必要があるんじゃないでしょうか
ご指摘の通りマウスイベント内で判断出来ればフラグを立てなくても使用できます
ね、 早速指導のようにマウスイベント内でうまく起動できましたありがとうござい
ます。