Wie funktioniert das Textalignment im DrawGrid?
Ich möchte de Text in Spalten zentriert oder rechtsbündig ausgerichtet haben.
[Erledigt] Alignment in TDrawGrid
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
[Erledigt] Alignment in TDrawGrid
Zuletzt geändert von MacWomble am Fr 18. Jan 2019, 16:31, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: Alignment in TDrawGrid
OK, ich habe es gefunden (Zufallstreffer, deswegen hier die Lösung):
in DrawCell des TDrawGrids:
Allerdings fehlt das Padding bei taRightJustify (bzw. ich habe es noch nicht gefunden), d.h. der Text steht direkt am rechten Rand ohne Zwischenraum! 
Ich kann mir zwar behelfen, weil rechtsbündig nur formatierte Zahlen ausgegeben werden. Wenn ich dort im Format 2 Leerzeichen anfüge, sieht es gut aus.
in DrawCell des TDrawGrids:
Code: Alles auswählen
var
txt: string;
TextStyle : TTextStyle;
begin
txt := GetCellText(ACol, ARow);
// TextStyle.Alignment := taCenter; // taRightJustify, taLeftJustify
if aRow = 0 then
TextStyle.Alignment := taCenter
else
case ACol of
0: TextStyle.Alignment := taCenter;
1: TextStyle.Alignment := taLeftJustify;
2: TextStyle.Alignment := taCenter;
3: TextStyle.Alignment := taRightJustify;
4: TextStyle.Alignment := taRightJustify;
5: TextStyle.Alignment := taCenter;
end;
TextStyle.Layout := tlCenter;
TextStyle.SingleLine := True;
TextStyle.Clipping := False;
TextStyle.ExpandTabs := True;
TextStyle.ShowPrefix := True;
TextStyle.Wordbreak := True;
TextStyle.Opaque := False;
TextStyle.SystemFont := False;
TextStyle.RightToLeft := False;
TextStyle.EndEllipsis := False;
dgPreise.Canvas.FillRect(ARect);
dgPreise.Canvas.TextRect(ARect, ARect.Left + constCellPadding, ARect.Top + constCellPadding, txt, TextStyle);

Ich kann mir zwar behelfen, weil rechtsbündig nur formatierte Zahlen ausgegeben werden. Wenn ich dort im Format 2 Leerzeichen anfüge, sieht es gut aus.

Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
Re: Alignment in TDrawGrid
Dann mach das Rechteck halt nach dem Zeichnen des Hintergrunds um das CellPadding auf jeder Seite kleiner. Das übergebene Rechteck bestimmt den Ort der Ausgabe bei den Nicht-Standard-Alignments. Außerdem kannst du dir das Initiieren der einzelen Standard-Felder von TTextStyle sparen, wenn du vorher den TextStyle des Canvas ausliest.MacWomble hat geschrieben:Allerdings fehlt das Padding bei taRightJustify (bzw. ich habe es noch nicht gefunden), d.h. der Text steht direkt am rechten Rand ohne Zwischenraum!![]()
Code: Alles auswählen
var
txt: string;
TextStyle : TTextStyle;
begin
txt := GetCellText(ACol, ARow);
TextStyle := dgPreise.Canvas.TextStyle;
if aRow = 0 then
TextStyle.Alignment := taCenter
else
case ACol of
0: TextStyle.Alignment := taCenter;
1: TextStyle.Alignment := taLeftJustify;
2: TextStyle.Alignment := taCenter;
3: TextStyle.Alignment := taRightJustify;
4: TextStyle.Alignment := taRightJustify;
5: TextStyle.Alignment := taCenter;
end;
TextStyle.Layout := tlCenter;
TextStyle.Clipping := False; // warum false? Damit wird zu langer Text in den gerade reservierten Padding-Rand geschrieben
TextStyle.ExpandTabs := True;
TextStyle.ShowPrefix := True;
dgPreise.Canvas.FillRect(ARect);
InflateRect(ARect, -varCellpadding, -varCellpadding); // Rechteck kleiner machen
dgPreise.Canvas.TextRect(ARect, ARect.Left + constCellPadding, ARect.Top + constCellPadding, txt, TextStyle);
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: [Erledigt] Alignment in TDrawGrid
Das Clipping hatte ich zum testen umgeschalten, Das andere wusste ich noch nicht - Danke dafür ! 

Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.