AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi StringGrid: ColWidth nach längsten Eintrag ausrichten
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid: ColWidth nach längsten Eintrag ausrichten

Ein Thema von Gummibärchen · begonnen am 17. Feb 2003 · letzter Beitrag vom 5. Nov 2003
Antwort Antwort
Benutzerbild von Gummibärchen
Gummibärchen

Registriert seit: 17. Feb 2003
5 Beiträge
 
Delphi 5 Enterprise
 
#1

StringGrid: ColWidth nach längsten Eintrag ausrichten

  Alt 17. Feb 2003, 14:44
Hi,
bin Newbie und arbeite mich gerade in Delphi ein.
Ich habe mittlerweile ein StringGrid gefüllt und will nun, dass die Spaltenbreite sich dem längsten Eintrag anpasst.
Habe bisher nichts gefunden, falls das Thema schon durchgekaut wurde wäre ich für einen Link dankbar
THX!
L@st Minute reicht doch!
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: StringGrid: ColWidth nach längsten Eintrag ausrichten

  Alt 17. Feb 2003, 14:50
Zitat von Gummibärchen:
falls das Thema schon durchgekaut wurde
Nicht das ich wüsste.

Eine vorgefertige Funktion gibt es dafür nicht. Du musst also selbst alle Zellen der Spalte(n) durchlaufen und ColWidths[] entsprechend setzen.

Ungetestet:
Delphi-Quellcode:
for Col := 0 to Grid.ColCount - 1 do
begin
  len := 20; // min. Breite
  for Row := 0 to Grid.RowCount - 1 do
  begin
    if len < Grid.Canvas.TextWidth(Grid.Cells[Row, Col]) then
      len := Grid.Canvas.TextWidth(Grid.Cells[Row, Col]);
  end;
  Grid.ColWidths[Col] := len;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Gummibärchen
Gummibärchen

Registriert seit: 17. Feb 2003
5 Beiträge
 
Delphi 5 Enterprise
 
#3
  Alt 17. Feb 2003, 15:10
Besten Dank, habe den Code überarbeitet und es läuft

Delphi-Quellcode:
  for Col := 0 to Grid.ColCount - 1 do
  begin
    len2 := 0;
    len := 20; // min. Breite
    for Row := 0 to Grid.RowCount - 1 do
    begin
      if len < Grid.Canvas.TextWidth(Grid.Cells[Col, Row]) then
      len := Grid.Canvas.TextWidth(Grid.Cells[Col, Row]);
      if len2 < len then
        len2 := len;
    end;
    Grid.ColWidths[Col] := len2;
  end;
L@st Minute reicht doch!
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 17. Feb 2003, 15:38
Eventuell ist es jetzt auch noch sinnvol beim hinzufügen eines Eintrages zu überpüfen ob dieser breiter ist als die aktuelle Breite der Spalte und wenn ja die Spaltenbreit gleich zu setzen.

Dann muss nicht jedesmal das gesamte Grid durchlaufen werden.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Gummibärchen
Gummibärchen

Registriert seit: 17. Feb 2003
5 Beiträge
 
Delphi 5 Enterprise
 
#5
  Alt 17. Feb 2003, 15:49
Stimmt, kann man noch einbauen. In meinem Fall wird das Grid nur einmal aus der Datenbank gefüllt, dafür reicht es
*grübel* mal schauen...
L@st Minute reicht doch!
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#6
  Alt 17. Feb 2003, 22:22
Hallo Leute,

ich habe das Ganze mal noch auf ein DBGrid umgesetzt (und damit ein vorhandene Prozedur um 70 % geschrumpft).

Delphi-Quellcode:
procedure TFBrowser.Tabellenspaltenminimieren1Click(Sender: TObject);
const
  chkanz = 300; // CHecK ANZahl von Datensätzen zur Beschränkung des Zeitaufwandes
  maxfldanz = 100; // max. Anz. der Felder, die betrachtet werden
  minwidth = 20; // min. Breite
  korrwidth = 10; // Korr. der Spaltenbreite wg. besserer Optik
var
  i,
  fcnt, // Field-Count
  aktrec,
  len : integer;
  farr : array[0..maxfldanz] of integer;
begin
  // Tab1 - TTable
  if not Tab1.Active then exit;
  Tab1.DisableControls;

  aktrec := Tab1.RecNo;
  zel := 0;
  for i:=0 to maxfldanz do farr[i] := minwidth;

  Tab1.First;
  fcnt := Tab1.FieldCount;
  if fcnt > maxfldanz then fcnt := maxfldanz;
  while (not Tab1.EOF) and (zel < chkanz) do begin
    for i:=0 to fcnt-1 do begin
      len := dbg1.Canvas.TextWidth(dbg1.Columns.Grid.Fields[i].Text);
      if len > farr[i] then farr[i] := len;
    end;
    Tab1.Next;
    inc(zel);
  end;
  // dbg1 - TDBGrid
  for i := 0 to fcnt-1 do dbg1.Columns[i].Width := farr[i] + korrwidth;

  Tab1.RecNo := aktrec;
  Tab1.EnableControls;
end;
Statt zel könnte man sicher auch RecNo verwenden, habe aber nicht getestet, ob's auch bei gefilterten Tabellen noch funktioniert.

mfg
eddy
  Mit Zitat antworten Zitat
Zaubermaus

Registriert seit: 27. Mär 2003
2 Beiträge
 
Delphi 6 Enterprise
 
#7
  Alt 18. Jun 2003, 13:31
Hallöchen,

habe in einem Formular ein StringGrid, welches vom Hauptformular aus mit Daten gefüllt und anschließend angezeigt wird.
Der Code zum Anpassen von ColWidth (siehe oben) funktioniert an sich wunderbar - aber immer erst beim zweiten Öffnen des entsprechenden Formulars!

Was kann ich tun, damit die Ansicht schon beim ersten Aufruf stimmt?

die Zaubermaus
  Mit Zitat antworten Zitat
Benutzerbild von Armageddon
Armageddon

Registriert seit: 30. Mär 2003
Ort: Wilflingen
158 Beiträge
 
#8

Re: StringGrid: ColWidth nach längsten Eintrag ausrichten

  Alt 5. Nov 2003, 18:20
Hi Leute,

würde das Beispiel auch gern verwenden. Ich hab aber keinen blaßen Schimmmer in welches Ereignis ich es einfügen muß damit es funktioniert! Und vielleicht kann auch noch einer erklären welche Variablen und wo vor allem ich setzen muß!


Danke Arma.
  Mit Zitat antworten Zitat
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 04:43 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