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

Вниз

Как избавиться от навязчивого мерцания?   Найти похожие ветки 

 
andrew_f   (2002-09-10 16:53) [0]

Добрый день! Наваял свой компонент - потомок BitBtn, в котором происходит смена изображения при различных событиях мыши. Например, навожу на него, потом убираю - меняеся картинка. Внедрил свойство
FImageList: TImageList; , а процедура смены картинки выглядит так:
procedure TAFVActiveButton.SetImage(Index: integer);
begin
if not Assigned(FImageList) then exit;
if Index = -1 then exit;
if Index > FImageList.Count-1 then exit;
with Glyph do begin
Width := FImageList.Width;
Height := FImageList.Height;
Canvas.FillRect(Rect(0,0, Width, Height));
FImageList.GetBitmap(Index, Glyph);
end;
end;
При отрабоке события мерцает вся кнопка. Не знаю, можно ли как нибудь уменьшить это мерцание или хотя бы мерцал только сам Glyph ? Зарание спасибо.


 
Alx2 ©   (2002-09-10 16:57) [1]

Попробуй перехватить сообщение wm_erasebkgnd.


 
Dimka Maslov ©   (2002-09-10 16:59) [2]

В конструкторе поставь
DoubleBuffered := True


 
Вконец озверевший кадастрат   (2002-09-10 19:14) [3]

Дело все не в этом.
Вот, например, строка
>> Canvas.FillRect(Rect(0,0, Width, Height));

Наводит на размышления. То есть, я так понимаю, в метод TAFVActiveButton.SetImage вызывается в методе .Paint.
И значит, каждый раз при перерисовке компонента (принудительной или вызыванной системой) происходит (я так понимаю):

1. Очистка канваса (вот тут "мигает")
2. Перенос изображения из ImageList"а и т.п.

Короче, говоря, делается так:

Сначала все дело рисуется на канве временного битмэпа, потом (в самом конце)картинка с этого битмэпа переносится на твою канву.


...
var TempBmp: TBitmap;
...
try
TempBmp := TBitmap.Create;
With TempBmp.Canvas do
begin

/// тут делается все то, что нужно рисовать на твоей канве
/// можно и в твой метод вставить параметр, передающий
/// канву для рисования и передавать туда канву
/// TempBmp.Canvas

end;
// а теперь окончательно рисуем на своей канве
Self.Canvas.Draw (0,0,TempBmp)
finally
TempBmp.Free;
end;


 
Вконец озверевший кадастрат   (2002-09-10 19:16) [4]

Я привел код для метода .Paint


 
Andrew_f   (2002-09-10 19:39) [5]

Спасибочки Dimka Maslov !
Кажется сработало!



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

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

Наверх




Память: 0.48 MB
Время: 0.019 c
1-73758
Seldon
2002-09-11 22:35
2002.09.23
Как имитировать для некой проги завершение Windows, если известе


1-73720
demisen
2002-09-11 12:43
2002.09.23
Как определить, является ли строка числом ?


3-73496
SerKom
2002-08-31 17:04
2002.09.23
Database1.Commit(Rollback) в таблицах Paradox


1-73644
Андрусь
2002-09-12 16:35
2002.09.23
Как с элемента убрать фокус


14-73836
GydruS
2002-08-27 11:36
2002.09.23
Зацените, если интересно, плиз :)