![]() |
Processmessage
Hi!
Ich habe mal wieder ein Problem. Ich sitze zur Zeit an einem Program, das mir Wörter und Links von Internetseiten sucht und in eine Datenbank einträgt. Es funktionieren schon einige Dinge z.B.:
Nun würde ich aber gern noch eine Methode implementieren, mit der ich die Suche abbrechen kann. Ein Kumpel von mir hat schon gesagt, dass man das mit Application.ProcessMessage machen kann. Ich habe aber leider keine Ahnung wie das funktioniert. Also nochmal konkret: Ich verwende für die Suche nur wenige Schleifen(FOR) und wöllte gern wissen, wie ich die Suche unterbrechen kann. Ich verwende zur Navigation auf die Seiten eine WebBrowser-Komponente. |
Re: Processmessage
Globale / klassenlokale Boolean-Variable anlegen, in deiner/deinen Schleife(n) auf diese Prüfen und wenn sie TRUE ist, Schleife(n) verlassen.
|
Re: Processmessage
etwa so?
Delphi-Quellcode:
wenn ich es so mache, dann kommt eine Fehlermeldung:
procedure TWortsuche.SonderZeichen(Sender: TObject);
var iLauf, i:integer; begin For iLauf:=0 to Listbox_Seitenwoerter.Items.Count-1 do begin FOR i:=32 to 255 do Begin Application.ProcessMessages; IF bAbbruch=true then i:=255; CASE i OF 32..64 : Listbox_Seitenwoerter.Items[iLauf]:=StringReplace(Listbox_Seitenwoerter.Items[iLauf],chr(i),'',[rfReplaceAll]); 91..96 : Listbox_Seitenwoerter.Items[iLauf]:=StringReplace(Listbox_Seitenwoerter.Items[iLauf],chr(i),'',[rfReplaceAll]); 123..195 : Listbox_Seitenwoerter.Items[iLauf]:=StringReplace(Listbox_Seitenwoerter.Items[iLauf],chr(i),'',[rfReplaceAll]); 197..213 : Listbox_Seitenwoerter.Items[iLauf]:=StringReplace(Listbox_Seitenwoerter.Items[iLauf],chr(i),'',[rfReplaceAll]); 215..219 : Listbox_Seitenwoerter.Items[iLauf]:=StringReplace(Listbox_Seitenwoerter.Items[iLauf],chr(i),'',[rfReplaceAll]); 221..227 : Listbox_Seitenwoerter.Items[iLauf]:=StringReplace(Listbox_Seitenwoerter.Items[iLauf],chr(i),'',[rfReplaceAll]); 229..245 : Listbox_Seitenwoerter.Items[iLauf]:=StringReplace(Listbox_Seitenwoerter.Items[iLauf],chr(i),'',[rfReplaceAll]); 247..251 : Listbox_Seitenwoerter.Items[iLauf]:=StringReplace(Listbox_Seitenwoerter.Items[iLauf],chr(i),'',[rfReplaceAll]); 253..255 : Listbox_Seitenwoerter.Items[iLauf]:=StringReplace(Listbox_Seitenwoerter.Items[iLauf],chr(i),'',[rfReplaceAll]); End;//case End;//for i end; //For iLauf end; procedure TWortsuche.BitBtn2Click(Sender: TObject); begin bAbbruch:=true; end; Anweisung für FOR-Schleifenvariable 'i' |
Re: Processmessage
hallo, anstatt
if abbruch = true the i := ... nimm if abbruch = true then Break; Damit verlässt du sofort die for-Schleife |
Re: Processmessage
danke so funktionierts!
|
Re: Processmessage
Aber bitte nicht auf true abfragen. Statt
Delphi-Quellcode:
besser so schreiben:
if abbruch = true then Break;
Delphi-Quellcode:
if abbruch then Break;
|
Re: Processmessage
Außerdem solltest du break in der äußeren Schleife aufrufen, da imho die innere sonst nur kurz angehalten und dann sofort wieder von der äußeren aufgerufen wird.
Mfg |
Re: Processmessage
...schließe mich meinen Vorrednern an...
:) |
Re: Processmessage
ok! das funktioniert sehr gut! danke für die schnelle hilfe!
|
Re: Processmessage
Der Sourcecode oben ist ja sehr langsam.
so geht es deutlich schneller und eleganter:
Delphi-Quellcode:
function StrReplaceChars(const S: string; const Chars: TSysCharSet; Replace: Char): string; // kopiert aus der JCL
var I: Integer; begin Result := S; for I := 1 to Length(S) do if Result[I] in Chars then Result[I] := Replace; end; procedure TWortsuche.SonderZeichen(Sender: TObject); var iLauf:integer; begin For iLauf:=0 to Listbox_Seitenwoerter.Items.Count-1 do begin Application.ProcessMessages; IF bAbbruch then break; Listbox_Seitenwoerter.Items[iLauf] := StrReplaceChars(Listbox_Seitenwoerter.Items[iLauf], [#32..#64, #91..#96 {bitte selbst ergänzen}], ' '); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz