▼ snail3さん
> これって簡単に取り出す関数無いですよね。
> 知っていたら教えて下さい。
すでにマスターからレスがありますが、FindVCLWindowは、ウインドウハンドルを
持っているコンポーネントしか拾うことができないようなので、
直接の子コントロールしか返してくれないけど、ウインドウハンドルなしでもOKな
ControlAtPosを使ってみると、こんな感じですかね。
上記のWMParentNotify内で行うなら
var
ctrlPos: TPoint;
control1, control2: TControl;
ctrlPos := Point(Message.XPos, Message.YPos);
control1 := ControlAtPos(ctrlPos, True, True);
while control1 <> nil do begin
control2 := control1;
if control2 is TwinControl then begin
//子コントロールの座標に変更
ctrlPos := Point(ctrlPos.X - TwinControl(control2).Left,
ctrlPos.Y - TwinControl(control2).Top);
//子コントロール内のコントロールを検索
control1 := TwinControl(control2).ControlAtPos(ctrlPos, True, True);
end
else begin
control1 := nil;
end;
end;
{ここで control2 がマウス下のコンポーネント
今更ながら、WMParentNotifyは ウィンドウハンドルのないコントロールからは
届かないので、TScrollBoxに直接貼ったTLabelとかだと、ここではつかまえることが
できないですね。}
|