使用TChromiumWindow的正确姿势!

By | 2020年4月2日

第二次折腾TChromiumWindow了,翻看以前的源码,终于调通了。记下来,可能后面或其他的朋友会用到。

今天研究一个自动生成bootstrap网页的程序,从原来的软件中复制TChromiumWindow到新Form中,相关附件文件也复制到相应目录,但却不显示网页,奇怪了! 仔细翻看了以前的代码, 主要有以下几点:

  1. 在工程文件(.dpr)在uses中增加uCEFApplication
  2. 改造 工程文件(.dpr) 中begin…end.中的部分改成如下:
 begin
      GlobalCEFApp := TCefApplication.Create;
      if GlobalCEFApp.StartMainProcess then begin
          Application.Initialize;
          {$IFDEF DELPHI11_UP}
             Application.MainFormOnTaskbar := True;
           {$ENDIF}
          Application.CreateForm(TMainForm, MainForm);
          Application.Run;
      end;

     GlobalCEFApp.Free;
     GlobalCEFApp := nil;
end.

3. 在浏览器插件所在窗体添加事件

procedure TMainForm.Chromium_OnBeforePopup(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; const targetUrl, targetFrameName: ustring;
  targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean;
  const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient;
  var settings: TCefBrowserSettings; var noJavascriptAccess, Result: Boolean);
begin
     Result := (targetDisposition in [WOD_NEW_FOREGROUND_TAB, WOD_NEW_BACKGROUND_TAB, WOD_NEW_POPUP, WOD_NEW_WINDOW]);

end;

4. 在窗体OnShow中加入

procedure TMainForm.FormShow(Sender: TObject);
begin
     ChromiumWindow.ChromiumBrowser.OnBeforePopup := Chromium_OnBeforePopup;
     if not ChromiumWindow.CreateBrowser then begin
          Timer1.Enabled := True;
     end;
end;

5. 还需要添加一个Timer1,主要用来初始化TChromiumWindow

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
     Timer1.Enabled := False;
     if not(ChromiumWindow.CreateBrowser) and not(ChromiumWindow.Initialized) then  begin
          Timer1.Enabled := True;
     end;

end;

越过以上几个坑, 就可以采用 TChromiumWindow 来显示网页了

发表评论

电子邮件地址不会被公开。 必填项已用*标注