Есть ли функция для получения прямоугольника клиента внутри Twebbrowser? - PullRequest
0 голосов
/ 28 июля 2011

Я не уверен, что смогу объяснить это ясно.

У меня есть простой HTML-код, и я загружаю его в Twebbrowser.Затем я хочу получить Rect моего вывода HTML, чтобы я мог правильно изменить размер моего Twebbrowser.

Это похоже на функцию автоматического размера, но это только высота, которая автоматически изменяет размер.это возможно?

спасибо заранее ...

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Этот код должен помочь вам начать:

uses MSHTML, Math;

var
  HtmlElement, BodyElement:IHTMLElement2;
  PageWidth, PageHeight: Integer;
begin
  with WebBrowser1.ControlInterface do
  begin
    HtmlElement:=(Document as IHTMLDocument3).documentElement as IHTMLElement2;
    BodyElement:=(Document as IHTMLDocument2).body as IHTMLElement2;
  end;
  PageWidth:= Max(BodyElement.scrollWidth, HtmlElement.scrollWidth);
  PageHeight:= Max(BodyElement.scrollHeight, HtmlElement.scrollHeight);
end;

Я читаю измерения как из элемента HTML, так и из элемента BODY и беру максимум, потому что часто они имеют разные размеры. И все чаще один из них возвращает размер 0x0. Это поведение также меняется от версии браузера к версии браузера. Это обходной путь, вы должны проверить, является ли это правильным способом решения этой проблемы в вашем случае использования.

Примечание: отправленное @Darkerstar изображение было старой иллюстрацией MSDN для получения размеров элементов. Обновленная версия (для IE9) выглядит следующим образом: Измерение размера и местоположения элемента с помощью CSSOM в Internet Explorer 9 .

2 голосов
/ 28 июля 2011

Вы можете определить высоту страницы внутри события завершения документа TWebBrowser, используя document.body.scrollWidth и scrollHeight

IE6 clientHeight etc

...