TEmbeddedWB и цвет фона - PullRequest
       14

TEmbeddedWB и цвет фона

3 голосов
/ 18 марта 2012

Как я могу изменить цвет фона по умолчанию (clWhite) компонента TEmbeddedWB , пока не отображается ни одна страница?

enter image description here

Ответы [ 2 ]

6 голосов
/ 19 марта 2012

Легко, установив для свойства IHTMLDocument2.bgColor определенное значение из color table.Следующий код перейдет на страницу empty и изменит цвет фона на красный.Обратите внимание, что цвет фона, который вам нужно будет установить после каждой навигации на эту пустую страницу с этим решением.

uses
  GraphUtil, MSHTML;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EmbeddedWB1.AssignEmptyDocument(True);
  (EmbeddedWB1.Document as IHTMLDocument2).bgColor := ColorToWebColorStr(clRed);
end;
6 голосов
/ 18 марта 2012

Это можно сделать, загрузив страницу по умолчанию при создании формы (Быстрый способ):

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)]));

Редактировать: Взгляните на этот урок: Как настроить пользовательский интерфейс 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;

Обратите внимание, что использование свойства HostCSS с шаблоном стиля CSS будет использовать этот шаблон также для страниц без CSS-стиля.

...