Главная страница
    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.009 c
1-1120651308
chili
2005-07-06 16:01
2005.07.25
Помоги разобраться как Outlook Express создает POP3 Password2


14-1120497176
Aleksandr_SB
2005-07-04 21:12
2005.07.25
Книги по Microsoft SQL Server 2000


1-1120631191
sergg
2005-07-06 10:26
2005.07.25
Ввод пароля "звездочками"


14-1120151136
Michael5
2005-06-30 21:05
2005.07.25
Можно ли прочитать таблицу данных,которую создает некая программа


14-1120067643
Starcom
2005-06-29 21:54
2005.07.25
Delphi 2005





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский