Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DBGrid anpassen der Weite der Spalte automatisch (https://www.delphipraxis.net/210653-dbgrid-anpassen-der-weite-der-spalte-automatisch.html)

wschrabi 23. Mai 2022 06:17

DBGrid anpassen der Weite der Spalte automatisch
 
Hallo Leute,
ich habe hier diesen Code von www.thoughtco.com/auto-fix-dbgrid-column-widths-4077417 der ja ein wenig bugg ist.
habe es vielleicht richtig ausgebessert, doch es klappt immer noch nicht. Meine Spalten werden nicht mit MAX size der DATEN pro Spalte automatisch angepasst.
Delphi-Quellcode:
procedure tform1.FixDBGridColumnsWidth(const DBGrid: TDBGrid);
var i : integer; TotWidth : integer; VarWidth : integer; ResizableColumnCount : integer; AColumn : TColumn;
begin//total width of all columns before resize
 TotWidth := 0;
 //how to divide any extra space in the grid
 VarWidth := 0;
 //how many columns need to be auto-resized
 ResizableColumnCount := 0;
 for i := 0 to -1 + DBGrid.Columns.Count do begin
 TotWidth := TotWidth + DBGrid.Columns[i].Width;
 if DBGrid.Columns[i].Field.Tag <>0 then
 Inc(ResizableColumnCount);
 end;
 //add 1px for the column separator lineif dgColLines in DBGrid.Options then
 TotWidth := TotWidth + DBGrid.Columns.Count;
 //add indicator column widthif dgIndicator in DBGrid.Options then
 TotWidth := TotWidth + IndicatorWidth;
 //width vale "left"
 VarWidth := DBGrid.ClientWidth - TotWidth;
 //Equally distribute VarWidth
 //to all auto-resizable columnsif ResizableColumnCount > 0 then
 VarWidth := varWidth div ResizableColumnCount;
 for i := 0 to -1 + DBGrid.Columns.Count do begin
 AColumn := DBGrid.Columns[i];
 if AColumn.Field.Tag <> 0 then begin
 AColumn.Width := AColumn.Width + VarWidth;
 if AColumn.Width <> 0 then
 AColumn.Width := AColumn.Field.Tag;
 end;
 end;
end; (*FixDBGridColumnsWidth*)
Weiß wer Rat wie man sowas richtig macht? Denke das Problem ist schon öfters gelöst worden. Habe Delphi Berlin.
DANKE
mfg
ws

KarstenK 23. Mai 2022 07:08

AW: DBGrid anpassen der Weite der Spalte automatisch
 
if AColumn.Width <> 0 then
AColumn.Width := AColumn.Field.Tag;

Erschliesst sich mir nicht. Wie ist denn das genaue Fehlerbild?

Wie wird Tag verwendet?
TAG=0 die Breite wird nicht geändert?
oder
TAG enthält eine feste Breite?

wschrabi 23. Mai 2022 09:49

AW: DBGrid anpassen der Weite der Spalte automatisch
 
alles columns haben alles die gleiche breite.
auf der www site steht:

Zitat:

Before you begin, in the OnCreate event for the Form object containing the DBGrid, specify what columns need to be auto-resized by assigning a non-zero value for the Tag property of the corresponding TField object.

Renate Schaaf 23. Mai 2022 23:11

AW: DBGrid anpassen der Weite der Spalte automatisch
 
Ich mache nichts mit Daten, aber da sind ein paar Stellen, wo dir die Kopie von der website mit dem code fehlgeschlagen ist, aufgrund der schlunzigen Formatierung da:

An einigen Stellen ist dir code in den Kommentar gerutscht.
Die letzten beiden Zeilen sollten wahrscheinlich sein
Delphi-Quellcode:
if AColumn.Width <= 0 then
 AColumn.Width := AColumn.Field.Tag;
denn in dem .Tag sollte doch die Minimalweite stehen.

Hab' ich nicht getestet, denn wie gesagt ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 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