Zitat von
Benjin:
Leider wird bei meiner Implementierung stets eine EAccessViolation aufgerufen, obwohl die Funktion ohne entsprechende Schleife, also bei der Suche in nur einem Dokument einwandfrei funktioniert.
Beides ist kaum zu glauben.
Mit diesem Busy-Test hat der nachfolgende Code keine Chance je ausgeführt zu werden. Ich schlage vor du wartest, bis das Dokument geladen worden ist.
Delphi-Quellcode:
// if not FrmMultisearch.WBMultiSearch.Busy then
while FrmMultisearch.WBMultiSearch.Busy {and not UserCancel} do //
ApplicationProcessMessages;
Und mit dieser Parameterversorgung arbeitet findText() auf einem 1 Zeichen großen Bereich. Sehr effizient, aber wenig informativ. Lass den Wert besser auf 0. Und wenn du nicht ab und zu den Suchbereich verschiebst, dann machst du den ganzen Geschwindigkeitsvorteil von oben wieder zunichte, weil immer wieder an der selben Stelle gesucht wird.
Delphi-Quellcode:
// while tr.findText(Term, 1, 0) do begin // Siehe Anmerkung 2
while tr.findText(Term, 0, 0) do begin // Suchen bis zum Ende des Textes
inc(hitcounts[i]);
tr.collapse(false); // Suchbereich neu festlegen
end;
Grüße vom marabu