Показать сообщение отдельно
  #6  
Старый 16.09.2012, 12:49
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от ART
Ширина в зависимости от ширины содержимого
К сожалению у стандартного DBGrid'а нет такого свойства.
Так как DBGrid автоматически очень неудачно делает ширину, то я когда-то написал процедурку выравнивающую колонки по содержимому и в нужных местах её использую (обычно сразу после открытия таблицы):
Код:
procedure CalcDBGridColumnWidths(DBGrid: TDBGrid);
var
  DataSet: TDataSet;
  OldRecNo: Integer;
  MaxWidths: array of Integer;
  i, Width: Integer;
begin
  if (DBGrid = nil) or (DBGrid.DataSource = nil) or (DBGrid.DataSource.DataSet = nil) then Exit;
  DataSet := DBGrid.DataSource.DataSet;

  OldRecNo := DataSet.RecNo;
  DataSet.DisableControls;
  try
    SetLength(MaxWidths, DBGrid.Columns.Count);
    for i := 0 to DBGrid.Columns.Count - 1 do
    begin
      MaxWidths[i] := DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Title.Caption) + 4;
    end;

    DataSet.First;
    while not DataSet.Eof do
    begin
      for i := 0 to DBGrid.Columns.Count - 1 do
      begin
        Width := DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Field.DisplayText) + 4;
        if Width > MaxWidths[i] then MaxWidths[i] := Width;
      end;

      DataSet.Next;
    end;

    for i := 0 to DBGrid.Columns.Count - 1 do
    begin
      DBGrid.Columns[i].Width := MaxWidths[i];
    end;

  finally
    DataSet.RecNo := OldRecNo;
    DataSet.EnableControls;
  end;
end;
Только учти, что она при вычислении ширины колонок проходится по всей таблице, что может занять значительное время если таблица очень большая.
Ответить с цитированием