今天研究一个自动生成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 来显示网页了
标签:delphi
发表评论