Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Медленная прорисовка визуальных компонент в Run-Time [XP]


sergf28 ©   (2011-03-24 17:24:00) 

WinXP, Delphi 2010
Intel Core I3, RAM 3Gb

есть задача по визуализации полей с растениями на питомнике.
каждому растению соответсвует jvSpeedButton (с TPanel результат тот же).
Массив кнопок создается в run-time.
на небольших полях до 700-800 растений все отрисовывается достаточно быстро.  На полях где растений (кнопок) более 3000 отрисовка начинает занимать 7-8 минут (обращения к БД отключены)т.е. тормозит именно отрисовка.
Приичем где то до полутора тысяч элементов все идет достаточно быстро, а потом визуально даже видно, что начинает прорисовываться почти в два раза медленее чем сначала.
запрещал обновление формы с помощью
Perform(WM_SETREDRAW, 1, 0)  и LockWindowUpdate(Form.Handle);
не помогло.
Может кто сталкивался уже с такой проблемой?


int64   (2011-03-25 12:51:00) [1]


> > TDrawGrid, как вариант.
> > 2000 ячеек с рисунком в каждой, отрисовывается мгновенно.
>
> >
>
> спасибо :)  пока это лучший вариант

Пока лучший вариант: [1]


han_malign   (2011-03-25 09:39:00) [2]


> пока это лучший вариант

- если что - обновление состояния ячейки - InvalidateCell()
  он protected, но достучаться можно...
если хочется по честному:
rect:= drawgrid.CellRect(c,r);
Windows.InvalidateRect(drawgrid.Handle, @rect, false);

З.Ы. Чтобы не заморачиваться с хранилищем можно сразу брать TStringGrid, состояние можно хранить в LongWord(Objects[c,r]) - и не думать об  Invalidate...


sergf28   (2011-03-24 18:45:00) [3]


> TDrawGrid, как вариант.
> 2000 ячеек с рисунком в каждой, отрисовывается мгновенно.
>

спасибо :)  пока это лучший вариант


RWolf   (2011-03-24 17:56:00) [4]

TDrawGrid, как вариант.
2000 ячеек с рисунком в каждой, отрисовывается мгновенно.


han_malign   (2011-03-24 17:53:00) [5]


> не хочется терять

- для ленивых - TPaintBox...


Dennis I. Komarov   (2011-03-24 17:44:00) [6]

Так не теряй, просто вычисляй координаты...


sergf28   (2011-03-24 17:39:00) [7]


> 3000 объектов это жестко. Рисуйте на канве.

канва не совсем то. не хочется терять OnClick и Hint


stas   (2011-03-24 17:30:00) [8]

3000 объектов это жестко. Рисуйте на канве.


Наверх

Титульная страница Поиск, карта сайта Написать письмо