2013-08-07 3 views
1

TChromium의 링크를 마우스 가운데 클릭하는 것을 차단하는 방법은 무엇입니까?
중간 마우스를 클릭하여 새 탭에서 열려면 Ctrl 키를 누른 채 중간 마우스를 누른 다음 새 탭에서 선택한 링크를여십시오.
나는이 기본 기능이 있습니다
TChromium 링크에서 중간 마우스 클릭을 차단하는 방법?

function TCustomRenderProcessHandler.OnBeforeNavigation(const browser: ICefBrowser; 
    const frame: ICefFrame; const request: ICefRequest; 
    navigationType: TCefNavigationType; isRedirect: Boolean): Boolean; 
begin 
    Result:=False; 
end; 

을하지만 정확하게는 아무것도 제공하지 않습니다.
TNX

+0

네, 네비게이션을 취소하기 위해 True를 돌려 주어야하지만 아무것도하지 않습니다. 그러나 나는 그 이벤트 참조에 대한 링크 앞에 게시했습니다. (http://magpcss.org/ceforum/apidocs3/projects/ (default) /CefRenderProcessHandler.html#OnBeforeNavigation) 어디에 명확하게 명시되어 있습니다. 당신이 뭔가를 배우려고 애 쓰지는 않았지만 여기에 짧은 개념 증명이 있습니다 (http://pastebin.com/pNF1RmFb). 그러나 나는 훅 전문가가 아니며 마우스를 연결하기에 더 좋은 시간이 있는지 알지 못합니다. – TLama

+0

증명이 작동하지 않습니다.'MiddleMouse'는'OnBeforeNavigation'에서 항상'False'와 같지만'Form1'에서는 괜찮습니다. – Priler

답변

1

나는 다른 방법으로 그것을했습니다.
@TLama, 빠른 작업 후크 기능을 이용해 주셔서 감사합니다.
그래서, 내가 그것을 어떻게했는지 : 내 DCEF3 :) 도움 모든
감사에서 작동하는 방법 그래서

//@HOOK PROC 
    function MouseProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; 
    var 
     HookStruct: TMouseHookStruct; 
    begin 
     HookStruct := PMouseHookStruct(lParam)^; 

     if (nCode >= 0) then 
     begin 
     case wParam of 
      WM_MBUTTONDOWN: 
      Begin 
       MiddleDown := True; 
       LeftMouse := False; 
      End; 

      WM_LBUTTONDOWN: 
      Begin 
       MiddleDown := False; 
       LeftMouse := True; 
      End; 

      WM_RBUTTONDOWN: 
      Begin 
       MiddleDown := False; 
       LeftMouse := False; 
      End; 
     end; 
     end; 

     Result := CallNextHookEx(0, nCode, wParam, lParam); 
    end; 

    procedure TForm1.Timer1Timer(Sender: TObject); 
    begin 
     If(MiddleDown) then 
     Begin 
      MiddleDown:=False; 
      If(SelectedItem<>'') Then 
      Form1.AddNewTab(SelectedItem,SelectedItem,''); 
     End 
     Else If(LeftMouse) then 
     Begin 
      LeftMouse:=False; 
      If(SelectedItem<>'') Then 
      FBrowsers[Current_FBrowser_Index].Load(SelectedItem); 
     End; 
    end; 

function TCustomRenderProcessHandler.OnBeforeNavigation(const browser: ICefBrowser; 
    const frame: ICefFrame; const request: ICefRequest; 
    navigationType: TCefNavigationType; isRedirect: Boolean): Boolean; 
begin 

    if navigationType = NAVIGATION_LINK_CLICKED then 
    begin 
    Result := True; 
    end 
    else 
    Result := False; 
end; 

을 먹으 렴!

+0

'OnBeforeNavigation' 이벤트에서'MiddleDown' 전역 변수의 값을 아무 문제없이 읽을 수 있어야합니다. 이제 일반 마우스 클릭과 링크 클릭 사이에는 아무런 관련이 없습니다. – TLama

+0

이 If (SelectedItem <> '') Then Then에 의해 click과 linkclick 사이에 관계가 있습니다. 나는 선택의 여지가 없었습니다.'MiddleDown'은'OnBeforeNavigation'에서 항상'False'입니다. – Priler

+0

여기에 게시 한 코드에는 없습니다. pastebin에 관한 프로젝트는 Delphi 7과 XE3에서 테스트했습니다. 두 경우 모두 예상대로 작동합니다. – TLama

관련 문제