Canvas作画中のスペースキー取得について

解決


エマ  2004-01-08 03:19:13  No: 6580  IP: [192.*.*.*]

お世話になります。
Image.Canvas上でマウスを使用してラインを書いている途中にスペースキーを
押し別処理をしたいのですがどのようにしたらスペースキーを押したことを認識
できるのでしょうか分かる方御教授願います。

編集    削除
Mr.XRAY  URL  2004-01-08 05:35:44  No: 6581  IP: [192.*.*.*]

そのImageはどこに配置してありますか.
Formなど,OnkeyDownなどのイベントがあれば,そのイベントが利用できる
はずです.

編集    削除
Mr.XRAY  URL  2004-01-08 09:20:18  No: 6582  IP: [192.*.*.*]

>Formなど,OnkeyDownなどのイベントがあれば,そのイベントが利用できる

ただし,この方法は,マウスカーソルがImageの上にあるかどうかの
判定を行う必要があります.
また,他の方法は,キーイベント付きのImageコンポーネントを作成
するか,Imageでキーフックを行う機能を付けてしまうなどの方法も
あります.

いろいろ試してみて下さい.

編集    削除
エマ  2004-01-08 17:29:05  No: 6583  IP: [192.*.*.*]

Mr.XRAYさんありがとうございます。
ImageコンポーネントはPanelニ配置してありますがImageにはOnkeyDownなどのイベ
ントがありませんのでどのようにしたらいいか困っていましたがImageコンポーネン
トに作画途中でも直前に操作したListBox等でOnkeyDownが機能することがわかりま
した。

編集    削除
Mr.XRAY  2004-01-08 18:04:11  No: 6584  IP: [192.*.*.*]

>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;

編集    削除
Mr.XRAY  URL  2004-01-08 19:29:11  No: 6585  IP: [192.*.*.*]

今最初の発言を読み返してみたんですが,

>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;

こんな感じでしょうか.

編集    削除
エマ  2004-01-08 23:30:58  No: 6586  IP: [192.*.*.*]

Mr.XRAYさん再三の指導ありがとうございます。

>これって,もしかしてマウスイベント内で判断する必要があるんじゃないでしょうか

ご指摘の通りマウスイベント内で判断出来ればフラグを立てなくても使用できます
ね、 早速指導のようにマウスイベント内でうまく起動できましたありがとうござい
ます。

編集    削除