Nur so das es auch komplett und fertig ist habe ich das mal überarbeitet und eine finale Version eingestellt. Es Passt zwar die Spalten nicht optimal in die Tabellenbreite aber es überarbeitet die Breite je nach Breite der Tabelle. Man könnte ggf noch die Spaltenbreiten optimal auf die Tabellenbreite anpassen. Aber das so hat mir gereicht.
Grüße Joe
Delphi-Quellcode:
Procedure ResizeGrid (aGrid : Tstringgrid);
Var
Sgn,S, I, SumW, D, D0, Dx : Integer;
Begin
// Summe aller Spaltenbreiten ermitteln
SumW := 0;
For i:=0 To aGrid.ColCount - 1 do
SumW := SumW + aGrid.ColWidths[i];
// D pixel sind zu verteilen
D := aGrid.Width - SumW;
If D >= 0 Then S:= 1 Else S:= -1;
D0 := D;
For i:=0 To aGrid.Colcount - 1 do Begin
Dx := D0 * aGrid.ColWidths[i] div SumW;
// Dx ist der Anzeil für Spalte #i, aber mindestens ein Pixel
If Dx = 0 Then Dx := S;
// und höchstens die noch verbleibenden Pixel.
If Abs(Dx) > Abs(D) Then Dx := D;
//Breite der Spalte #i anpassen
aGrid.ColWidths[i] := aGrid.ColWidths[i] + Dx;
// und verbleibende Pixel berechnen
D := D - Dx;
End;
End;