Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.02;
Скачать: CL | DM;

Вниз

DoubleBuffered:=true и ThemeServices : палка о двух концах ?   Найти похожие ветки 

 
pirat ©   (2004-01-19 19:32) [0]

Действие происходит под XP Pro.
Наблюдается стабильный глюк: неправильная перерисовка фона контролов (TButton, TCheckBox и т.д.) при условии что Form.DoubleBuffered := true и на форме лежит экземпляр TXPManifest. Свойство DoubleBuffered крайне необходимо для устранения всяческих морганий при перерисовке формы ( для контролов, например TPanel ето тоже надо включать если размеры привязаны к размерам формы). Напрмер если положить TButton на формы то вокруг нее будет наблюдаться черная окантовка (кусок фона).

В Controls.pas есть очень интересный кусок :

procedure TWinControl.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
with ThemeServices do
if ThemesEnabled and Assigned(Parent) and (csParentBackground in FControlStyle) then
begin
{ Get the parent to draw its background into the control"s background. }
DrawParentBackground(Handle, Message.DC, nil, False);
end
else
begin
{ Only erase background if we"re not doublebuffering or painting to memory. }
if not FDoubleBuffered or
(TMessage(Message).wParam = TMessage(Message).lParam) then
FillRect(Message.DC, ClientRect, FBrush.Handle);

end;

Message.Result := 1;
end;

То есть так прямо и сказано что в режиме двойной буферизации делать нифига не будем! Если закомментировать if, то есть оставить FillRect без условия то все черные окантовки (у Button) и черный фон ( у CheckBox ) исчезают и все рисуется правильно.

Но дело в том что это не единственное (похоже) место, где надо править, так как ели на форме лежит TXPManifest форма начисто игнорирует DoubleBuffered := true. Кто с этим сталкивался ? А может борландцы уже патч давно выпустили ??


 
pirat ©   (2004-01-20 14:08) [1]

ну и чего все молчат, неужели любите мерцающие контролы??



Страницы: 1 вся ветка

Текущий архив: 2004.02.02;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
3-2043
Niker
2004-01-05 17:49
2004.02.02
Как осуществить быстрый поиск с неплным запросом по БД?


3-1955
WG
2004-01-08 16:57
2004.02.02
Как сохранить текст из BLOB в файл ?


14-2352
Soft
2004-01-09 00:44
2004.02.02
Ящик для идиотов. Защита против зомбирования.


7-2386
Duk_777
2003-11-08 21:31
2004.02.02
Как отключить показ программы при нажатии alt+tab


4-2414
tim
2003-11-25 13:43
2004.02.02
поймать сообщение в сервисе