Ich möchte in einem StringGrid gerne die Textausgabe und so ziemlich alles, was DrawCell macht, dem geerbten DrawCell überlassen, weshalb DefaultDrawing True bleibt. Trotzdem möchte ich die Text-Attribute Alignment & Layout (also Textausrichtung horizontal & vertikal) UND außerdem die Fontgröße ALLER Zellen ändern können. Im Gegenzug zur Laufzeit zusätzlich noch den Fontstyle bestimmter Zellen separat vom Standard auf [fBold].
Soweit ich mich bisher informieren konnte, existiert genau für diese Zwecke neben den per Lazarus-GUI zur Designzeit einstellbaren Optionen des StringGrids die Methode PrepareCanvas, die zur Laufzeit entsprechende Änderungen zulässt.
Allerdings blieben all meine diesbezüglichen Bemühungen genau das zu erreichen bisher erfolglos, weshalb ich hier um Rat bitte, was ich falsch gemacht habe, bzw. was ich eigentlich für die von mir beschriebenen Wünsche ändern / löschen oder zufügen muss.
Ich hab zur Dokumentation mal mein Demo-Programm hochgeladen, das Stand jetzt nichts weiter kann, als auf Resize-Events zu reagieren und dabei das Grind in der Größe mitzuändern (und in dem Zuge eigentlich auch die Schriftgröße im Grid) und Text in die Zellen zu schreiben. (Und da es mal ein Sudoku-Programm werden soll, bestehen die erwarteten Eingaben üblicherweise aus einzelnen Ziffern.)
Stringgrid Text - Attribute ändern
-
- Beiträge: 761
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Stringgrid Text - Attribute ändern
Eigentlich macht dein Programm, dass was du möchtest, die 4 oben links und 2,3 in der Mitte habe ich getippt und die werden so wie du möchtest nicht fett angezeigt:
Textausrichtung hast du mit StringGrid1.Canvas.TextStyle auch richtig gemacht, wenn du es zellenabhängig machen möchtest, dann muss du es auch in TForm1.StringGrid1PrepareCanvas machen, nur du musst erst Standard-Eigenschaften übernehmen, dann ändern:
Code: Alles auswählen
aTextStyle:=StringGrid1.DefaultTextStyle;
aTextStyle.Alignment:=taCenter; //oder etwas anderes
aTextStyle.Layout:=tlCenter; //oder etwas anderes
StringGrid1.Canvas.TextStyle := aTextStyle;