Autor Beitrag
Jens Hartmann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120

XP
Delphi
BeitragVerfasst: Do 19.02.09 23:04 
Hallo,

ich versuche es jetzt nochmal hier. Habe in DP schon einen bzw. 2 Thread. Ich möchte aber gerne noch ein letztes mal versuchen. Ich habe jetzt den ganzen Abend schon probiert, ich komme aber einfach nicht weiter. vieleicht kann mir ja hier jemand helfen.
Ich habe in einem alten Thread von mir eine Frage gehabt zur Datenübernahme in ein StringGrid. Leider konnte mir dort bis lang keiner helfen. Vieleicht liegt es ja an dem Titel, da der am Anfang ja einen anderen Hintergrund hatte.

www.delphipraxis.net....html&highlight=

Leider konnte ich das Problem immer noch nicht lösen, und hoffe das mir doch noch jemand weiter helfen kann.

Ich habe noch einen weiteren Thread, mit der aktuellen Frage, wo es überhaupt drum geht.

www.delphipraxis.net....html&highlight=

Um den Fehler nochmal zu beschreiben, ich lese Daten von einer Schnittstelle ein, die ich über eine eigene Unit verarbeite, gebe diese dann zurück an mein FormUnit und möchte sie in einem StringGrid zur Anzeige bringen. Leider funktioniert das nur, wenn ich im DebugModus einen Breakpoint setze.

Nehme ich den Breakpoint dann weg nehme und drücke erneut F9, sehe ich in meinem Programm die Daten im StringGrid. Leider werden aber die ab dem Zeitpunkt kommenden Daten nicht mehr eingetragen.

Start ich das Programm normal, werden gar keine Daten übergeben.

Hat jemand vieleich hier noch eine Idee, wo das dran liegen könnte.

Mein Ziel für später ist es die Daten in ein VirtualTreeView zu übergeben, aber solange das mit dem StringGrid nicht läuft, ist da ja noch ein Grundlegender Fehler.

Die Daten werden ja auch sauber in den Variablen gespeichert.

Hier der Quellcode zur Übergabe

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure TForm1.TreeViewResult(ParserTreeView: TMyBaseParser); 
var 
  i: Integer; 
  Temp1 : String; 
  Temp2 : String; 
  Temp3 : String; 
  Temp4 : String; 
  Temp5 : String; 
  Temp6 : String; 
begin 
  for i := 0 to High(ParserTreeView.Entries) do 
  begin 
  Temp1 := ParserTreeView.Entries[0].LfdNr; 
  Temp2 := ParserTreeView.Entries[0].Datum; 
  Temp3 := ParserTreeView.Entries[0].Uhrzeit; 
  Temp4 := ParserTreeView.Entries[0].Ereignis; 
  Temp5 := ParserTreeView.Entries[0].Teilnehmer; 
  Temp6 := ParserTreeView.Entries[0].Bereich; 

      RCount := RCount+1; 
      SGMB256plus.RowCount := RCount+1; 
      SGMB256plus.Cells[0, RCount] := Temp1; 

      SGMB256plus.Cells[1, RCount] := Temp2; 

      SGMB256plus.Cells[2, RCount] := Temp3; 

      SGMB256plus.Cells[3, RCount] := Temp4; 

      SGMB256plus.Cells[4, RCount] := Temp5; 

      SGMB256plus.Cells[5, RCount + 1] := Temp6; 
  end; 
end;


und noch eine Variante die nicht funktioniert.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
procedure TForm1.TreeViewResult(ParserTreeView: TMyBaseParser); 
var 
  i: Integer; 
