Форум: "Основная";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c