[gelöst] Darstellungsproblem mit StringGrid

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

[gelöst] Darstellungsproblem mit StringGrid

Beitrag von Michl »

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
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;  

Benutzeravatar
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

Beitrag von m.fuchs »

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)
Das geht: Projekt => Projekteinstellungen => Debuggen => Bereich (-Cr)
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Darstellungsproblem mit StringGrid

Beitrag von Michl »

Wahrscheinlich habe ich die Ursache gefunden (und Euch gar nicht den möglichen Verursacher mitgeteilt :wink: ).
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.
m.fuchs hat geschrieben:Das geht: Projekt => Projekteinstellungen => Debuggen => Bereich (-Cr)
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?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
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

Beitrag von m.fuchs »

Michl hat geschrieben:
m.fuchs hat geschrieben:Das geht: Projekt => Projekteinstellungen => Debuggen => Bereich (-Cr)
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?!
Ja, das ist dann nicht mehr notwendig.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: [gelöst] Darstellungsproblem mit StringGrid

Beitrag von Michl »

Danke!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten