Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Fr 05.05.23 12:31 
Ein freundliches Hallo an alle,

ich habe einen Effekt, den ich bisher nicht erklären kann. Vielleicht hat jemand schon herausgefunden, was da geschieht und kann es erklären.

Da es um einige hundert Programmzeilen geht, beschreibe ich den Effekt, statt den Code zu zeigen. Ich verwende ein Stringgrid, um Daten für eine Anzeige aus einer Datei zu laden. Wenn ich nun einen Link der einer Taste zugeordnet ist anlegen will, wird ein Fenster geöffnet, mit dem die Daten bearbeitet werden können. Die Daten werden dann vom Fenster abgeholt und in eine Stringliste nach dem Schema "Wert=Datum" eingetragen. Diese Stringliste wird dann als Commatext in die Zelle geschrieben. Damit der gesamte Datensatz und nicht jeder Wert einzeln in die Datei geschrieben wird, erfolgt das Speichern auf "Knopfdruck". Doch da zeigt sich folgender Effekt: Beim Speichern im Stringgrid sehe ich die Daten im Grid, aber beim Speichern der Datenzeile ist die Zelle leer.

Das Grid und die Routinen sind Teil des Objekts. Wenn ich mir die Adresse des Grids beim Speichern im Grid und beim Speichern in der Datei hole (Addr(X)), ist diese identisch, aber nicht der Inhalt. Ausschalten der Optimierung vor und wieder Einschalten nach den Routinen ergab keine Änderung.

Hat jemand eine Idee, was hinter diesem Effekt steckt??

Grüße von der wolkigen Nordsee

Peter

Moderiert von user profile iconTh69: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 05.05.2023 um 15:08
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 05.05.23 15:25 
Wie genau speicherst du denn die Grid-Daten? Evtl. würden ein paar Screenshots (während dem Debuggen) helfen?!
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Fr 05.05.23 16:43 
Hallo Th69,

Dank Dir für Deine Antwort! Leider helfen Screenshots nichts. Die Zelle wird auf Link geprüft und der Inhalt gegebenenfalls für den Dateityp aufgearbeitet, deshalb "Wert=Datum". Wenn ich bei der Linkprüfung den Zelleninhalt mit "Auswerten/Ändern" ansehe, ist der leer!

Grüße von der immer noch wolkigen Nordsee

Peter
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 05.05.23 17:35 
Verwendest du beim StringGrid Ereignisse o.ä., welche dann die Zelle wieder löscht?

Und ist denn der Zellenwert direkt nach dem Setzen des Zellenwerts programmtechnisch derselbe?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 05.05.23 20:14 
Füg doch StringGridX.Cells[00], natürlich mit den von dir gewünschten Koordinaten, einfach der Liste der überwachten Ausdrücke hinzu. Dann musst du nach dem Schreiben in die Zelle dort ja deinen Wert sehen. Und wenn du auf Speichern gehst, siehst du dann, ob sich in der Zwischenzeit etwas geändert hat.

Du kannst dann auch einen Haltepunkt auf TStringGrid.SetCells setzen, so dass du bei Änderungen dort ankommst und siehst woher eine Änderung kommt.

Klar ist jedenfalls, dass aus einem TStringGrid nicht einfach etwas verschwindet. Ohne Quelltext lässt sich daher dazu auch nicht viel sagen. Irgendwo muss in deinem Code die Erklärung zu finden sein. Du kannst mir den Code auch per PN schicken, am besten ein wenig um für den Fall unwichtige Teile gekürzt, dann schaue ich gerne einmal rein.
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Sa 06.05.23 13:40 
Hallo Th69, hallo jaenicke,

Dank euch für Eure Antwort! Der Fehler ist gefunden!

In einer Konfigurationsdatei waren zwei Anzeigeelemente auf den gleichen Spaltenindex gesetzt. Da das leere Element zuerst bearbeitet wurde ist der Inhalt gelöscht worden.

jaenicke, die Liste der überwachten Ausdrücke war der entscheidende Tipp. Ich hatte schon nach so etwas gesucht, es aber übersehen. Daher dachte ich das hätte ich von VBA in Erinnerung.

Grüße von der wieder wolkigen Nordsee

Peter