[Erledigt} StringGrid Felder formatieren
- juelin
- Lazarusforum e. V.
- Beiträge: 343
- Registriert: Sa 24. Jul 2021, 18:03
- OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Mannheim
[Erledigt} StringGrid Felder formatieren
Hallo,
ich habe ein StringGrid mit mehreren Feldern.
Alle Felder sind linksbündig ausgerichtet.
Jetzt möchte ich ein Feld aber rechtsbündig ausrichten.
Wie bei z. B TEdite Alignment=taRightJustify.
Leider gibt es im StringGrid kein Alignment.
Ist das irgendwie möglich und wenn ja wie?
Danke und Gruß
Jürgen
ich habe ein StringGrid mit mehreren Feldern.
Alle Felder sind linksbündig ausgerichtet.
Jetzt möchte ich ein Feld aber rechtsbündig ausrichten.
Wie bei z. B TEdite Alignment=taRightJustify.
Leider gibt es im StringGrid kein Alignment.
Ist das irgendwie möglich und wenn ja wie?
Danke und Gruß
Jürgen
Zuletzt geändert von juelin am Di 3. Mär 2026, 15:01, insgesamt 2-mal geändert.
Re: StringGrid Felder formatieren
Nimm das OnPrepareCanvas-Event und setze dort das Alignment im TextStyle des Canvas auf taRightJustify (ist leider etwas umständlich, weil TTextStyle ein Record ist ohne Setter/Getter in den Properties):
(nicht getestet):
(nicht getestet):
Code: Alles auswählen
procedure TForm1.StringGrid1PrepareCanvas(Sender: TObject; aCol, aRow: Integer;
aState: TGridDrawState);
var
ts: TTextStyle;
begin
if ((aCol = 4) and (aRow = 10)) or (aCol = 1) then begin
ts := StringGrid1.Canvas.TextStyle;
ts.Alignment := taRightJustify;
StringGrid1.Canvas.TextStyle := ts;
end;
end;- Zvoni
- Beiträge: 586
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: StringGrid Felder formatieren
Hääää???
Hab ich jetzt irgendwas falsch verstanden, oder denke ich zu sehr um die Ecke????
Spalten andererseits......
Hab ich jetzt irgendwas falsch verstanden, oder denke ich zu sehr um die Ecke????
Natürlich hat das StringGrid kein Alignment.Leider gibt es im StringGrid kein Alignment.
Spalten andererseits......
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- juelin
- Lazarusforum e. V.
- Beiträge: 343
- Registriert: Sa 24. Jul 2021, 18:03
- OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Mannheim
Re: StringGrid Felder formatieren
Hallo wp_xyz,
danke für den Hinweis.
Hat wunderbar funktioniert.
Alles Gute
Jürgen
danke für den Hinweis.
Hat wunderbar funktioniert.
Alles Gute
Jürgen
- juelin
- Lazarusforum e. V.
- Beiträge: 343
- Registriert: Sa 24. Jul 2021, 18:03
- OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Mannheim
Re: Erledigt StringGrid Felder formatieren
hallo zvoni,
ja Du hst recht. Das geht natürlich auch.
Aber dann macht er auch die Überschrift rechtsbündig, die sollte aber linksbündig bleiben.
Gruß
Jürgen
ja Du hst recht. Das geht natürlich auch.
Aber dann macht er auch die Überschrift rechtsbündig, die sollte aber linksbündig bleiben.
Gruß
Jürgen
- Zvoni
- Beiträge: 586
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: Erledigt StringGrid Felder formatieren
Wie kommst du denn da drauf??juelin hat geschrieben: Di 3. Mär 2026, 14:53 hallo zvoni,
ja Du hst recht. Das geht natürlich auch.
Aber dann macht er auch die Überschrift rechtsbündig, die sollte aber linksbündig bleiben.
Gruß
Jürgen
Du musst zwischen Alignment der Spalte, und dem Alignment der Überschrift unterscheiden
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: StringGrid Felder formatieren
Nicht jeder will Columns, z.B. wenn man ein Grid aus einer Delphi-Anwendung portiert. Columns sind beim TStringGrid meiner Meinung nach ein etwas verunglücktes Feature, weil sie ein zweites Index-System einführen: Die erste Daten-Zelle links oben (außerhalb der FixedRows/FixedCols) hat den Spaltenindex 1, die zugehörige Spalte aber den Index 0.Zvoni hat geschrieben: Di 3. Mär 2026, 14:38 Hääää???
Hab ich jetzt irgendwas falsch verstanden, oder denke ich zu sehr um die Ecke????
- Zvoni
- Beiträge: 586
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: StringGrid Felder formatieren
Biste sicher?wp_xyz hat geschrieben: Di 3. Mär 2026, 15:58Nicht jeder will Columns, z.B. wenn man ein Grid aus einer Delphi-Anwendung portiert. Columns sind beim TStringGrid meiner Meinung nach ein etwas verunglücktes Feature, weil sie ein zweites Index-System einführen: Die erste Daten-Zelle links oben (außerhalb der FixedRows/FixedCols) hat den Spaltenindex 1, die zugehörige Spalte aber den Index 0.Zvoni hat geschrieben: Di 3. Mär 2026, 14:38 Hääää???
Hab ich jetzt irgendwas falsch verstanden, oder denke ich zu sehr um die Ecke????
in meinem Screenshot oben habe ich stumpf bei "StringGrid1.Cells[1,1]:='Links 1'; usw. angefangen.
Heisst: Im Screenshot belegen FixedRow/Col schon [0,0]
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: [Erledigt} StringGrid Felder formatieren
Ja. Die Zelle mit dem Text "Links 1" ist in Cells[1, 1], der erste Index ist dabei der Spaltenindex der Zelle und hat den Wert 1. Das ist aber nicht der Index der Column, in der sich diese Zelle befindet - das ist die mit der Caption "Links". Im Objektbaum des Objektinspektor siehst du unter "Columns": "0 - Links" - also: diese Column hat den Index 0! Das Problem ist, dass es für die FixedCols keine Column gibt, und dadurch gerät läuft die Indizierung auseinander. Ich finde, das ist total verwirrend. Beim DBGrid hat man das besser gelöst, da hat man die FixedCols komplett abgeschafft, so dass Spaltenindex und Column-Index zusammenfallen.
- Zvoni
- Beiträge: 586
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: [Erledigt} StringGrid Felder formatieren
Jetzt hab ich dich verstanden.wp_xyz hat geschrieben: Di 3. Mär 2026, 16:31 Ja. Die Zelle mit dem Text "Links 1" ist in Cells[1, 1], der erste Index ist dabei der Spaltenindex der Zelle und hat den Wert 1. Das ist aber nicht der Index der Column, in der sich diese Zelle befindet - das ist die mit der Caption "Links". Im Objektbaum des Objektinspektor siehst du unter "Columns": "0 - Links" - also: diese Column hat den Index 0! Das Problem ist, dass es für die FixedCols keine Column gibt, und dadurch gerät läuft die Indizierung auseinander. Ich finde, das ist total verwirrend. Beim DBGrid hat man das besser gelöst, da hat man die FixedCols komplett abgeschafft, so dass Spaltenindex und Column-Index zusammenfallen.
DBGrid hat doch aber noch FixedCols?!?!??!
Was ich skurril finde: DBGrid stammt von TCustomGrid ab,
und TCustomGrid hat ein protected (!!) Event "OnSelection" / "OnAfterSelection", was die geclickte Zelle (Spalte, Zeile) liefert.
Ja, TCustomGrid ist der Vorfahre für TStringGrid, und da kann ich die Events zuweisen (Published).
Frage mich gerade, wieso man das für DBGrid nicht gemacht hat, um einfach an die Zellen-Daten zu kommen, unabhängig vom drunter hängenden DataSet
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: [Erledigt} StringGrid Felder formatieren
Hast recht. Ich habe mich schlecht ausgedrückt... Wenn du FixedCols auf z.B. 2 setzt, hast du beim DBGrid die erste Datenspalte in einer FixedCol. FixedCols = 0 geht gar nicht, weil die linke Fixed-Randspalte für die Indikator-Icons benötigt wird. Beim StringGrid ist das völlig anders. Wenn die Zahl der FixedCols erhöht wird, werden die Columns in der Darstellung einfach entsprechend nach rechts geschoben. Warum eigentlich? Warum kann man keine FixedCol zu einer Column machen? Dann wäre die Index-Welt wieder in Ordnung.
Die Diskrepanz zwischen SpaltenIndex in Cells[col,row] und dem Index einer Column stellt sich beim DBGrid nicht, weil man die Zellen gar nicht per Cells[col, row] ansprechen kann. Das ist wahrscheinlich so beabsichtigt, dass man gezwungen ist, das Grid als Abbild eines Dataset zu sehen, wo es ja auch kein "col,row" gibt, sondern nur Records und Felder. Das ist zwar irgendwie dieselbe Information, jedoch wird's schwierig wenn das Grid nur einen Ausschnitt des Dataset geladen hat und die Recordnummer nicht gut definiert ist.
Ich meine, genau diesen Denkansatz wollten die Autoren des DBGrid vermeiden.Zvoni hat geschrieben: Mi 4. Mär 2026, 08:29 um einfach an die Zellen-Daten zu kommen, unabhängig vom drunter hängenden DataSet
Das DBGrid hat ein Event OnCellClick, das nahelegt, es würde die col/row Koordinaten der geklickten Zelle zurückliefern. Aber es hat nur einen Parameter Column, keine Row. Aber wenn man in eine Zelle geklickt hat, wird der Record, der zur geklickten Zelle gehört, zum aktiven Record, und man braucht den Zeilenindex gar nicht mehr. Man kann nach dem Klick z.B. mit Column.Field.AsString den Text in der geklickten Zellen abfragen.
- Zvoni
- Beiträge: 586
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: [Erledigt} StringGrid Felder formatieren
Das weiss ich alles.wp_xyz hat geschrieben: Mi 4. Mär 2026, 12:25Hast recht. Ich habe mich schlecht ausgedrückt... Wenn du FixedCols auf z.B. 2 setzt, hast du beim DBGrid die erste Datenspalte in einer FixedCol. FixedCols = 0 geht gar nicht, weil die linke Fixed-Randspalte für die Indikator-Icons benötigt wird. Beim StringGrid ist das völlig anders. Wenn die Zahl der FixedCols erhöht wird, werden die Columns in der Darstellung einfach entsprechend nach rechts geschoben. Warum eigentlich? Warum kann man keine FixedCol zu einer Column machen? Dann wäre die Index-Welt wieder in Ordnung.
Die Diskrepanz zwischen SpaltenIndex in Cells[col,row] und dem Index einer Column stellt sich beim DBGrid nicht, weil man die Zellen gar nicht per Cells[col, row] ansprechen kann. Das ist wahrscheinlich so beabsichtigt, dass man gezwungen ist, das Grid als Abbild eines Dataset zu sehen, wo es ja auch kein "col,row" gibt, sondern nur Records und Felder. Das ist zwar irgendwie dieselbe Information, jedoch wird's schwierig wenn das Grid nur einen Ausschnitt des Dataset geladen hat und die Recordnummer nicht gut definiert ist.
Ich meine, genau diesen Denkansatz wollten die Autoren des DBGrid vermeiden.Zvoni hat geschrieben: Mi 4. Mär 2026, 08:29 um einfach an die Zellen-Daten zu kommen, unabhängig vom drunter hängenden DataSet
Das DBGrid hat ein Event OnCellClick, das nahelegt, es würde die col/row Koordinaten der geklickten Zelle zurückliefern. Aber es hat nur einen Parameter Column, keine Row. Aber wenn man in eine Zelle geklickt hat, wird der Record, der zur geklickten Zelle gehört, zum aktiven Record, und man braucht den Zeilenindex gar nicht mehr. Man kann nach dem Klick z.B. mit Column.Field.AsString den Text in der geklickten Zellen abfragen.
Ich finde aber den Denkansatz dennoch etwas skurril, weil ein StringGrid vom Prinzip dasselbe wie ein DBGrid ist: Eine tabellarische Darstellung von Daten.
Nur halt mit dem Unterschied, dass man bei einem StringGrid alles von Hand machen muss (Tabelle füllen usw.), und beim DBGrid das eben "automatisch" aus dem aktiven Dataset erfolgt.
Naja....lassen wir es.
Wir haben den Thread eh viel zu weit "entführt"
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.