如何在不显示任何页面的情况下更改TEmbeddedWB组件的默认背景颜色(白色)?
答案 0 :(得分: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)]));
或更常见的方式(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部分中的结果)。
由于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样式的页面。
答案 1 :(得分:6)
通过将IHTMLDocument2.bgColor
属性设置为color table
中的某个值,可以轻松实现。以下代码将导航到 empty 页面并将其背景颜色更改为红色。请注意,使用此解决方案每次导航到 empty 页面后,您需要设置背景颜色。
uses
GraphUtil, MSHTML;
procedure TForm1.Button1Click(Sender: TObject);
begin
EmbeddedWB1.AssignEmptyDocument(True);
(EmbeddedWB1.Document as IHTMLDocument2).bgColor := ColorToWebColorStr(clRed);
end;