喫茶XRAYトップページ

[スレッド全体
]

[4082] plExplorerFolderTreeにて返信 削除
2010/12/26 (日) 23:53:42 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

[4083] Re:plExplorerFolderTreeにて返信 削除
2010/12/27 (月) 10:01:21 Mr.XRAY
▼ Saraさん.こんにちは.

> plExplorerFolderTreeでグローバルフックを使わずにOnMouseEnterを
> 起こすことに成功しました。(って言うほどのものでもないですが)


おおっ! やってしまいましたね.すごい.

> 他のコンポーネントで例えば ListView1.SetFocus としても、フォーカスが
> わたらないんです・・・(^^;


ムムム...

> なにかよい方法ありませんでしょうか?m(_ _)m

ありません.
何かないですかね.う〜ん.
エクスプローラのオブジェクトが,Delphiのようなコントロールだったら
簡単なんですけどね.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82