Hallo,
ich habe neulich ein kurioses Verhalten eines meiner eigenen Tool's gehabt. Die unten aufgezeigt Procedure durchsucht alle Dateien, die in
ListboxDateien aufgeführt sind mittels der Procedure SucheTextInDateien. Da dies unter Umständen länger dauert, habe ich nach jeder
hundersten Datei eine Abfrage auf ESC eingebaut, über GetKeyState. Das funktionierte, wie unten dargestellt, bis ich die Optimierung von
Delphi einschaltete. Dann griff praktisch bei erster möglicher Gelegenheit GetKeyState(VK_ESCAPE) = 1 (ohne, daß ich ESC gedrückt habe) und
die Suche brach wie gewünscht (?!) ab. Nam ich die Abfrage auf jede hunderste Datei raus, und prüfte bei jeder Datei ESC, so gings mit und
ohne Optimierung..
Ist mein Ansatz von GetKeyState falsch? Wie kann ich alternativ ESC abfragen?
Eingesetztes System: Win2000Prof deutsch, D5 C/S SP1 deutsch.
Hier die Proceduren:
<pre>procedure DurchsucheAlleDateien;
VAR i: Integer;
begin
ProgressBar1.Max := ListBoxDateien.Items.Count;
FOR i := 0 TO ListBoxDateien.Items.Count - 1 DO
BEGIN
SucheTextInDatei(ListBoxDateien.Items[i], EditTextInhalt.Text);
IF (i MOD 100) = 0
THEN
BEGIN
Application.ProcessMessages;
//---fehlerhafte Procedure ???---------------------------------------
IF GetKeyState(VK_ESCAPE) = 1
//-------------------------------------------------------------------
THEN
BEGIN
ModalResult := mrNone;
ProgressBar1.Position := 0;
Exit;
END; // IF Key = ESC
END; // if i = 100
ProgressBar1.StepIt;
END;
ProgressBar1.Position := 0;
end;</pre>
<br><br><pre>
procedure SucheTextInDatei(Datei, Text: String);
VAR T,i:integer;
SelPos: Integer;
begin
TRY
Arbeit.Clear; // Arbeit ist ein Memo
Arbeit.Lines.LoadFromFile(Datei);
SelPos := Pos(Uppercase(Text), Uppercase(Arbeit.Lines.Text));
IF SelPos > 0 THEN ListBoxErgebnis.Items.Add(Datei);
EXCEPT
END;
end;</pre>
Vielen Dank, Mario
ich habe neulich ein kurioses Verhalten eines meiner eigenen Tool's gehabt. Die unten aufgezeigt Procedure durchsucht alle Dateien, die in
ListboxDateien aufgeführt sind mittels der Procedure SucheTextInDateien. Da dies unter Umständen länger dauert, habe ich nach jeder
hundersten Datei eine Abfrage auf ESC eingebaut, über GetKeyState. Das funktionierte, wie unten dargestellt, bis ich die Optimierung von
Delphi einschaltete. Dann griff praktisch bei erster möglicher Gelegenheit GetKeyState(VK_ESCAPE) = 1 (ohne, daß ich ESC gedrückt habe) und
die Suche brach wie gewünscht (?!) ab. Nam ich die Abfrage auf jede hunderste Datei raus, und prüfte bei jeder Datei ESC, so gings mit und
ohne Optimierung..
Ist mein Ansatz von GetKeyState falsch? Wie kann ich alternativ ESC abfragen?
Eingesetztes System: Win2000Prof deutsch, D5 C/S SP1 deutsch.
Hier die Proceduren:
<pre>procedure DurchsucheAlleDateien;
VAR i: Integer;
begin
ProgressBar1.Max := ListBoxDateien.Items.Count;
FOR i := 0 TO ListBoxDateien.Items.Count - 1 DO
BEGIN
SucheTextInDatei(ListBoxDateien.Items[i], EditTextInhalt.Text);
IF (i MOD 100) = 0
THEN
BEGIN
Application.ProcessMessages;
//---fehlerhafte Procedure ???---------------------------------------
IF GetKeyState(VK_ESCAPE) = 1
//-------------------------------------------------------------------
THEN
BEGIN
ModalResult := mrNone;
ProgressBar1.Position := 0;
Exit;
END; // IF Key = ESC
END; // if i = 100
ProgressBar1.StepIt;
END;
ProgressBar1.Position := 0;
end;</pre>
<br><br><pre>
procedure SucheTextInDatei(Datei, Text: String);
VAR T,i:integer;
SelPos: Integer;
begin
TRY
Arbeit.Clear; // Arbeit ist ein Memo
Arbeit.Lines.LoadFromFile(Datei);
SelPos := Pos(Uppercase(Text), Uppercase(Arbeit.Lines.Text));
IF SelPos > 0 THEN ListBoxErgebnis.Items.Add(Datei);
EXCEPT
END;
end;</pre>
Vielen Dank, Mario
Comment