begin 
  for i := 0 to High(ParserTreeView.Entries) do 

  Application.ProcessMessages; 

  begin 
  if ParserTreeView.Entries[i].LfdNr > 0 then 
    begin 
      RCount := RCount+1; 
      SGMB256plus.RowCount := RCount+1; 
      Memo2.Lines.Add(IntToStr(ParserTreeView.Entries[i].LfdNr)); 
      SGMB256plus.Cells[0, RCount + 1] := IntToStr(ParserTreeView.Entries[i].LfdNr); 
    end; 
  if ParserTreeView.Entries[i].Datum <> '' then 
    begin 
      Memo3.Lines.Add(ParserTreeView.Entries[i].Datum); 
      SGMB256plus.Cells[1, RCount + 1] := ParserTreeView.Entries[i].Datum; 
    end; 
  if ParserTreeView.Entries[i].Uhrzeit <> '' then 
    begin 
      Memo4.Lines.Add(ParserTreeView.Entries[i].Uhrzeit); 
      SGMB256plus.Cells[2, RCount + 1] := ParserTreeView.Entries[i].Uhrzeit; 
    end; 
  if ParserTreeView.Entries[i].Ereignis <> '' then 
    begin 
      Memo5.Lines.Add(ParserTreeView.Entries[i].Ereignis); 
      SGMB256plus.Cells[3, RCount + 1] := ParserTreeView.Entries[i].Ereignis; 
    end; 
  if ParserTreeView.Entries[i].Teilnehmer <> '' then 
    begin 
      Memo6.Lines.Add(ParserTreeView.Entries[i].Teilnehmer); 
      SGMB256plus.Cells[4, RCount + 1] := ParserTreeView.Entries[i].Teilnehmer; 
    end; 
  if ParserTreeView.Entries[i].Bereich <> '' then 
    begin 
      Memo7.Lines.Add(ParserTreeView.Entries[i].Bereich); 
      SGMB256plus.Cells[5, RCount + 1] := ParserTreeView.Entries[i].Bereich; 
    end; 
  end; 
end;


Ansonsten, hoffe ich das mir jemand hier helfen kann.

Vielen Dank schon mal

Gruß

Jens

Achso, in den Anhang hänge ich ma ein Bild vom Deubugmodus
Einloggen, um Attachments anzusehen!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 19.02.09 23:24 
Code-Schnipsel 1: Zeile 32: Wirklich RowCount +1 ???

Schnipsel 2: Das Application.ProcessMessages wird für alle Zeilen einmal ausgeführt, der eigentlich zur For-Schleife gehörige Block wird aber nur einmal ausgeführt ... Ist das beabsichtigt?

Ansonsten: In Schnipsel 1 for dem Ende der Schleife das Application.ProcessMessages eintragen

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Jens Hartmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120

XP
Delphi
BeitragVerfasst: Fr 20.02.09 07:15 
Ne, leider nicht.


Das mit RCount+1 war ein versehen. Habe den Code jetzt abgeändert, geht aber trotzdem nicht.

Das StringGrid wird sogar passend erweitert. nur keine Daten sind zu sehen.

Braucht Ihr vieleicht noch irgendwelche Informationen.

Gruß

Jens :roll:
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 20.02.09 12:06 
Jap, was ist die ParserTreeView für ne Komponente?

Was passiert, wenn Du die 6 Temp-Einträge mit in ne Listview addest? (Parallel zur StringGrid)

MfG,
BenBE

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 20.02.09 13:06 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Jap, was ist die ParserTreeView für ne Komponente?
Das ist eine irreführende Bezeichnung, das ist eine Klasse, die ich gebastelt hatte, den Quelltext findest du hier:
www.delphipraxis.net...st999287.html#999287
bzw. als Post im Forum die ein- und umgebaute Version dann hier:
www.delphipraxis.net...1002692.html#1002692
Jens Hartmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120

XP
Delphi
BeitragVerfasst: Fr 20.02.09 15:09 
Richtig, die Klasse hat Jaenicke für mich gebastelt.

Funktioniert wie gesagt auch echt super.
Nur das eintragen nicht. Es geht auch nicht, wenn ich die Daten in Memo´s schreibe oder so, es geht immer nur im Debugmodus.

In obigen Codeschnipsel 2 sind ja auch die Memoeiträge, und auch die funktionieren nur im Debugmodus.


