AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Spaltenbreite automatisch bestimmen
Thema durchsuchen
Ansicht
Themen-Optionen

Spaltenbreite automatisch bestimmen

Ein Thema von superstar025 · begonnen am 14. Jan 2005 · letzter Beitrag vom 15. Jan 2005
Antwort Antwort
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#1

Re: Spaltenbreite automatisch bestimmen

  Alt 15. Jan 2005, 23:17
Hallo superstar025,

ich habe das so gelöst:
Code:
procedure MinRow(dbg : TJvDBGrid);
const
  chkanz = 300; // CHecK ANZahl von Datensätzen zur Beschränkung des Zeitaufwandes
  maxfldanz = 50; // max. Anz. der Felder, die betrachtet werden
  minwidth = 20; // min. Breite
  korrwidth = 10; //10; // Korr. der Spaltenbreite wg. besserer Optik
var
  i,
  fcnt,  // Field-Count
  aktrec,
  zel,
  len : integer;
  farr : array[0..maxfldanz] of integer;
begin
  // Tab1 - TTable
  // Tab ersetzen durch (TAdsTable((dbg as TJvgDBGrid).DataSource.DataSet)
  // dbg ersetzen durch (dbg as TJvgDBGrid)
  if TAdsTable(dbg.DataSource.DataSet).Active then begin
    TAdsTable(dbg.DataSource.DataSet).DisableControls;

    aktrec := TAdsTable(dbg.DataSource.DataSet).RecNo;
    for i:=0 to maxfldanz do farr[i] := minwidth;

    TAdsTable(dbg.DataSource.DataSet).First;
    fcnt := TAdsTable(dbg.DataSource.DataSet).FieldCount;
    if fcnt > maxfldanz then fcnt := maxfldanz;
    if fcnt > dbg.Columns.Count then fcnt := dbg.Columns.Count;
    zel := 0;
    while (not TAdsTable(dbg.DataSource.DataSet).EOF) and (zel < chkanz) do begin
      for i:=0 to fcnt-1 do begin
        len := TrueFontWidth(dbg.Font, dbg.Columns.Grid.Fields[i].Text);
        if len > farr[i]
          then farr[i] := len;
      end;
      TAdsTable(dbg.DataSource.DataSet).Next;
      inc(zel);
    end;
    for i := 0 to fcnt-1 do begin
      try
        dbg.Columns[i].Width := farr[i] + korrwidth;
      except
        dbg.Columns[i].Width := dbg.Columns[i].Width;
      end;
    end;
    TAdsTable(dbg.DataSource.DataSet).RecNo := aktrec;
    TAdsTable(dbg.DataSource.DataSet).EnableControls;
  end;
end;   // of MinRow


// uses Graphics, Windows
function TrueFontWidth(fnt: TFont; const text:string): Integer;
var
   dc: hdc;   //uses Windows
   tsize : Windows.TSize;
begin
   dc := GetDC(0);
   SelectObject(DC, fnt.Handle);
   GetTextExtentPoint32(dc, PChar(text), Length(text), tsize);
   ReleaseDC(0, DC);
   Result := tsize.cx;
end;
Ist vielleicht nicht ganz perfekt, funktioniert aber trotzdem.
Getestet ist es mit Paradox- und dBase-Datenbanken sowie ADS (Advantage Database Server).
Diese Fassung ist für das Jedi-DBGrid und ADS ausgelegt.
Die vorige Fassung DBGrid Column autosize hatte noch 2 Übergabeparameter (Tab : TTable; dbg : TDBGrid), aber da ich wegen der nicht mehr aktuallisierten BDE von Paradox- auf ADS-Datenbanken umsteige, habe ich beim Umschreiben auf die obige Version für TAdsTable einen Parameter eliminiert.

mfg
eddy
  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 22:14 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