Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как правильно выравнить колонки в DBGridEh


Автор: Delphist 4.4.2007, 17:58
Есть DBGridEh AutoFitColWidth колонок которого = True; Встала задала, чтобы 1-ая колонка имела, например 180 пикселей, а остальные колонки по ширине были бы равны между собой, при все этом AutoFitColWidth всех колонок должен быть = 180. Вопрос как это выравнивание осуществить порграммно? 

Автор: Akella 6.4.2007, 17:14
используй FrozenCols

Автор: AriX 7.4.2007, 21:52
Код
procedure TFormMain.FormCreate(Sender: TObject);
var
  i, WidthForCols, ColWidth, LastColWidth: Integer;
begin
  // Первая колонка
  DBGridEh1.Columns.Items[0].Width := 20;
  // Общая оставшееся место для остальных колонок (-40 - чтобы учесть скроллбар)
  WidthForCols := DBGridEh1.Width - DBGridEh1.Columns.Items[0].Width - 40;
  // Ширина каждой колонки, кроме последней
  ColWidth := WidthForCols div (DBGridEh1.Columns.Count - 1);
  // К последней еще прибавляем остаток от округления
  LastColWidth := ColWidth + (WidthForCols mod (DBGridEh1.Columns.Count - 1));
  // Устанавливаем ширину для колонок от 2-ой до предпоследней
  for i := 1 to DBGridEh1.Columns.Count - 2 do
    DBGridEh1.Columns.Items[i].Width := ColWidth;
  // Теперь последняя колонка
  DBGridEh1.Columns.Items[DBGridEh1.Columns.Count - 1].Width := LastColWidth;
  // И нужное свойство
  DBGridEh1.AutoFitColWidths := True;
end;

Только в дизайнере свойство AutoFitColWidths выключи.
Вообще очень странно, но работает, так как надо smile Т.е. так, как я понял, как нужно...
Фишка в том, что итоговая ширина колонок в итоге не равна той, которую мы делаем при создании формы... Но если убрать изменение ширины этих колонок из кода, то будут глюки.

Akella
FrozenCols немного не то - это количество колонок слева, которые всегда должны оставаться на виду при горизонтальном скролле.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)