AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi StringGrid Spalten Zentrieren, Linksbündig,Rechtsbündig und
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid Spalten Zentrieren, Linksbündig,Rechtsbündig und

Ein Thema von Kunoishi · begonnen am 4. Aug 2009 · letzter Beitrag vom 6. Aug 2009
Antwort Antwort
Kunoishi

Registriert seit: 26. Dez 2002
Ort: Berlin
140 Beiträge
 
Delphi 5 Standard
 
#1

StringGrid Spalten Zentrieren, Linksbündig,Rechtsbündig und

  Alt 4. Aug 2009, 18:26
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

wie muß ich dabei rangehen ?
könnt ihr mir hier helfen ?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: StringGrid Spalten Zentrieren, Linksbündig,Rechtsbündig

  Alt 4. Aug 2009, 18:51
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
Heiko
  Mit Zitat antworten Zitat
Kunoishi

Registriert seit: 26. Dez 2002
Ort: Berlin
140 Beiträge
 
Delphi 5 Standard
 
#3

Re: StringGrid Spalten Zentrieren, Linksbündig,Rechtsbündig

  Alt 4. Aug 2009, 19:07
das werde ich gleich mal probieren
ich danke schon mal im vorraus
  Mit Zitat antworten Zitat
6. Aug 2009, 08:27
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 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