hallo zusammen,
ich versuche zur zeit ein programm zum laufen zu kriegen, welches eine seite laedt, sie nach einem string durchsucht (falls gefunden, eintrag in einer listbox) und dann neulaedt.
arbeite ich mit OnDocumentComplete, laeuft der aktualisierungsvorgang sehr schnell durch, jedoch "verschluckt" er ab und zu treffer und er speichert nichts in der listbox.
arbeite ich mit einem timer und frage den seitenstand ab mit ReadyState(=4), verschluckt er die treffer ebenso haeufig.
ich moechte, dass der aktualisierungsvorgang so schnell wie moeglich durchgefuehrt wird, ohne dass irgendwelche treffer verschluckt werden, allerdings hab ich das bisher nur realisieren koennen mit entsprechend hohem timer-interval.
aus welchem grund fuehrt er den code unter OnDocumentComplete manchmal nicht aus? es scheint, als wuerde die seite schneller neuladen als er den code ausfuehren kann, wobei der code dann uebersprungen und nicht mehr ausgefuehrt wird und ein neues OnDocumentComplete von vorn beginnt. warum tut er das?
Delphi-Quellcode:
function suchetext(WB: TWebBrowser; Text:
string): boolean ;
var
tr: IHTMLTxtRange;
begin
if Assigned(WB.Document)
then
begin
tr := ((wb.Document
AS IHTMLDocument2).body
AS IHTMLBodyElement).createTextRange;
if tr.findText(Text, 1, 0)
then result := true
else result := false;
end;
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch;
var URL: OleVariant);
begin
if suchetext(webbrowser1, '
text')
then listbox1.items.add('
treffer!');
// hier stehen noch mehr abfragen, die die prozedur wohl etwas verlangsamen
webbrowser1.navigate('
http://localhost/');
end;
die suchetext - funktion hab ich irgendwo beim googlen mal gefunden, in anderem zusammenhang (woerter suchen und farblich markieren).. ich hoffe, ich benutz die hier richtig?