[Erledigt] Alignment in TDrawGrid

Rund um die LCL und andere Komponenten

[Erledigt] Alignment in TDrawGrid

Beitragvon MacWomble » 17. Jan 2019, 23:04 [Erledigt] Alignment in TDrawGrid

Wie funktioniert das Textalignment im DrawGrid?
Ich möchte de Text in Spalten zentriert oder rechtsbündig ausgerichtet haben.
Zuletzt geändert von MacWomble am 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.
MacWomble
Lazarusforum e. V.
 
Beiträge: 791
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.80 / FP 3.3.1 SVN Rev 41791 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon MacWomble » 18. Jan 2019, 12:17 Re: Alignment in TDrawGrid

OK, ich habe es gefunden (Zufallstreffer, deswegen hier die Lösung):

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


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. :twisted:
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
Lazarusforum e. V.
 
Beiträge: 791
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.80 / FP 3.3.1 SVN Rev 41791 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon wp_xyz » 18. Jan 2019, 14:43 Re: Alignment in TDrawGrid

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! :(

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.

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

varCellPadding hat gegenüber constCellPadding den Vorteil, dass der Wert bei Bilschirmen höherer Auflösung automatisch angepasst wird.
wp_xyz
 
Beiträge: 2906
Registriert: 8. Apr 2011, 08:01

Beitragvon MacWomble » 18. Jan 2019, 16:33 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.
MacWomble
Lazarusforum e. V.
 
Beiträge: 791
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.80 / FP 3.3.1 SVN Rev 41791 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron
porpoises-institution
accuracy-worried