#delphi #scroll #twebbrowser
#delphi #прокрутка #twebbrowser
Вопрос:
Я пытаюсь найти текст в веб-браузере с Delphi 2010 и прокрутить его. Код находит текст и прокручивает его, но текст остается внизу webview (в последней строке). Я хотел бы показать текст в верхней (первой строке) webview.
Я думаю, что код для этого будет «scrollIntoView (true)», но это никак не влияет на то, что я пытаюсь сделать.
Что мне делать? Спасибо. Вот мой код
procedure TForm1.SpeedButton10Click(Sender: TObject);
var
doc: IHTMLDocument2;
selection: IHTMLSelectionObject;
textRange: IHtmlTxtRange;
scrollpos: Integer;
Art : string;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
Selection := Doc.Selection;
TextRange := selection.createRange as IHTMLTxtRange;
Art := edit2.Text;
TextRange.collapse(false);
if TextRange.findText(Art) then
begin
TextRange.select;
TextRange.scrollIntoView(true);
end;
end;
Ответ №1:
Я тоже не мог приступить TextRange.scrollIntoView(True)
к работе. Однако приведенный ниже код, похоже, работает для документа формата
Line1
Line2
Line3
Line4
Line5
…
Строка 100
при условии, что документ не прокручивается до точки, которая Line100
находится над нижней строкой в окне браузера. Он отлично работает, например, для поиска Line20
и размещения его в верхней части окна браузера.
Как вы можете видеть, он работает, получая IHTMLTextRangeMetrics
интерфейс из TextRange
и используя его offsetTop
свойство для прокрутки doc2
родительского окна по вертикали.
Код:
// doc2 is a field of Form1 of type `IHTMLDocument2`
procedure TForm1.FindText(Text : String);
var
selection: IHTMLSelectionObject;
textRange: IHtmlTxtRange;
scrollpos: Integer;
Metrics : IHTMLTextRangeMetrics;
begin
Selection := Doc2.Selection;
TextRange := selection.createRange as IHTMLTxtRange;
TextRange.collapse(false);
if TextRange.findText(Text, 1, 0) then begin
TextRange.select;
TextRange.scrollIntoView(True);
TextRange.QueryInterface(IHTMLTextRangeMetrics, Metrics);
if Metrics <> Nil then
doc2.parentWindow.scrollBy(0, Metrics.offsetTop);
end;
end;
Комментарии:
1. Большое вам спасибо! Я не знаю почему, это работает только в том случае, если код выполняется дважды. Но это работает! Большое вам спасибо!