Wie funktioniert das Textalignment im DrawGrid? 
Ich möchte de Text in Spalten zentriert oder rechtsbündig ausgerichtet haben.
			
			
													[Erledigt] Alignment in TDrawGrid
- 
				MacWomble
- 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.
						- 
				MacWomble
- 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);        - 
				MacWomble
- 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.
						 Verein
Verein 
 Links
Links Suche
Suche