Есть ли способ рисования определенного содержимого элемента 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?