Ich möchte die Breite aller Spalten eines StringGrids anpassen, wodurch kein bzw. nur ein kleiner Streifen auf der rechten Seite des StringGrids zu sehen ist.
Ich habe mir jetzt folgende procedure geschrieben die beschriebenes tut. Allerdings habe ich nun einen horizentale Scrollbar. Das wollte ich nun wieder auch nicht. Irgendwie steckt noch der Wurm in der procedure. Wahrscheinlich muss ich auch noch den Rahmen der Zellen und die Breite der Linien, die die Zellen des Gitters trennen. Hatte aber bereits verssucht GridLineWidth abzuziehen. Allerdings hatte ich dann wieder ein kleinen weißen Rand von ca. 10 bis 15px.
Code:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
...
iMinColWidth := 50;
...
end.
...
procedure TfrmMain.SetGridColumnWidths(Grid: TStringGrid);
var
iCol, iRow: integer;
iMaxLen, iSize: integer;
iColLen: integer;
begin
with Grid do begin
iColLen := 0;
for iCol := 0 to Pred(ColCount) do begin
iMaxLen := iMinColWidth;
for iRow := 0 to Pred(RowCount) do begin
if Canvas.TextWidth(Cells[ iCol, iRow ]) > iMaxLen then
iMaxLen := Canvas.TextWidth(Cells[ iCol, iRow ]);
end;
ColWidths[ iCol ] := iMaxLen;
iColLen := iColLen + ColWidths[ iCol ]
end;
if (Grid.Width - iColLen) > 0 then begin
iSize := ((Grid.Width - iColLen) div ColCount);
// iSize := ((Grid.Width - iColLen) div ColCount) - (GridLineWidth*ColCount);
for iCol := 0 to Pred(ColCount) do begin
ColWidths[ iCol ] := (ColWidths[ iCol ] + iSize);
end;
end;
end;
end; { SetGridColumnWidths }