Главная страница
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.054 c
14-1120497176
Aleksandr_SB
2005-07-04 21:12
2005.07.25
Книги по Microsoft SQL Server 2000


4-1116486705
JB
2005-05-19 11:11
2005.07.25
Список процессов


3-1118343047
Taurus
2005-06-09 22:50
2005.07.25
Данные из БД в WORD


1-1118160195
Дмитрий_05
2005-06-07 20:03
2005.07.25
Изменение размера формы мышкой


3-1118315755
stelius
2005-06-09 15:15
2005.07.25
SQL запрос без раздела WHERE