Hallo Allerseits,
ich habe seit einiger Zeit ein Problem mit einer StringGrid. Diese hat 9 Columns, 2 haben davon den ButtonStyle "cbsButtonColumn".
Ich parse diverse Texte. Dabei füge ich zum Anlernen des Parsers oder der Parser selber Textpassagen ins StringGrid ein. Um Fehler zu zeigen, werden Zellen (+Zeilen) farbig abgesetzt. Daher habe ich ein dyn. Array, was die Fehler beinhaltet und als Grundlage zum Färben der Zellen/Zeilen dient. Die Farbe setze ich im OnPrepareCanvas vom Grid.
Alles funktioniert soweit einwandfrei, allerdings gibt es einen Fehler, den ich nicht eingrenzen kann. In schätzungsweise 1 von 50 Aufrufen, zu parsendender Texten, zerhaut es mir die Ansicht des Grids. Die ersten Zeilen werden immer noch ordentlich angezeigt, dann kommt es zu einer Verschiebung der Zellinhalte, der Breite der Columns, der ButtonStyle wird nicht mehr angzeigt. Repainte ich die Form (z.B. in dem ich die Formulargröße ändere oder ein TSplitter verschiebe), wird alles wieder ordentlich dargestellt. Noch ärgerlicher ist, dass danach in evtl. 1 von 20 Fällen das Prog. abschmiert.
Ich habe vergeblich versucht ein Minimalbsp. zu erstellen, das dieses Verhalten zeigt. Heaptrc zeigt keine Fehler. Die Unit mit dem Array habe ich mit Rangecheck kompiliert. Ich habe eine Bereichsprüfung vor Zugriff auf das dyn. Array eingebaut - ohne Fehlermeldung.
Als letzten Ausweg könnte ich statt des Stringgrids ein Drawgrid verwenden, das bedeutet allerdings einen ganz schönen Umbau, wo ich dann auch nicht weiss, ob dieses nicht ähnlich reagiert?!
Gibt es die Möglichkeit den Rangecheck global zu machen (habe in der IDE keinen Schalter gefunden und keinen Hinweis im Netz nur: http://www.freepascal.org/docs-html/prog/progsu65.html)
Hat jemand noch eine Idee, wie ich den Fehler noch suchen könnte?!
Danke
Michael
[gelöst] Darstellungsproblem mit StringGrid
[gelöst] Darstellungsproblem mit StringGrid
Zuletzt geändert von Michl am Di 2. Sep 2014, 13:16, insgesamt 1-mal geändert.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Darstellungsproblem mit StringGrid
Das geht: Projekt => Projekteinstellungen => Debuggen => Bereich (-Cr)Michl hat geschrieben:Gibt es die Möglichkeit den Rangecheck global zu machen (habe in der IDE keinen Schalter gefunden und keinen Hinweis im Netz nur: http://www.freepascal.org/docs-html/prog/progsu65.html)
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: Darstellungsproblem mit StringGrid
Wahrscheinlich habe ich die Ursache gefunden (und Euch gar nicht den möglichen Verursacher mitgeteilt
).
Der Parser läuft in einem eigenen Thread. Das Formular wird nur aufgerufen, wenn es zu einer Fehlinterpretation beim parsen kommt. Lerne ich daraufhin den Parser an, zeigt er den Erfolg im Grid. Dort hatte ich ein "Synchronize" vergessen. Scheinbar funktioniert es jetzt - sieht zumindest erstmal gut aus.

Der Parser läuft in einem eigenen Thread. Das Formular wird nur aufgerufen, wenn es zu einer Fehlinterpretation beim parsen kommt. Lerne ich daraufhin den Parser an, zeigt er den Erfolg im Grid. Dort hatte ich ein "Synchronize" vergessen. Scheinbar funktioniert es jetzt - sieht zumindest erstmal gut aus.
Danke für die Info! Ich wusste nicht, dass dieser Schalter gleichbedeutend mit {$R+} ist. Dieser von Haus aus angestellt. Bedeutet dies eigentlich, dass ich den Schalter {$R+} am Anfang der Units weglassen kann, wenn der Schalter in den Projekteinstellungen gesetzt ist?!m.fuchs hat geschrieben:Das geht: Projekt => Projekteinstellungen => Debuggen => Bereich (-Cr)
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Darstellungsproblem mit StringGrid
Ja, das ist dann nicht mehr notwendig.Michl hat geschrieben:Danke für die Info! Ich wusste nicht, dass dieser Schalter gleichbedeutend mit {$R+} ist. Dieser von Haus aus angestellt. Bedeutet dies eigentlich, dass ich den Schalter {$R+} am Anfang der Units weglassen kann, wenn der Schalter in den Projekteinstellungen gesetzt ist?!m.fuchs hat geschrieben:Das geht: Projekt => Projekteinstellungen => Debuggen => Bereich (-Cr)
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: [gelöst] Darstellungsproblem mit StringGrid
Danke!
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;