Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StringGrid Spalten Zentrieren, Linksbündig,Rechtsbündig und (https://www.delphipraxis.net/138173-stringgrid-spalten-zentrieren-linksbuendig-rechtsbuendig-und.html)

Kunoishi 4. Aug 2009 18:26


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:
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
jetzt versuche ich es schon eine ganze zeit lang das die Spalten auch eine optimale breite bekommen
:wall:
wie muß ich dabei rangehen ?
könnt ihr mir hier helfen ?

hoika 4. Aug 2009 18:51

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

Kunoishi 4. Aug 2009 19:07

Re: StringGrid Spalten Zentrieren, Linksbündig,Rechtsbündig
 
das werde ich gleich mal probieren
ich danke schon mal im vorraus :cheers:

DP-Maintenance 6. Aug 2009 08:27

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 20:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz