掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
キーボードイベントを受け取るには (ID:37793)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
過去に同じ悩みを持って、どっちみちドラッグドロップも使うので 兼業させた記憶があります。 どちらが正しい使い方かわかりませんが、教えてもらったまんま。 //=======AppMessageを使う場合======= private procedure AppMessage(var Msg: TMsg; var Handled: Boolean);overload; procedure TForm1.FormCreate(Sender: TObject); Application.OnMessage:= AppMessage; DragAcceptFiles(TreeView1.Handle, True); //ドラッグドロップも使う場合 procedure TForm1.FormDestroy(Sender: TObject); Application.OnMessage := nil; procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean); var FileNames:array[0..255] of Char; Files :Integer; begin if Msg.Message = WM_DROPFILES then begin DragQueryFile(Msg.wParam, 0, FileNames, Sizeof(FileNames) - 1); Files := DragQueryFile(Msg.wParam, $FFFFFFFF, nil, 0); if (FindDragTarget(Msg.pt,False) is TTreeView) then begin for i := 0 to Files - 1 do begin {ドラッグドロップの処理} end; end; DragFinish(Msg.wParam); Handled:= True; end; if GetAsyncKeyState(27)<>0 then begin Sleep(300); {キーが押された場合の処理} end; end; //======MsgHandler(を使う場合)======= private procedure MsgHandler(var Msg: TMsg; var Handled: Boolean); procedure TForm1.FormCreate(Sender: TObject); DragAcceptFiles(TreeView1.Handle, True);//ドラッグドロップも使う Application.OnMessage := MsgHandler; procedure TForm1.FormDestroy(Sender: TObject); Application.OnMessage := nil; procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean); var FileNames:array[0..255] of Char; Files :Integer; begin if Msg.Message = WM_DROPFILES then begin DragQueryFile(Msg.wParam, 0, FileNames, Sizeof(FileNames) - 1); Files := DragQueryFile(Msg.wParam, $FFFFFFFF, nil, 0); if (FindDragTarget(Msg.pt,False) is TTreeView) then begin for i := 0 to Files - 1 do begin {TreeViewへのドラッグドロップの処理} end; end; DragFinish(Msg.wParam); Handled:= True; end; if GetAsyncKeyState(27)<>0 then begin Sleep(300); begin {ESCキーキーが押されて時の処理} end; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.