如何在不显示任何页面时更改 TEmbeddedWB组件的defult backgound颜色(clWhite)? 这可以通过在创建表单时加载默认页面来完成(快速方式): function ColorToHTML(const Color: TColor): string;var ColorRGB: Int
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)]));
或者更常见的方式(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)]));
TEmbeddedWB具体:
EmbeddedWB1.LoadFromString(Format('<body style="background-color:%s; scrollbar-base-color:%s;"/>', [ColorToHTML(clGray), ColorToHTML(clBlack)]));
编辑:看一下本教程:How to customise the TWebBrowser user interface.
这解释了如何使用IOleClientSite和IDocHostUIHandler自定义WB,它还为浏览器对象本身提供默认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;
请注意,使用带有CSS样式模板的HostCSS属性也将使用此模板用于没有CSS样式的页面.