Mr.XRAYさん こんばんは。
また、やってきました(^^;
plExplorerFolderTreeでグローバルフックを使わずにOnMouseEnterを
起こすことに成功しました。(って言うほどのものでもないですが)
どのようにしたかといいますと・・・
以下のように、MessageLoop内で強引にイベントを発生させたのです。
procedure TplExplorerFolderTreeThread.MessageLoop;
var
Amsg : Msg;
APos : TPoint;
cmpFind : TWinControl;
begin
while True do begin
if GetMessage(AMsg, 0, 0, 0) = False then begin
PostQuitMessage(0);
break;
end;
case AMsg.message of
WM_MOUSEMOVE:begin
GetCursorPos(APos);
cmpFind := FindVCLWindow(APos);
if (cmpFind = FWinControl) then begin
if not FWinControl.FMouseEnterFlg then begin
FWinControl.FMouseEnterFlg := True;
FWinControl.DoMouseEnter;
end
end
else begin
if FWinControl.FMouseEnterFlg then begin
FWinControl.FMouseEnterFlg := False;
FWinControl.DoMouseLeave;
end;
end;
end;
end;
TranslateMessage(Amsg);
DispatchMessage(Amsg);
end;
end;
そこで、実際のMouseEnterイベント内で、plExplorerFolderTreeにSetFocusを
実行すると、何も起きない・・・で調べると、実際のFolderTreeはFEXPLとなって
いるので、こちらにもSetFocusを追加したのは良いのですが、
IUnknown_GetWindow(m_pNameSpaceTreeControl, FHandle);
Windows.SetFocus(FHandle);
とするしかなく、実際にフォーカスはわたるのですが、MouseLeave時に
他のコンポーネントで例えば ListView1.SetFocus としても、フォーカスが
わたらないんです・・・(^^;
かといって、全コンポーネントでWindows.SetFocusを利用すると、Zオーダーが
狂うのですよね・・・(^^;
なにかよい方法ありませんでしょうか?m(_ _)m
|