2016-10-14 3 views
0

Я пытаюсь найти текст в веб-браузере с Delphi 2010 и прокручивать его. Код находит текст и прокручивает его, но текст остается в нижней части webview (в последней строке). Я хотел бы показать текст в верхней (первой строке) веб-просмотра.Delphi Webbrowser scrollIntoView (true) не работает

Я думаю, что для этого кода будет «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; 

ответ

2

Я не мог заставить TextRange.scrollIntoView(True) работать, либо. Тем не менее, ниже код, кажется, работает для документа формата

Line1
line2
Line3
Line4
line5
...
Line 100

при условии, документ не прокручивается до точки, где Line100 находится над нижней строкой в ​​окне браузера. Он отлично работает, f.i., чтобы найти Line20 и расположите его в верхней части окна браузера.

Как вы можете видеть, это работает, получая интерфейс IHTMLTextRangeMetrics от TextRange и используя его свойство offsetTop для прокрутки родительского окна doc2 «s по вертикали.

Код:

// 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; 
+0

Большое спасибо! Я не знаю, почему это работает, только если код выполняется дважды. Но это работает! Спасибо огромное! –