Zuletzt bearbeitet von Jens Hartmann am Fr 20.02.09 17:15, insgesamt 1-mal bearbeitet
Jens Hartmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120

XP
Delphi
BeitragVerfasst: Fr 20.02.09 16:30 
Ich habe mal noch zum beweise einen Screenshot von meinem StringGrid nach Programmausführung im Debugmodus gemacht.
Einloggen, um Attachments anzusehen!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 20.02.09 16:35 
Kannst Du mal schauen, ob das nicht vielleicht auch ein Repaint-Problem sein könnte ??? Also mal explizit nach der Schleife ein Invalidate, bzw. Repaint \ Update aufrufen?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 20.02.09 16:35 
Also meine Vermutung wäre eigentlich, dass die Datenübergabe aus irgendeinem Grund nicht klappt, was dann durch das Debuggen und der entsprechenden Wartezeit ausgebügelt wird. Weil wenn nicht gerade falscher Speicher überschrieben wird, dann wäre das die plausibelste Erklärung.

// EDIT: Oder so, aber das wäre nur der Fall evtl., wenn es keinerlei Pause gäbe, so sieht das eigentlich auf dem Screenie nicht aus.

// EDIT2:
Oder kann es sein, dass die Daten irgendwie wieder gelöscht werden, weil neue ankommen? :idea:
Jens Hartmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120

XP
Delphi
BeitragVerfasst: Fr 20.02.09 16:51 
Das ist ja gerade mein Problem,

1. Sicher, es kommen immer neue Daten, aber im Debugmodus, werden die halt erst dann verarbeitet, wenn die Funktion (mit F7) komplett durchlaufen ist.

2. Ich würde Euch auch gerne das gesamte Program zur Verfügung stellen, nur nütz es Euch ja ohne Hardware nichts.

Mein Problem ist halt nur, wenn ich im Debugmodus sehe das es funktioniert, wie soll ich dann ohne Debugmodus festetllen, warum es nicht funktioniert.

Hilft Euch das komplette Programm weiter ?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 20.02.09 16:55 
user profile iconJens Hartmann hat folgendes geschrieben Zum zitierten Posting springen:
1. Sicher, es kommen immer neue Daten, aber im Debugmodus, werden die halt erst dann verarbeitet, wenn die Funktion (mit F7) komplett durchlaufen ist.
Das StringGrid kann ja aber auch nicht einfach immer größer werden, die Daten müssen irgendwann doch gelöscht werden, oder?
Jens Hartmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120

XP
Delphi
BeitragVerfasst: Fr 20.02.09 17:07 
Das löschen, habe ich noch nich impelmentiert.
Allerdings, nehme ich momentan nur wenig Daten entgegen. Das StringGrid oder später VirtualTreeView, wird später im Anwendungsfall Nachts um 0 Uhr als Datei gespeichert und gelehrt. Somit erreiche ich auch, das ich Tagesbezogene Ereignisspeicher habe.
Jens Hartmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120

XP
Delphi
BeitragVerfasst: Fr 20.02.09 17:22 
Habe noch ne neue Erkenntnis.

Setze ich einen Breakpoint an die Stelle, wo Temp1 in das StringGrid übergeben wird, und bestätige immer mit F9 durch, wird immer nur Müll übergeben.

Bestätige ich dann nach ein paarmal mit F7 in einzel Funktionen durch, wird wieder sauber eingetragen.

Im Anhang, kann man genau sehe, ab wann ich mit F7 bedient habe. Ereignis 6732
Einloggen, um Attachments anzusehen!
Jens Hartmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120

XP
Delphi
BeitragVerfasst: Fr 20.02.09 17:40 
Ich glaube ich könnte mir vorstellen, wo mein Problem liegt.
Die Übergabe zum Parsen, regel ich in der Datenübernahme von der Com-Schnittstelle,

Dort gibt es einmal eine Funktion, die die Daten Zeilenweiße in die Var. Zeile schreibt, die dann über eine Case Anweisung an die entsprechende Datenverarbeitung für mein bislang genutztes Memo gegeben wird.

