TEmbeddedWB和背景颜色

Sal*_*dor 3 delphi webbrowser-control delphi-xe

如何在不显示任何页面的情况下更改TEmbeddedWB组件的defult backgound颜色(clWhite)?

在此输入图像描述

kob*_*bik 6

这可以通过在创建表单时加载默认页面来完成(快速方式):

function ColorToHTML(const Color: TColor): string;
var
  ColorRGB: Integer;
begin
  ColorRGB := ColorToRGB(Color);
  Result := Format('#%0.2X%0.2X%0.2X',
    [GetRValue(ColorRGB), GetGValue(ColorRGB), GetBValue(ColorRGB)]);
end;

WebBrowser1.Navigate(Format('about:<body bgcolor="%s" style="overflow:hidden"/>', [ColorToHTML(clRed)]));
Run Code Online (Sandbox Code Playgroud)

或者更常见的方式(TWebBrowser/ TEmbeddedWB):

uses ActiveX, MSHTML;
procedure LoadDocFromString(ABrowser: TWebBrowser; const HTMLString: WideString);
var
  v: OleVariant;
  HTMLDocument: IHTMLDocument2;
begin
  if not Assigned(ABrowser.Document) then
  begin
    ABrowser.Navigate('about:blank');
    while ABrowser.ReadyState <> READYSTATE_COMPLETE do
      Application.ProcessMessages;
  end;
  HTMLDocument := ABrowser.Document as IHTMLDocument2;
  v := VarArrayCreate([0, 0], varVariant);
  v[0] := HTMLString;
  HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
  HTMLDocument.Close;
end;

LoadDocFromString(WebBrowser1, Format('<body style="background-color:%s; scrollbar-base-color:%s;"/>',
  [ColorToHTML(clGray), ColorToHTML(clBlack)]));
Run Code Online (Sandbox Code Playgroud)

TEmbeddedWB 具体:

EmbeddedWB1.LoadFromString(Format('<body style="background-color:%s; scrollbar-base-color:%s;"/>',
    [ColorToHTML(clGray), ColorToHTML(clBlack)]));
Run Code Online (Sandbox Code Playgroud)

编辑:看一下本教程:如何自定义TWebBrowser用户界面.
这解释了如何使用自定义WB,IOleClientSite以及IDocHostUIHandler浏览器对象本身提供默认CSS .

我们可以动态创建一个样式表,知道表单的颜色和字体,并告诉浏览器使用它(查看结果在第5部分中的6).

由于TEmbeddedWB实现,IDocHostUIHandler您可以使用它的HostCSS属性(您仍然需要加载空白文档):

procedure TForm1.Button1Click(Sender: TObject);
const
  // Template for default CSS style
  cCSSTplt = 'body {background-color: %0:s}';
var
  FmtCSS: string;  // Stores default CSS
begin
  FmtCSS := Format(cCSSTplt, [ColorToHTML(clYellow)]);
  EmbeddedWB1.HostCSS := FmtCSS;
  EmbeddedWB1.AssignEmptyDocument;
end;
Run Code Online (Sandbox Code Playgroud)

请注意,使用HostCSS带有CSS样式模板的属性也会将此模板用于没有CSS样式的页面.


TLa*_*ama 6

通过将IHTMLDocument2.bgColor属性设置为特定值,可以轻松实现color table.以下代码将导航到空白页面并将其背景颜色更改为红色.请注意,使用此解决方案在每次导航到该空白页面后需要设置的背景颜色.

uses
  GraphUtil, MSHTML;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EmbeddedWB1.AssignEmptyDocument(True);
  (EmbeddedWB1.Document as IHTMLDocument2).bgColor := ColorToWebColorStr(clRed);
end;
Run Code Online (Sandbox Code Playgroud)