| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Вопросы по DrawGrid |
| Автор: CrazyDaver 27.4.2011, 13:37 |
| В каждой ячейке DrawGrid'а рисуется определённый bitmap. При скроллинге таблицы заметно мерцает первый или последний столбец или строка, в зависимости от направления скроллинга. Каждый bitmap состоит из 2 или 3 слоёв bitmap'ов с альфа-каналами. Рисую всё в памяти с помощью BitBlt и TransparentBlt (копирую нужные области из более крупных bitmap'ов), потом вывожу BitBlt'ом или StretchBlt'том готовый bitmap на canvas DrawGrid'а. Как избавится от мерцания, и, по возможности, ускорить отрисовку? Есть ещё одна проблема: Раньше при перекрытии формы другим окном часть canvas'а стиралась. Потом прописал в OnPaint перерисовку, и всё стало нормально. Теперь, когда убираю перерисовку, то окно всё равно обновляется. В чём дело? |
| Автор: Frees 27.4.2011, 14:12 |
| Попробуй рисовать в событии DrawGrid'а - OnDrawCell. для ускорения храни многослойную результирующую картинку и выводи ее н а канву в OnDrawCell. |
| Автор: CrazyDaver 27.4.2011, 14:39 |
| Я в OnDrawCell и рисую, и вывожу на canvas там же. С хранением сложнее, т.к. накладываются слои в зависимости от параметра, который контролирует пользователь (могут быть наложены все слои, только один или два любых слоя), т.е. для всех состояний нужно от трёх (2 слоя) до семи (3 слоя) огромных (около 1000х1000 точек) bitmap'ов. |
| Автор: CrazyDaver 27.4.2011, 15:16 | ||
Уже пробовал, не помогает. С хранилищем можно попробовать. А возможно ускорить само рисование в памяти, накладывание слоёв, например, scanline'ом каким-нибудь или чем-то ещё? |
| Автор: CrazyDaver 28.4.2011, 12:17 | ||
После того, как сделал буферный bitmap для всей таблицы, и в OnDrawCell стал копировать из него нужную область, мерцание стало немного поменьше. После DrawGrid.DoubleBuffered:=True заметного мерцание вообще не стало. Frees, спасибо за помощь! |