In der selben Funktion, liegt aber auch die Verarbeitung, die meinen Datensatz (aber nicht Zeilenweiße, sondern als gesamten Satz) an Jeanick´s Klasse Parsen übergibt.

Jetzt wird ja die Zeile mehrfach ausgeführt und die Var. Übergabe nur alle 4-6 Zeilen als Fertig angesehen, kann es vieleicht sein, das dadurch mein StringGrid, jedoch immer gezeichnet wird und ich somit nichts im StringGrid oder so sehe?

Hier mal die komplette lese Funktion:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
Procedure TForm1.Bufferverarbeitung;
Var
     I                  :Integer;
     Laenge             :Integer;
     Übergabe           :String;
     ParserTreeView     :TMyBaseParser;
     EndeDatensatz      :Integer;
begin
Laenge:=Length(Buffer);
I:=1;
while I < Laenge+1 do
                begin
                Zeile:=Zeile+Buffer[I];
                Übergabe:=Übergabe+Buffer[I];
                IF Buffer[I] =#13 then
                  begin

                    case RGZentralentyp.ItemIndex of
                      0 : DatenverarbeitungMB24;
                      1 : DatenverarbeitungMB48;
                      2 : DatenverarbeitungMB100;
                      3 : DatenverarbeitungMB256;
                      4 : DatenverarbeitungUEZ2000;
                      5 : DatenverarbeitungBMC1024;
                    end;

                I:=I+2;
                if Buffer[I] = #13 then
                    begin
                      Übergabe := StringReplace(Übergabe, #154, 'Ü', [rfReplaceAll]);
                      Übergabe := trim(StringReplace(Übergabe, #$D,  '',  [rfReplaceAll]));
                      Übergabe:= StringReplace(Übergabe, #129, 'ü', [rfReplaceAll]);
                      Übergabe := trim(StringReplace(Übergabe, #132, 'ä', [rfReplaceAll]));
                      Übergabe := StringReplace(Übergabe, #142, 'Ä', [rfReplaceAll]);
                      Übergabe := StringReplace(Übergabe, #148, 'ö', [rfReplaceAll]);
                      Übergabe := StringReplace(Übergabe, #153, 'Ö', [rfReplaceAll]);
                      Übergabe := StringReplace(Übergabe, #154, 'Ü', [rfReplaceAll]);
                      Übergabe := StringReplace(Übergabe, #10#13, ' ', [rfReplaceAll]);


                          ParserTreeView := TMyParserMB256plus.Create;
                          ParserTreeView.Parse(Übergabe);
                          TreeViewResult(ParserTreeView);
                          ParserTreeView.Free;
                      Übergabe := '';
                    end;
                    I:=I-2;
                end;
                INC(I);
                end;
Buffer:='';
end;




[EDIT] Im Anhang die Daten wie sie im Memo aussehen.
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Jens Hartmann am Fr 20.02.09 19:31, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 20.02.09 17:44 
Solange dein Programm was ohne Pause tut, kann auch nix auf dem Formular aktualisiert werden. Dafür würde dann Application.ProcessMessages dienen, das an der Stelle die Abarbeitung der aufgelaufenen Botschaften (auch zum Zeichnen) erlaubt.

Das darfst du dann natürlich nicht so machen wie in deinem Anfangspost:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  for i := 0 to High(ParserTreeView.Entries) do 
    Application.ProcessMessages; 

  begin
  ...
Da wird in der Schleife nur das ausgeführt und das nach dem Begin außerhalb der Schleife...
Da sollte auch eine entsprechende Warnung kommen, dass nach dem begin i nicht initialisiert ist oder so.
Jens Hartmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120

XP
Delphi
BeitragVerfasst: Fr 20.02.09 18:16 
Ja, das ist richtig.
Das habe ich ja auch geändert.

Ich will ja auch gerne selber auf den Fehler komme, und ich denke ich gebe mir schon wirklich mühe.

Aber meine Kenntnise, helfen mir einfach nicht mehr weiter, wie ich jetzt weiter machen könnte..
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 20.02.09 18:28 
Schreib mal ein ShowMessage(Übergabe); vor die Zeile ParserTreeView.Parse(Übergabe);. Wenn dann alles richtig geht, dann schreib mal an der selben Stelle nur in eine Datei:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  LogFile: Textfile;
...
  AssignFile(LogFile, ExractFilePath(ParamStr(0)) + 'Log.txt');
  if FileExists(ExractFilePath(ParamStr(0)) + 'Log.txt') then
    Reset(LogFile)
  else
    Rewrite(LogFile);
  WriteLn(LogFile, Übergabe);
  CloseFile(LogFile);
Steht es dann da richtig drin?

Nebenbei sollten Variablennamen wenn schon nicht englisch ;-) dann doch zumindest ohne Umlaute geschrieben werden, sonst kann das mit einem Delphi auf einem englischen System Überraschungen geben. ;-)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 20.02.09 18:30 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Schreib mal ein ShowMessage(Übergabe); vor die Zeile ParserTreeView.Parse(Übergabe);. Wenn dann alles richtig geht, dann schreib mal an der selben Stelle nur in eine Datei:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  LogFile: Textfile;
...
  AssignFile(LogFile, ExractFilePath(ParamStr(0)) + 'Log.txt');
  if FileExists(ExractFilePath(ParamStr(0)) + 'Log.txt') then
    Reset(LogFile)
  else
    Rewrite(LogFile);
  WriteLn(LogFile, Übergabe);
  CloseFile(LogFile);
Nebenbei sollten Variablennamen wenn schon nicht englisch ;-) dann doch zumindest ohne Umlaute geschrieben werden, sonst kann das mit einem Delphi auf einem englischen System Überraschungen geben. ;-)

Sprachs und schrieb in binär ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 20.02.09 18:36 
So heißt die Variable, deshalb habe ich das ja überhaupt geschrieben. ;-)
Jens Hartmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120

XP
Delphi
BeitragVerfasst: Fr 20.02.09 19:18 
So, meine Variable heißt jetzt Data, wie in dem Unit Parsen.

Also, ich habe das jetzt alles ausprobiert, im ShowMessage, werden die Daten angezeigt. In die Textdatei werden sie auch geschrieben.

Allerdings, teilweise ziemlich unsauber,


Betätige ich die ENTER Taste nach ShowMessage ganz schnell, kann es vorkommen, das der Datensatz unsauber aussieht, also es fehler Teil.

Betätige ich die ENTER Taste so im 2 sek takt, sind die Datensätze sauber. Kann es sein das meine Hardware nicht schnell genug liefert?

Setze ich folgende Funktion (Delay(2000) an die Stelle wo ShowMessage war Funktioniert es. Relativ gesehen, die Daten sind teilweise verschoben. siehe Anhang.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
Procedure TForm1.Bufferverarbeitung;
Var
     I                  :Integer;
     Laenge             :Integer;
     Data               :String;
     ParserTreeView     :TMyBaseParser;
 LogFile: Textfile;

begin
Laenge:=Length(Buffer);
I:=1;
while I < Laenge+1 do
                begin
                Zeile:=Zeile+Buffer[I];
                Data:=Data+Buffer[I];
                IF Buffer[I] =#13 then
                  begin

                    case RGZentralentyp.ItemIndex of
                      0 : DatenverarbeitungMB24;
                      1 : DatenverarbeitungMB48;
                      2 : DatenverarbeitungMB100;
                      3 : DatenverarbeitungMB256;
                      4 : DatenverarbeitungUEZ2000;
                      5 : DatenverarbeitungBMC1024;
                    end;

                I:=I+2;
                if Buffer[I] = #13 then
                    begin
                      Data := StringReplace(Data, #154, 'Ü', [rfReplaceAll]);
                      Data := trim(StringReplace(Data, #$D,  '',  [rfReplaceAll]));
                      Data:= StringReplace(Data, #129, 'ü', [rfReplaceAll]);
                      Data := trim(StringReplace(Data, #132, 'ä', [rfReplaceAll]));
                      Data := StringReplace(Data, #142, 'Ä', [rfReplaceAll]);
                      Data := StringReplace(Data, #148, 'ö', [rfReplaceAll]);
                      Data := StringReplace(Data, #153, 'Ö', [rfReplaceAll]);
                      Data := StringReplace(Data, #154, 'Ü', [rfReplaceAll]);
                      Data := StringReplace(Data, #10#13, ' ', [rfReplaceAll]);

                          ParserTreeView := TMyParserMB256plus.Create;
                          Delay(2000);

                          {ShowMessage(Data);

                          AssignFile(LogFile,'.\Log.txt');
                            if FileExists('\.Log.txt') then
                              Reset(LogFile)
                            else
                              Rewrite(LogFile);
                            WriteLn(LogFile, Data);
                            CloseFile(LogFile);}


                          ParserTreeView.Parse(Data);
                          TreeViewResult(ParserTreeView);
                          ParserTreeView.Free;
                      Data := '';
                    end;
                    I:=I-2;
                end;
                INC(I);
                end;

Buffer:='';
end;


[EDIT] Setze ich ein Delay(3000), werden die Daten nach dem dritten Datensatz sauber eingetragen.

Achso, was nicht sein kann, ist das die Anlage so langsam liefert, weil in mein Memo wird sofort und sehr schnell geschrieben.

Hier die Funktion von Datenverarbeitung MB256 die in der Case Anweisung aufgerufen wird.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
procedure TForm1.DatenverarbeitungMB256;
Var
  Datum              :String;
  Jahr               :String;
  Monat              :String;
  Sicherung          :String;
  SL                 :TStringList;
  I                  :Integer;
  IA                 :Integer;
  IB                 :Integer;
  IC                 :Integer;
  ID                 :Integer;
  N                  :Integer;
begin
  Datum := DatetoStr(Date);
  Jahr := FormatDateTime('yyyy',strtodatetime(Datum));
  Monat := FormatDateTime('mmmm',strtodatetime(Datum));
  CreateDir('..\Daten\');
  CreateDir('..\Daten\'+Jahr);
  CreateDir('..\Daten\'+Jahr+'\'+Monat);

  sl := TStringList.Create;
  try
    MMUEZ2000.Lines.Add(Zeile);
    sl.AddStrings(MMUEZ2000.Lines);
    for i := 0 to sl.Count -1 do
      begin
        sl[i] := trim(StringReplace(sl[i], #$D,  '',  [rfReplaceAll]));
        sl[i] := StringReplace(sl[i], #129, 'ü', [rfReplaceAll]);
        sl[i] := trim(StringReplace(sl[i], #132, 'ä', [rfReplaceAll]));
        sl[i] := StringReplace(sl[i], #142, 'Ä', [rfReplaceAll]);
        sl[i] := StringReplace(sl[i], #148, 'ö', [rfReplaceAll]);
        sl[i] := StringReplace(sl[i], #153, 'Ö', [rfReplaceAll]);
        sl[i] := StringReplace(sl[i], #154, 'Ü', [rfReplaceAll]);
        sl[i] := StringReplace(sl[i], #10#13, ' ', [rfReplaceAll]);

      if sl[i] <> '' then
          Zeile:='';
          Memo.Lines.Append(SL[I]);
          Speichermemo.Lines.Append(SL[I]);
      end;
      MMUEZ2000.Clear;
    sl.Free;
  finally

  end;
  Zeile:='';
  Sicherung := ('..\Daten\'+Jahr+'\'+Monat+'\'+Datum+'.txt');
  Speichermemo.Lines.SaveToFile(Sicherung);
  Label1.Caption := Sicherung;
end;
Einloggen, um Attachments anzusehen!