procedure TForm1.FormKeyDown(Sender〜〜〜);
Cursor:=crCross ;
procedure TForm1.FormKeyUp(Sender:〜〜〜〜);
Cursor:=crDefault;
上記でマウスボタンを押してる状態でキーが押されたらカーソル形状を変えたいのですが・・・
マウス左ボタンが押されてる時にキーボードを押しても(FormKeyDown)変化しません。
でも右ボタンが押されている時、左右どちらも押されてない時は変わります。
なにか、対処方法ありませんか?
APIのSetCursor(hcur)を使うと左ボタンが押されている時も変化しますが、「hcur;/* カーソルのハンドル*/」が理解できません。
実動ではカーソル形状は自作で
Screen.Cursors[1] := LoadCursorFromFile('C:\TEST.cur');のように読込んでいます。
API あまりさわりたくないので、詳しくないですが、
ひょっとしてヒントになるかも・・なページです。
http://www.agtech.co.jp/html/v8sdkmanuals/prog_tut/Btriface4.html
{ Private 宣言 }
ArrowCursor,
WaitCursor : HCursor;
/////////
WaitCursor := LoadCursor(0, IDC_WAIT);
・・・WaitCursor。 型から見るに、恐らく、hcur のことだと思います。
疑問の一つはこれで解消できればいいですが、前述したように、
詳しくないのではずしてるかも知れません。
これで動けばしめたものですが、OSがカーソルを強制的に替えてしまう
可能性もあり、その場合は、さらにメッセージをフックして、違う値をセット後、
メーッセージ・ループに乗せる処理が必要かも知れません。
「D&Dでフォーカス・ゲットは?」の質問でも、そこのところは面倒そうなので、
自分は、そんなことまでしてられん・・とあきらめましたが・・。
直接の解答でなく、はずしてたら申し訳ないです。書かないよりまし
程度の情報ですみません。
グローバルフックでキーボードをとらえれば楽ちんです。
そのものずばりじゃないですが
x-rayさんとこのサンプルリンクさせときます
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/KindOfHook.htm
あと、キーの数が少なくて良いならHotkeyを使うと超楽ちんです。
http://forum.nifty.com/fdelphi/samples/00356.html
カーソルいじったことは、あまりないんですが。
interface
private
{ Private 宣言 }
Cursor1: hCursor;
Cursor2: hCursor;
MouseShift: TShiftState;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
Cursor1:= LoadCursor( 0,IDC_ARROW);
Cursor2:= LoadCursor( 0,IDC_CROSS);
//Cursor:=LoadCursorFromFile();
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ssLeft in MouseShift then
SetCursor( Cursor2)
else
SetCursor( Cursor1);
Caption:=( Char(Key));
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseShift:=Shift;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseShift:=Shift;
end;
もし、フォームに TEdit や TMemoが乗ってる場合は、キーイベントはそっちに
行ってしまうようなので
・FormのKeyPreviewをTrueにするか
・キーイベントやマウスイベントも同様のハンドラにアサインする(結びつける)か
・同じように別に書くか
のいずれかをしないと駄目です。
ツイート | ![]() |