Einzelnen Beitrag anzeigen

[TP]Hawk274
(Gast)

n/a Beiträge
 
#1

unterschiedliche Spaltenbreite eines StringGrid

  Alt 17. Dez 2003, 11:23
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 }
  Mit Zitat antworten Zitat