Как отобразить HTML-элемент без использования веб-браузера? - PullRequest
15 голосов
/ 29 ноября 2011

Есть ли способ рисования определенного содержимого элемента HTML на холсте без использования какого-либо элемента управления веб-браузера?

С помощью этого кода я отрисовываю элемент на холсте формы (просто в качестве примера).
Это работает, хотя, но этот код не является хорошей практикой - см. Ниже, почему ...

uses
  SHDocVw, MSHTML;

procedure TForm1.Button1Click(Sender: TObject);
var
  WebBrowser: TWebBrowser;
  HTMLElement: IHTMLElement;
  HTMLRenderer: IHTMLElementRender;
begin
  WebBrowser := TWebBrowser.Create(nil);
  try
    WebBrowser.ParentWindow := Application.Handle;
    WebBrowser.Navigate('https://stackoverflow.com/questions/2975586/good-delphi-blogs');

    while WebBrowser.ReadyState < READYSTATE_COMPLETE do
      Application.ProcessMessages;

    HTMLElement := (WebBrowser.Document as IHTMLDocument3).getElementById('question');
    HTMLRenderer := (HTMLElement as IHTMLElementRender);
    HTMLRenderer.DrawToDC(Canvas.Handle);

  finally
    HTMLElement := nil;
    HTMLRenderer := nil;
    WebBrowser.Free;
  end;
end;

Это плохо, потому что

  • он использует скрытый TWebBrowser , но я бы хотел загрузить HTML-документ напрямую через интерфейс IHTMLDocument и визуализировать определенный элемент на своем собственном холсте
  • если я создаю и загружаю IHTMLDocument вручную, например. таким образом затем метод рендеринга IHTMLElementRender.DrawToDC ничего не рисует (возможно, из-за отсутствия холста для рендеринга документа)
  • еще хуже то, что IHTMLElementRender.DrawToDC в настоящее время устарело, поэтому я ищу альтернативный способ рендеринга элементов на моем собственном холсте

Есть ли чистый способ решить эту проблему с помощью MSHTML?

Ответы [ 3 ]

3 голосов
/ 17 декабря 2011

DrawToDC и IViewObject оба требуют элемента управления TWebBrowser для фактической визуализации документа в целевой DC.

1 голос
/ 29 ноября 2011

См. THTMLabel от tms-software

1 голос
/ 29 ноября 2011

Может быть, вы можете попробовать THtmlViewer? http://code.google.com/p/thtmlviewer/

...