![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разбираемся с перерисовкой. [D7]
RUNaum © (2006-05-18 13:55:00)Ситуация следующая.
Есть панель, которая перемещается мышью (спасибо за помощь Мастерам в ветке http://www.delphimaster.ru/cgi-bin/forum.pl?id=1147543175&n=0). Если на панели нету контента, то все отлично, никаких морганий, движение плавное.
Как только на панели появляется контент - при движении периодически становится видно панель, лежащую под контентом (она серого цвета и сразу заметны серые "вспышки"). Как можно избавиться от этого эффекта?
з.ы. контент third-party разработчика, информация в нем динамически изменяется.
RUNaum (2006-05-19 22:31:00) [1]ОГРОМНОЕ СПАСИБО!!! Все как надо )
Loginov Dmitry (2006-05-19 20:59:00) [2]Попробуйте поиграться со свойством FullRepaint панели.
REA (2006-05-19 11:10:00) [3]Такое может наблюдаться, если на форме под панелью лежат компоненты не имеющие оконных Handle-ов, которые долго перерисовываются (например картинки). На момент перетаскивания желательно как то оптимизировать их отрисовку или вообще скрыть. (При этом Panel1.DoubleBuffered только усугубляет ситуацию.)
RUNaum (2006-05-18 17:29:00) [4]Да, использую последнюю твою версию =) Немного исправленную, но все же. Там Ofs.X:=-1 не в том месте стоял, а так вариант отличный просто.
REA (2006-05-18 17:28:00) [5]А учел, что я писал про SetWindowPos?
RUNaum (2006-05-18 17:03:00) [6]даже не знаю что сказать =(
TNRPanel = class(TPanel)
protected
procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND;
end;
procedure TNRPanel.WMEraseBkgnd(var Msg: TWMEraseBkgnd);
begin
Msg.Result:=1;
end;
то же самое. динамически изменяющийся контент такое ощущение что спорит с панелью... вспышки при перемещении остались ( буду ломать голову дальше. может у кого есть еще идеи?
RUNaum (2006-05-18 16:54:00) [7]ок, спасибо, щас попробую
Джо (2006-05-18 16:51:00) [8]Ну да, конечно, вернуть 1.
RUNaum (2006-05-18 16:50:00) [9]Именно ничего или что-то вернуть в Message.Result? Я справку почитал, не допонял как лучше ) либо заглушкой, либо 1 вернуть...
Джо (2006-05-18 16:47:00) [10]Напиши своего наследника панели. Перекрывай в нем WM_ERASEBKGND и ничего в нем не делай. Вроде в таком духе.
RUNaum (2006-05-18 16:44:00) [11]Да. Первым делом его включил (
Kolan (2006-05-18 15:34:00) [12]DoubleBufferd := True?