Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
6-73790
Sky Net
2002-07-19 22:35
2002.09.23
Как получить файл из инета в Delphi 6 ?


3-73508
Bishop
2002-09-02 09:37
2002.09.23
SQL


14-73854
Уходитель
2002-08-26 14:21
2002.09.23
Я ухожу. надоело...


4-73953
LVG
2002-08-03 09:56
2002.09.23
Проблема с FindFirstFile


3-73485
Викт0р
2002-08-30 16:57
2002.09.23
.txt -> .dbf





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский