2013-08-07 3 views
1

Как заблокировать средний щелчок мышью по ссылкам в TChromium?
Я хочу обработать этот средний щелчок мышью, чтобы открыть его на новой вкладке, поэтому мне нужно заблокировать этот средний щелчок мыши в TChromium, а затем переместить среднюю мышь, а затем открыть выбранную ссылку на новой вкладке.
У меня есть функция это по умолчанию:
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/ (по умолчанию) /CefRenderProcessHandler.html#OnBeforeNavigation), где это четко указано. Несмотря на то, что вы ничего не научились чему-то научиться, здесь у вас есть короткий «доказательство концепции» (http://pastebin.com/pNF1RmFb). Но я не эксперт по крючка и не знаю, есть ли лучшее время, чтобы зацепить мышь. – TLama

+0

Доказательство не работает, 'MiddleMouse' всегда равно' False' в 'OnBeforeNavigation', но в' Form1' он работает нормально. – Priler

ответ

1

Я сделал это по-другому.
@TLama, спасибо за быструю работу.
Итак, как я сделал это:

//@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; 

Итак, вот как это работает в моем DCEF3 :)
Спасибо всем за помощь !!!

+0

Вы можете быть в состоянии прочитать значение глобальной переменной «MiddleDown» в событии OnBeforeNavigation без каких-либо проблем. Теперь у вас нет никакой связи между обычным щелчком мыши и ссылкой. – TLama

+0

У меня есть связь между click и linkclick этим 'If (SelectedItem <> '') Then'. У меня не было выбора, «MiddleDown» всегда равен «False» в 'OnBeforeNavigation' – Priler

+0

Не в коде, который вы разместили здесь. Проект по пастебину, который я тестировал в Delphi 7 и XE3. В обоих случаях он работает так, как ожидалось. – TLama

Смежные вопросы