Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.25;
Скачать: CL | DM;

Вниз

TDrawGrid   Найти похожие ветки 

 
Бу   (2005-07-06 06:11) [0]

Можно ли сделать так чтобы TDrawGrid автоматически изменял ширину колонок


 
ЮЮ ©   (2005-07-06 06:34) [1]

Элементарно. Т.к. вывод информации выводится в обработчике OnDrawCell, то в нём же и рассчитать, хватает ли ARect для правильного вывода информации и, если нет, увеличить ColWidths[ACol].

Если пользователь не меняет ширину колонок, то рассчёт и установку нужной ширины можно сделать единожды, после иницииализации объектов, рисуемых в гриде


 
-=XP=- ©   (2005-07-06 07:10) [2]

Автоматическую корректировку ширины любой колонки следовало бы делать в момент изменения размеров самого контрола TDrawGrid, а так же при изменении размеров прочих колонок (или запретить его Cледует перекрывать Protected методы, в зависимости от того, что конкретно Вы хотите сделать:

procedure TCustomGrid.SizeChanged(OldColCount, OldRowCount: Longint); dynamic;
procedure TCustomGrid.ColWidthsChanged; dynamic;
procedure TCustomGrid.DeleteColumn(ACol: Longint); virtual;
procedure TCustomGrid.AdjustSize(Index, Amount: Longint; Rows: Boolean); reintroduce; dynamic;


Про AdjustSize советую прочитать подробнее - ее поведение не только reintroduced, но и redefined.


 
AbrosimovA   (2005-07-06 10:57) [3]

А я это делал в OnDrawCell методом, похожим на алгоритм сортировки, т.е. в процессе прорисовки строк грида определяется длина выводимого текста Grid.Canvas.TextWidth(). Если длина текста больше какого-то начального значения, то начальное значение меняем на наибольшее, одновременно меняем ширину колонки. В конце получаем наибольшее значение ширины. Возможно не самый оптимальный вариант, но работает.


 
-=XP=- ©   (2005-07-06 11:07) [4]

в OnDrawCell ... одновременно меняем ширину колонки

Вопрос: Интересно, что происходит после изменения ширины колонки?

Ответ (превращающий предыдущий вопрос в риторический): А происходит, среди прочего, Grid.Invaidate, в результате чего производится перерисовка, вызывающая OnDrawCell. И так - несколько раз. Правда, за счет того, что сообщения WM_PAINT в очереди "сливаются" в одно, это не так заметно. Но, на самом деле, это - действительно, не самый оптимальный вариант.

Резюме: Выполнять действия надо там, где это предусмотрено разработчиком компонента. Тем более, что Borland это предусмотрел. Партизанщина - это иногда полезно, но зачем она нужна, если есть заранее подготовленные пути выполнения тех или иных действий?


 
AbrosimovA   (2005-07-06 11:16) [5]


> -=XP=- ©   (06.07.05 11:07) [4]


А не будете столь любезны рассказать о
> заранее подготовленные пути выполнения



Страницы: 1 вся ветка

Текущий архив: 2005.07.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.037 c
1-1120764900
Lexa
2005-07-07 23:35
2005.07.25
Подвисание во время цикла


14-1120415546
P.N.P.
2005-07-03 22:32
2005.07.25
Лицензионная музыка?


14-1120483185
ПЛОВ
2005-07-04 17:19
2005.07.25
Что делать ума не приложу!


1-1120544996
vitge
2005-07-05 10:29
2005.07.25
Нужно определить количество часов заключенных в ТDATETIME


14-1118829505
ANB
2005-06-15 13:58
2005.07.25
Зачем нужен DataSource ?