名前 題名 ▼ Saraさん > 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 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link