Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
1-1120840895
A013B
2005-07-08 20:41
2005.07.25
Две формы.


14-1119806609
Гарри Поттер
2005-06-26 21:23
2005.07.25
Надо ли вводить сухой закон?


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


1-1120731491
Kyro
2005-07-07 14:18
2005.07.25
Точностьтипа риал


4-1117348054
NikNet
2005-05-29 10:27
2005.07.25
Как целую DWORD значение разделить на BYTE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский