Ich nutze folgenden Code um die Spaltenbreite meines Stringgrids anzupassen:
Delphi-Quellcode:
procedure TForm.GRDPaint(Sender: TObject; Canvas: TCanvas;
const [Ref] ARect: TRectF);
var
i: integer;
begin
GRD.BeginUpdate;
for i := 0 to GRD.ColumnCount - 1 do
AutoSizeCol(GRD, i);
GRD.EndUpdate;
end;
procedure TForm.AutoSizeCol(Grid: TStringGrid; Column: integer);
var
i, W, WMax: integer;
begin
WMax := 0;
for i := 1 to (Grid.RowCount - 1) do begin
W := round(Grid.Canvas.TextWidth(Grid.Cells[Column, i]));
if W > WMax then
WMax := W;
end;
if WMax*2 > Grid.Columns[Column].Width then
begin
Grid.Columns[Column].Width := WMax*2;
end;
end;
Dies Funktioniert auch wunderbar, wenn in diesem Grid denn mehr als ein Eintrag vorhanden ist. Ist dort nur einer Vorhanden, wird stumpf die Standardbreite des Grids verwendet.
Weiss einer woran das liegt, oder besser noch einen Lösungsansatz?
Oder hat einer eine Bessere Idee wie man das AutoSize des Stringgrids ausführen kann?