Такой вопрос. Мне нужно организовать поиск в Webbrowser (страница загружена) и выделить найденные слова др. цветом. Нашел на нашем форуме след код:
| Код | {....} private procedure SearchAndHighlightText(aText: string); {....} uses mshtml; { .... } procedure TForm1.SearchAndHighlightText(aText: string); var tr: IHTMLTxtRange; //TextRange Object begin if not WebBrowser1.Busy then begin tr := ((WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange; //Get a body with IHTMLDocument2 Interface and then a TextRang obj. with IHTMLBodyElement Intf.
while tr.findText(aText, 1, 0) do //while we have result begin tr.pasteHTML('<span style="background-color: Lime; font-weight: bolder;">' + tr.htmlText + '</span>'); //Set the highlight, now background color will be Lime tr.scrollIntoView(True); //When IE find a match, we ask to scroll the window... you dont need this... end; end; end;
// Example: procedure TForm1.Button1Click(Sender: TObject); begin SearchAndHighlightText('delphi'); end;
|
Но выскакиевает Access Violation... на строчке | Код | tr := ((WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange;
|
Переделал на
| Код | tr: IHTMLTxtRange; //TextRange Object HTML_Doc: IHTMLDocument; Body: IHTMLBodyElement; ....... //tr :=((WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange; HTML_Doc:=Webbrowser1.Document as IHTMLDocument;; Body:=HTML_Doc as IHTMLBodyElement; tr:=Body.createTextRange;
|
Теперь выскакивает Interface not supported... У кого есть идеи? |