![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
CrazyDaver |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.2.2011 Репутация: нет Всего: нет |
В каждой ячейке DrawGrid'а рисуется определённый bitmap. При скроллинге таблицы заметно мерцает первый или последний столбец или строка, в зависимости от направления скроллинга.
Каждый bitmap состоит из 2 или 3 слоёв bitmap'ов с альфа-каналами. Рисую всё в памяти с помощью BitBlt и TransparentBlt (копирую нужные области из более крупных bitmap'ов), потом вывожу BitBlt'ом или StretchBlt'том готовый bitmap на canvas DrawGrid'а. Как избавится от мерцания, и, по возможности, ускорить отрисовку? Есть ещё одна проблема: Раньше при перекрытии формы другим окном часть canvas'а стиралась. Потом прописал в OnPaint перерисовку, и всё стало нормально. Теперь, когда убираю перерисовку, то окно всё равно обновляется. В чём дело? |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
Попробуй рисовать в событии DrawGrid'а - OnDrawCell.
для ускорения храни многослойную результирующую картинку и выводи ее н а канву в OnDrawCell. -------------------- Кольцов Виктор Владимирович |
|||
|
||||
CrazyDaver |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.2.2011 Репутация: нет Всего: нет |
Я в OnDrawCell и рисую, и вывожу на canvas там же.
С хранением сложнее, т.к. накладываются слои в зависимости от параметра, который контролирует пользователь (могут быть наложены все слои, только один или два любых слоя), т.е. для всех состояний нужно от трёх (2 слоя) до семи (3 слоя) огромных (около 1000х1000 точек) bitmap'ов. |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
Что касается ускорения - суть такакя. для каждой ячейки создаем Битмап (Хранилище) при смене параметров пользователем, рисуешь многослойную картинку ,не на Canvas DrawGrid'а! а на Хранилище, и вызываем DrawGrid1.Invalidate; в событии OnDrawCell просто рисуешь битмап хранилище на Canvas DrawGrid'а. Убрать мерцание можно попробовать с помощью
или http://www.delphisources.ru/pages/faq/base..._twinkling.html Это сообщение отредактировал(а) Frees - 28.4.2011, 12:43 -------------------- Кольцов Виктор Владимирович |
|||
|
||||
CrazyDaver |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.2.2011 Репутация: нет Всего: нет |
Уже пробовал, не помогает. С хранилищем можно попробовать. А возможно ускорить само рисование в памяти, накладывание слоёв, например, scanline'ом каким-нибудь или чем-то ещё? |
|||
|
||||
CrazyDaver |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.2.2011 Репутация: нет Всего: нет |
После того, как сделал буферный bitmap для всей таблицы, и в OnDrawCell стал копировать из него нужную область, мерцание стало немного поменьше. После DrawGrid.DoubleBuffered:=True заметного мерцание вообще не стало. Frees, спасибо за помощь! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |