我将Delphi Chromium Embedded 3组件的dcef3安装到Delphi XE4中。我从http://code.google.com/p/dcef3/获得了组件。 guiclient演示完美运行,没有任何问题。
然后我尝试将guiclient表单添加到我自己的演示应用程序中作为辅助表单...而不是主表单。我添加了一个在运行时创建guiclient表单的按钮,并尝试以模态方式显示它,但在生成guiclient表单时会产生异常。
查看guiclient dpr我发现:
program guiclient;
uses
sysutils,
ceflib,
Windows,
Forms,
main in 'main.pas' {MainForm},
ceffilescheme in '..\filescheme\ceffilescheme.pas';
{$R *.res}
procedure RegisterSchemes(const registrar: ICefSchemeRegistrar);
begin
registrar.AddCustomScheme('local', True, True, False);
end;
begin
CefOnRegisterCustomSchemes := RegisterSchemes;
CefSingleProcess := False;
if not CefLoadLibDefault then
Exit;
CefRegisterSchemeHandlerFactory('local', '', False, TFileScheme);
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
端。
显然,当guiclient演示运行时,它会调用registersschemes。 CefLoadDefault并在dpr中注册SchemeHandlerFactory。
我的问题是......在组件正常运行之前,是否需要注册方案并在辅助表单的OnFromCreate或我的辅助表单的另一个事件中调用初始化代码?我应该尝试初始化组件以便以辅助形式运行什么事件?是否需要将任何dll放在应用程序文件夹中?如果是哪一个?
我的演示中不会自动创建浏览器表单。我的主窗体上有一个按钮,试图显示浏览器窗体:
procedure TForm1.Browse1Click(Sender: TObject);
begin
FormBrowser := TFormBrowser.Create(self);
try
FormBrowser.ShowModal;
finally
FormBrowser.Free;
end;
end;
我尝试通过将代码放入Browser1Click事件并在创建包含组件的表单之前进行初始化来希望它可以工作,但这也会产生异常。 也许我需要在运行时创建组件?
procedure TForm1.Browse1Click(Sender: TObject);
begin
{ Initialize the browser }
CefOnRegisterCustomSchemes := RegisterSchemes;
CefSingleProcess := False;
if not CefLoadLibDefault then
Exit;
CefRegisterSchemeHandlerFactory('local', '', False, TFileScheme);
FormBrowser := TFormBrowser.Create(self);
try
FormBrowser.ShowModal;
finally
FormBrowser.Free;
end;
end;
显示我在哪里以及如何在次要表单中初始化组件的任何代码将不胜感激。如果需要,我可以在帖子中添加更多信息。
在运行时必须初始化组件并不常见......我之前没有看到过这种类型的方法来初始化组件。