Chromium多标签浏览器开发

   由于项目的原因,需要使用Delphi语言进行开发Chrome内核的多标签浏览功能。本着开放精神,先到网上搜索了一大圈,发现大多以IE内核的多标签浏览器居多(即WebBrowser控件)。Chromium资源以及相关介绍,少之又少,想查一些资料,都没有办法。发现一个叫DcefBrowser的控件,说是可以实现多标签浏览器。但是这是用Delphi xe编译的,低版本无法安装使用,并且在开发项目时,也比较忌讳使用太多的第三方控件。实在没办法,只能自己动手,丰衣足食。

  首先上网下载Chromium的Delphi组件,即dcef3。下载之后,进行安装,安装方法在此不再赘述。安装成功之后,在Delphi的控件面板上就可以看到Chromium的控件,如下图所示:


  将图中红圈中的控件,添加到窗体上,然后再添加一个PageControl控件。

  首先看一下Chromium控件的事件,主要事件如下图所示:

Chromium多标签浏览器开发_第1张图片

  要想开发多标签浏览器,主要就是需要处理OnBeforePopup事件。不过需要注意,Chromium内核是多线程执行的,因此,不要在事件里面直接操作Delphi的vcl控件,需要在事件中向窗口发送处理消息,然后再消息处理函数中处理要执行的操作,否则有可能会出现界面死锁的情况。


OnBeforePopup事件处理如下:

PostMessage (Handle, BROWSER_POPUP, Integer (@windowInfo), 0);

消息定义如下:

onst
  BROWSER_POPUP             = WM_USER + 1001;


定义消息处理函数:

procedure BrowserPopup (var msg: TMessage); message BROWSER_POPUP;

procedure TFormMain.BrowserPopup(var msg: TMessage);
var
  TabSheet: TTabSheet;
  nPageCount: integer;
  CefWindowInfo: PCefWindowInfo;
begin
  nPageCount := self.PageControl1.PageCount;
  TabSheet := self.PageControl1.Pages[nPageCount - 1];

  CefWindowInfo := PCefWindowInfo (msg.WParam);
  CefWindowInfo^.Style := CefWindowInfo^.Style or WS_CHILDWINDOW - WS_TILEDWINDOW;
  CefWindowInfo^.parent_window := TabSheet.Handle;
  CefWindowInfo^.x := 0;
  CefWindowInfo^.y := 0;
  CefWindowInfo^.Width := TabSheet.Width;
  CefWindowInfo^.Height := TabSheet.Height0;

  TabSheet.TabVisible := True;
  self.PageControl1.ActivePage := TabSheet;
  self.TimerNewTab.Enabled := True;
end;


  处理Chromium控件的OnBeforePopup事件之后,就可以实现了多标签浏览器。


Chromium内核地址下载:

点击打开链接


多标签浏览器源码地址下载:

点击打开链接


你可能感兴趣的:(天狼工作室)