【问题标题】:How to rewrite class method?如何重写类方法?
【发布时间】:2013-08-06 14:32:04
【问题描述】:

这里是ceflib.pas 代码 CEFLIB.PAS


所以在TCefRenderProcessHandlerOwn 类中,声明了OnBeforeNavigation 函数。
正如我们所看到的,它每次都返回 False 并且很糟糕,因为如果链接是由 MouseWheelClick 打开的,它将不会在新标签中打开此链接,我想修复它。
问题是:如何重写这个函数?
TNX

【问题讨论】:

    标签: delphi delphi-xe3 tchromium chromium-embedded


    【解决方案1】:

    我从未使用过这个库,但在我看来,您需要执行以下操作:

    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;
    

    该项目附带演示该技术的演示程序。我建议您研究这些演示,以了解有关这个非常强大的组件的更多信息。

    【讨论】:

    • 是的。这是正确的方法。然而,OP 试图做的事情会导致一些丑陋的 hack,因为尽管他能够检测到导航是由该事件中的链接点击调用的(当 navigationType == NAVIGATION_LINK_CLICKED 时),但他将无法确定哪个鼠标按钮导致它。现在确定在OnBeforeNavigation 事件中按下了哪个按钮为时已晚。我知道这超出了这个问题的范围,但在我看来,没有明确的方法可以解决 OP 真正想要的问题。
    • @TLama 我真的不知道,我很高兴相信你的话。我试图让莱利以不同的方式问这个问题,但他一心想这样问。因此,这是一个天真的答案。
    • 没错,我是根据什么鼠标按钮来确定这个事件的:) HookForm
    • 好吧,我确定了 MiddleMouseClick,但正如@TLama 所说,我不能在OnBeforeNavigation 事件中使用它...
    • 为什么?只需记住上次在鼠标钩子中单击了哪个鼠标按钮,并将此值传递给 OnBeforeNavigation 事件方法。在那里您可以检查(以伪代码)if (LastButton = mbMiddle) and (navigationType = NAVIGATION_LINK_CLICKED) then TheLinkWasClickedByMiddleButton; 之类的内容。
    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 2010-10-18
    • 2011-12-26
    • 2021-10-09
    • 1970-01-01
    • 2013-03-14
    • 2021-06-11
    • 1970-01-01
    相关资源
    最近更新 更多