![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Медленная прорисовка визуальных компонент в 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 объектов это жестко. Рисуйте на канве.