AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Processmessage

Ein Thema von knolli · begonnen am 31. Mär 2008 · letzter Beitrag vom 1. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von knolli
knolli

Registriert seit: 22. Sep 2006
Ort: Zittau
83 Beiträge
 
Delphi 7 Enterprise
 
#1

Processmessage

  Alt 31. Mär 2008, 13:19
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.:
  • Starten der Suche
  • weiterverfolgen der gefundenen Links
  • Sortierung der gefundenen Wörter
  • eintragen in eine Datenbank

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.
mfg Knolli auch bekannt als Meister Lampe
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#2

Re: Processmessage

  Alt 31. Mär 2008, 13:21
Globale / klassenlokale Boolean-Variable anlegen, in deiner/deinen Schleife(n) auf diese Prüfen und wenn sie TRUE ist, Schleife(n) verlassen.
  Mit Zitat antworten Zitat
Benutzerbild von knolli
knolli

Registriert seit: 22. Sep 2006
Ort: Zittau
83 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Processmessage

  Alt 31. Mär 2008, 13:39
etwa so?

Delphi-Quellcode:
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;
wenn ich es so mache, dann kommt eine Fehlermeldung:

Anweisung für FOR-Schleifenvariable 'i'
mfg Knolli auch bekannt als Meister Lampe
  Mit Zitat antworten Zitat
HHennig

Registriert seit: 16. Feb 2007
Ort: Pforzheim
51 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Processmessage

  Alt 31. Mär 2008, 13:46
hallo, anstatt
if abbruch = true the i := ...

nimm
if abbruch = true then Break;

Damit verlässt du sofort die for-Schleife
Hartmut
*
  Mit Zitat antworten Zitat
Benutzerbild von knolli
knolli

Registriert seit: 22. Sep 2006
Ort: Zittau
83 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Processmessage

  Alt 31. Mär 2008, 13:51
danke so funktionierts!
mfg Knolli auch bekannt als Meister Lampe
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Processmessage

  Alt 31. Mär 2008, 13:52
Aber bitte nicht auf true abfragen. Statt if abbruch = true then Break; besser so schreiben:if abbruch then Break;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Processmessage

  Alt 31. Mär 2008, 13:58
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
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
HHennig

Registriert seit: 16. Feb 2007
Ort: Pforzheim
51 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Processmessage

  Alt 31. Mär 2008, 14:04
...schließe mich meinen Vorrednern an...
Hartmut
*
  Mit Zitat antworten Zitat
Benutzerbild von knolli
knolli

Registriert seit: 22. Sep 2006
Ort: Zittau
83 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Processmessage

  Alt 31. Mär 2008, 14:09
ok! das funktioniert sehr gut! danke für die schnelle hilfe!
mfg Knolli auch bekannt als Meister Lampe
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: Processmessage

  Alt 31. Mär 2008, 16:08
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;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz