...eine StringGrid-Spalte der Textbreite anpassen?

Autor: Thomas Stutz

Kategorie: VCL

{1.}

procedure SetGridColumnWidths(Grid: TStringGrid;
  const Columns: array of Integer);
{
  When you double-Click on a Column-Header the Column
  autosizes to fit its content

  Bei Doppelklick auf eine fixierte Spalte passt sich
  die Spaltenbreite der Textgrösse an
}

  
procedure AutoSizeGridColumn(Grid: TStringGrid; column, min, max: Integer);
    { Set for max and min some minimal/maximial Values}
    { Bei max and min kann eine Minimal- resp. Maximalbreite angegeben werden}
  
var
    
i: Integer;
    temp: Integer;
    tempmax: Integer;
  begin
    
tempmax := 0;
    for i := 0 to (Grid.RowCount - 1) do
    begin
      
temp := Grid.Canvas.TextWidth(Grid.cells[column, i]);
      if temp > tempmax then tempmax := temp;
      if tempmax > max then
      begin
        
tempmax := max;
        break;
      end;
    end;
    if tempmax < min then tempmax := min;
    Grid.ColWidths[column] := tempmax + Grid.GridLineWidth + 3;
  end;

  procedure TForm1.StringGrid1DblClick(Sender: TObject);
  var
    
P: TPoint;
    iColumn, iRow: Longint;
  begin
    
GetCursorPos(P);
    with StringGrid1 do
    begin
      
P := ScreenToClient(P);
      MouseToCell(P.X, P.Y, iColumn, iRow);
      if P.Y < DefaultRowHeight then
        
AutoSizeGridColumn(StringGrid1, iColumn, 40, 100);
    end;
  end;

  {************************************************}

  {2.}

  
procedure TForm1.Button1Click(Sender: TObject);
  { by P. Below }
  
const
    
DEFBORDER = 8;
  var
    
max, temp, i, n: Integer;
  begin
    with 
Grid do
    begin
      
Canvas.Font := Font;
      for n := Low(Columns) to High(Columns) do
      begin
        
max := 0;
        for i := 0 to RowCount - 1 do
        begin
          
temp := Canvas.TextWidth(Cells[Columns[n], i]) + DEFBORDER;
          if temp > max then
            
max := temp;
        end{ For }
        
if max > 0 then
          
ColWidths[Columns[n]] := max;
      end{ For }
    
end{ With }
  
end{SetGridColumnWidths  }

 

printed from
www.swissdelphicenter.ch
developers knowledge base