2013-08-06 5 views
-1

Вот ceflib.pas код CEFLIB.PASКак переписать метод класса?


Таким образом, в TCefRenderProcessHandlerOwn классе, объявил OnBeforeNavigation функцию.
Как мы видим, он возвращает False каждый раз и его плохо, потому что, если ссылка была открыта MouseWheelClick, она не откроет эту ссылку в новой вкладке, я хочу ее исправить.
Вопрос: Как переписать эту функцию?
TNX

ответ

2

Я никогда не использовал эту библиотеку, но он смотрит на меня, как вам нужно сделать следующее:

  1. Определить класс, производный от TCefRenderProcessHandlerOwn.
  2. Переопределите метод, который вас интересует в настройке. В этом случае OnBeforeNavigation.
  3. Во время инициализации создайте экземпляр класса и назначьте его глобальной переменной CefRenderProcessHandler.

 

type 
    TMyRenderProcessHandler = class(TCefRenderProcessHandlerOwn) 
    protected 
    function OnBeforeNavigation(const browser: ICefBrowser; 
     const frame: ICefFrame; const request: ICefRequest; 
     navigationType: TCefNavigationType; isRedirect: Boolean): Boolean; 
     override; 
    end; 

function TMyRenderProcessHandler.OnBeforeNavigation(const browser: ICefBrowser; 
    const frame: ICefFrame; const request: ICefRequest; 
    navigationType: TCefNavigationType; isRedirect: Boolean): Boolean; 
begin 
    .... your code goes here 
end;  

initialization 
    CefRenderProcessHandler := TMyRenderProcessHandler.Create; 

Проект поставляется с демо-программ, иллюстрирующих эту технику. Я предлагаю вам изучить эти демоверсии, чтобы узнать больше об этом очень мощном компоненте.

+0

Yup. Это правильный путь. Однако то, что OP пытается сделать, приведет к некоторому уродливому взлому, потому что, хотя он сможет обнаружить, что навигация была вызвана ссылкой в ​​этом событии (когда 'navigationType == NAVIGATION_LINK_CLICKED'), он не будет способный определить, какая кнопка мыши вызвала его. Слишком поздно определить, какая кнопка была нажата в событии OnBeforeNavigation. Я знаю, что это выходит за рамки этого вопроса, но, на мой взгляд, нет чистого способа решить то, что фактически хочет. – TLama

+1

@TLama Я не знаю об этом, и я очень рад заверить ваше слово. Я попытался заставить Райли задать вопрос по-другому, но он был мертв, задаваясь таким вопросом. Отсюда наивный ответ. –

+0

Спасибо, это работает! – Priler