【问题标题】:Error while creating the TChromium in Inno Setup在 Inno Setup 中创建 TChromium 时出错
【发布时间】:2013-09-05 04:24:58
【问题描述】:

我正在尝试创建一个TChromium的DLL用于Inno Setup,相当于用TWebBrowser制作的TLama,创建inno-web-browser,但是我做不到,我遵循基本相同的逻辑程序,但是在创建过程中,inno setup里面的创建窗口虽然很奇怪,却留下了附件打印,显示图像。

编辑:我使用的是 Delphi XE2 和 DCEF3。

procedure CreateChromium(ParentWnd: HWND; Left, Top, Width, Height: Integer);
begin
  Chromium := TChromium.Create(nil);
  Chromium.ParentWindow := ParentWnd;
  Chromium.Left := Left;
  Chromium.Top := Top;
  Chromium.Width := Width;
  Chromium.Height := Height;
  Chromium.Visible := true;
  Chromium.HandleNeeded;
end;

【问题讨论】:

  • 您使用哪种编程语言的版本?您正在使用哪个 CEF 版本的包装器? DCEF1、DCEF3 还是别的什么?您能否更新您的问题并包含这些信息?无论如何,请不要将 Inno Media Player 作为一个好的 InnoSetup 插件参考。这只是我在几乎一小时内编写的概念证明,后来做了一些小改动。我会以不同的方式设计它。
  • 我正在使用 Delphi XE2 和 DCEF3。是的,我知道 inno-web-browser 更简单,但仍然喜欢这个想法并想用 Chromium 做一个版本,但我做不到,我做错了什么或遗漏了什么?
  • 默认的 Chromium 控件背景颜色是什么让您在这里遇到麻烦?我之所以问,是因为除此之外我看不出任何错误,而且不知道项目的 DLL 部分以外的内容,这仍然只是一个猜测(我不知道您是否更改了您的内部页面的颜色) ISS 脚本,例如)。
  • 所以我在这里问了这个问题,首先我不知道这是默认颜色,发现它很奇怪,除了退出 Inno Setup 时崩溃之外,在 Destroy 事件中,我我尝试了各种命令,但没有运行。铬。销毁; Chromium.Free Chromium := nil;
  • 你好,我成功地使用命令CefShutDown正确关闭

标签: inno-setup tchromium


【解决方案1】:

Chromium 控件在您的屏幕截图上有其默认颜色,所以如果这是您的问题,让我们将其更改为不同的颜色。我写了in this post 这是针对 DCEF1 的,但在 DCEF3 中您需要执行类似的步骤。看看这个插件的简约代码,它添加到初始化函数新的Color 参数并显示如何设置 Chromium 控件背景颜色:

unit MainUnit;

interface

uses
  Winapi.Windows, System.SysUtils, Vcl.Graphics, Vcl.GraphUtil, Soap.EncdDecd,
  CefVCL;

procedure CreateChromium(ParentWnd: HWND; Color: TColor; Left, Top, Width,
  Height: Integer); stdcall;

implementation

var
  Chromium: TChromium;

procedure CreateChromium(ParentWnd: HWND; Color: TColor; Left, Top, Width,
  Height: Integer);
const
  CSSHeader = 'data:text/css;charset=utf-8;base64,';
begin
  Chromium := TChromium.Create(nil);
  Chromium.ParentWindow := ParentWnd;

  // here is the tricky part; you must take the constant CSS header part and
  // concatenate it with Base64 encoded CSS style string as shown here
  Chromium.UserStyleSheetLocation := CSSHeader +
    EncodeString(Format('body {background-color:%s;}',
    [ColorToWebColorStr(Color)]));
  // and after you set the style, you need to recreate the browser
  Chromium.ReCreateBrowser('about:blank');

  Chromium.Left := Left;
  Chromium.Top := Top;
  Chromium.Width := Width;
  Chromium.Height := Height;
end;

end.

【讨论】:

  • 完美男人。谢谢 :D 我觉得很奇怪,不认为它是创建命令后的默认颜色。由于使用命令 ReCreateBrowser 来销毁 Chromium,我需要使用一些特殊的命令吗?
  • 对不起,我不知道你的意思?每当您更改任何设置时(例如,如果您从 Options 属性更改某些内容)都必须调用 ReCreateBrowser,因为它们仅在创建浏览器时是只读的,并且通过调用 ReCreateBrowser 您将强制浏览器recreate 也会重新读取修改后的设置。
猜你喜欢
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多