AsuYuHomepage
トップページ サイトの説明 子供の成長記録 JM BAR Delphi リンク集
Home>>プログラミング>>Tips&Tricks>>マウス下のコントロールを取得する
Delphi Tips
Delphi Win32API
ダウンロード

Delphi Tips & Tricks

マウス下のコントロールを取得する

 指定されたマウス位置にあるコントロールを取得するサンプルです。
例えばエクスプローラからのドラッグ&ドロップの際に、ドロップされた位置からコントロールを識別して処理を分けるといった使い方ができます。
uses ShellAPI;

private
  procedure WMDropFiles(var msg: TWMDropFiles); message WM_DROPFILES;
---------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle, True);
end;

procedure TForm1.WMDropFiles(var msg: TWMDropFiles);
var
  compo: TComponent;
  Pt: TPoint;
begin
  GetCursorPos(Pt);
  compo :=FindDragTarget(Pt, True);
  if compo <>  nil then
    ShowMessage(compo.Name + 'にドロップされました。');
    //if compo is TPanel then というように
    //コンポーネント名で処理を分けることも可能
end;

※引数の AllowDisable は、Enabled =False のコントロールも見つけるかどうかのフラグです。
その他マウス座標からコントロールを見分ける関数は以下のようなものもありますが、非ウィンドウコントロールも含めて識別できる為 FindDragTarget が最も使いやすいと思います。

//ウィンドウハンドルからウィンドウコントロールの参照を取得する
function FindControl(Handle: HWnd): TWinControl;

//指定された座標のウィンドウコントロールを取得する(内部でWindowFromPoint → FindControl)
function FindVCLWindow(const Pos: TPoint): TWinControl;