Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datenübernahme in StringGrid nur im Debugmodus (https://www.delphipraxis.net/129436-datenuebernahme-stringgrid-nur-im-debugmodus.html)

Jens Hartmann 19. Feb 2009 07:34


Datenübernahme in StringGrid nur im Debugmodus
 
Hallo,

ich versuche es einfach nochmal anders. 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.

Um aber darauf zu verweisen, hier der alte Thread...

Der alte Thread

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

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 und drücke erneut F9, sehe ich in meinem Programm die Daten im String Grid. 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 eine Idee, wo das dran liegen könnte

Vielen Dank schon mal

Gruß

Jens

Reinhardtinho 19. Feb 2009 07:49

Re: Datenübernahme in StringGrid nur im Debugmodus
 
Hast du es schon mit

Delphi-Quellcode:
Application.ProcessMessages;
probiert?

Jens Hartmann 19. Feb 2009 08:01

Re: Datenübernahme in StringGrid nur im Debugmodus
 
Nein habe ich nicht, habe gerade mal in der Delphi Hilfe nachgesehen, finde allerdings nichts darüber, wo muss ich das eintragen und wie kann ich das anwenden, oder was passiert damit.

Gruß

Jens

Reinhardtinho 19. Feb 2009 08:11

Re: Datenübernahme in StringGrid nur im Debugmodus
 
In der Hilfe steht dazu:

Zitat:

Zitat von Delphi Hilfe
Mit der Methode ProcessMessages können Sie eine Anwendung unterbrechen, so daß Windows die Botschaftswarteschlange verarbeiten kann.

procedure ProcessMessages;

Beschreibung

Durch einen Aufruf von ProcessMessages ermöglichen Sie es Windows, die Botschaften abzuarbeiten, die sich in der Botschaftswarteschlange befinden. Mit der Methode ProcessMessages kann die Botschaftswarteschlange von Windows durchlaufen werden, bis diese leer ist. Anschließend wird die Ablaufsteuerung wieder auf die Anwendung übertragen.

Hinweis

Die Vernachlässigung der Botschaftsverarbeitung wirkt sich nur auf die Anwendung aus, die ProcessMessages aufruft, nicht auf andere Anwendungen. Bei langen Operationen ermöglicht der periodische Aufruf von ProcessMessages, daß die Anwendung auf Zeichnen- und andere Botschaften antwortet.

Hinweis

ProcessMessages ermöglicht nicht, daß die Anwendung in den Leerlauf übergeht. Hier liegt ein Unterschied zu HandleMessage.

Ruf die Anweisung mal dort auf, wo du den TreeView befüllst oder etwas in dein Memo schreibst.

Jens Hartmann 19. Feb 2009 08:44

Re: Datenübernahme in StringGrid nur im Debugmodus
 
Also, habe das jetzt mal hier eingetragen, hat aber nichts genütz. Ist immer noch so wie ich eben beschrieben habe.


Delphi-Quellcode:
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;

toms 19. Feb 2009 08:46

Re: Datenübernahme in StringGrid nur im Debugmodus
 
Hallo

Das Application.ProcessMessages wird an der falschen Stelle aufgerufen.

Jetzt:
Delphi-Quellcode:
for i := 0 to High(ParserTreeView.Entries) do
  Application.ProcessMessages;
  begin
Nachher:
Delphi-Quellcode:
for i := 0 to High(ParserTreeView.Entries) do
 begin
  Application.ProcessMessages;
oder noch besser vor dem zweitletzen end; Application.ProcessMessages; aufrufen.

Jens Hartmann 19. Feb 2009 08:52

Re: Datenübernahme in StringGrid nur im Debugmodus
 
Sorry , so hatte ich es eingetragen, Funktioniert aber nicht.

Seltsamer weise, ist das Problem erste seid dem vorhanden, seid ich die Datei Einriichtung endlich passend hatte. Als die Daten noch ziemlich durcheinander und unsortiert ankammen, hat das Funktioniert. nur das die Daten da in den falschen Zellen standen.

Jens Hartmann 19. Feb 2009 09:15

Re: Datenübernahme in StringGrid nur im Debugmodus
 
Habe das jetzt auch mal vor dem vorletzten end probiert. Geht nicht.

Ich muss ehrlich zugeben, ich habe keine Ahnung wo ich noch suchen soll.

Delphi-Quellcode:


    begin
      Memo7.Lines.Add(ParserTreeView.Entries[i].Bereich);
      SGMB256plus.Cells[5, RCount + 1] := ParserTreeView.Entries[i].Bereich;
    end;
  Application.ProcessMessages;
  end;
end;

Jens Hartmann 19. Feb 2009 13:33

Re: Datenübernahme in StringGrid nur im Debugmodus
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe die ganze Anweisung jetzt nochmal angepaßt und mal Variablen dazwischen geschaltet. Immer noch genau dasselbe. Arbeite ich mit Breakpoint, wird eingetragen arbeite ich ohne also wie der Kunde muss, wird nicht eingetrage.

In meinen Variablen werden die Daten wunderbar eingetrage.

Delphi-Quellcode:
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;
Hat noch jemand eine Idee wie ich das Problem in den Griff bekomme??? :gruebel:

Im Anhang habe ich noch einmal einen Screenshot, die Maus zeigt auf meinen Record und Links bei Überwachte Ausdrücke sieht man, das auch die Variablen den Wert angenommen haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 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