![]() |
StringGrid Spalten Zentrieren, Linksbündig,Rechtsbündig und
ich habe es geschaft in meinem StringGrid die Spalten zu Zentrieren oder Links bzw.Rechtsbündig anzeigen zu lassen
Delphi-Quellcode:
jetzt versuche ich es schon eine ganze zeit lang das die Spalten auch eine optimale breite bekommen
procedure TMDIChild.grdArtikelDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState); var InhaltZelle: string; begin with (Sender as TStringgrid) do begin InhaltZelle := cells[acol, arow];// Zellinhalt in Variable auslesen canvas.fillrect(rect);// Zelle mit aktueller Hintergrundfarbe "übermalen" // 1. Spalte zentriert und mit Abstand nach oben if (acol = 0) then canvas.textrect(rect, (rect.Left + rect.Right - canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle); // 2. Spalte zentriert und mit Abstand nach oben if (acol = 1) then canvas.textrect(rect, (rect.Left + rect.Right - canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle); // 3. Spalte zentriert und mit Abstand nach oben if (acol = 2) then canvas.textrect(rect, (rect.Left + rect.Right - canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle); // 4. Spalte zentriert und mit Abstand nach oben if (acol = 3) then canvas.textrect(rect, (rect.Left + rect.Right - canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle); // 5. Spalte zentriert und mit Abstand nach oben if (acol = 4) then canvas.textrect(rect, (rect.Left + rect.Right - canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle); // 6. Spalte zentriert und mit Abstand nach oben if (acol = 5) then canvas.textrect(rect, (rect.Left + rect.Right - canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle); // 7. Spalte linksbündig mit Abstand nach links und oben if (acol = 6) then canvas.textout(rect.left + 3, rect.top + 2, InhaltZelle); // 8. Spalte linksbündig mit Abstand nach links und oben if (acol = 7) then canvas.textout(rect.left + 3, rect.top + 2, InhaltZelle); // Alle anderen Spalten rechtsbündig mit Abstand nach rechts und oben if (acol > 7) then canvas.textrect(rect, rect.Right - canvas.textwidth(InhaltZelle) - 4, rect.top + 2, InhaltZelle); end; // von with end; // der Prozedur :wall: wie muß ich dabei rangehen ? könnt ihr mir hier helfen ? |
Re: StringGrid Spalten Zentrieren, Linksbündig,Rechtsbündig
Hallo,
Delphi-Quellcode:
{
Name: GetMaxColWidth Zweck: maximale Breite der Spalte ermitteln Parameter: theGrid - das Grid theCol - spalte, deren maximale Breite ermittelt werden soll Return-Parameter: Return: die maximale Breite der Spalte Hinweis: } function GetMaxColWidth(theGrid: TStringGrid; theCol: Longint): Longint; var MaxLen: Integer; CurLen: Integer; CurRow: Longint; begin MaxLen:=0; if theGrid.Owner<>NIL then begin for CurRow:=0 to theGrid.RowCount-1 do begin CurLen:= theGrid.Canvas.TextWidth(theGrid.Cells[theCol,CurRow]); if CurLen>MaxLen then MaxLen:= CurLen; end; Inc(MaxLen,5); end; Result:= MaxLen; end; { GetMaxColWidth } procedure Grid_SetColWidth(theGrid: TStringGrid; theCol: Longint); var MaxLen: Integer; begin if theCol=-1 then Exit; if (theCol<theGrid.ColCount) then begin { ohne diese Zeile funktioniert der Aufruf nicht in FormCreate oder FormActivate } {$IFDEF WIN32} Application.ProcessMessages; {$ENDIF} MaxLen:= GetMaxColWidth(theGrid, theCol); { Spaltenbreite nur ändern, wenn die neue Breite breiter ist } { if (theGrid.ColWidths[theCol]<MaxLen) then }theGrid.ColWidths[theCol]:= MaxLen; end; end; { Grid_SetColWidth } Heiko |
Re: StringGrid Spalten Zentrieren, Linksbündig,Rechtsbündig
das werde ich gleich mal probieren
ich danke schon mal im vorraus :cheers: |
DP-Maintenance
Dieses Thema wurde von "TBx" von "Neuen Beitrag zur Code-Library hinzufügen" nach "VCL / WinForms / Controls" verschoben.
Ist kein Vorschlag für die CL |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz