Главная страница
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.48 MB
Время: 0.038 c
14-1120535831
Starcom
2005-07-05 07:57
2005.07.25
Что такое заголовочные файлы.


1-1120823081
sergg
2005-07-08 15:44
2005.07.25
Не получается сделать невидимым TabSheet от PageControl


1-1120926660
Michael5
2005-07-09 20:31
2005.07.25
Подскажите, как код разнести по разным файлам (Unit ам)?


3-1118400626
Пономарев Андрей
2005-06-10 14:50
2005.07.25
Cannot transliterate character between character sets...


10-1097579913
ИМХО
2004-10-12 15:18
2005.07.25
Снова о OLE-автоматизации Ворда