Einzelnen Beitrag anzeigen

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