![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
и снова мерцание картинки при перерисовке (использую BitBlt) [D7, 2000, XP]
ari_9 © (2007-05-23 01:58:00)на форме лежит несколько панелей и сплитеров, на одной из панелей лежит xImage:TImage. сделал так потому, что удобно не обрабатывать его размеры, а просто задать Align = alClient панели. по onResize или другим действиям пользователя вызывается функция перерисовки изображения
код примитивный
var
xBMP: TBitmap;
...
xBMP := TBitmap.Create;
xBMP.Width := xImage.Picture.Bitmap.Width;
xBMP.Height := xImage.Picture.Bitmap.Height;
...
заполняю xBMP
...
BitBlt(xBMP.Handle, 0, 0, xBMP.Width, xBMP.Height,
xImage.Canvas.Handle, 0, 0, SRCCOPY);
xBMP.Free;
при этом все ресайзы и, соответственно, перерисовки сопровождаются очень неприятным мерцанием. что я делаю неправильно ? как я понимаю, при использовании BitBlt нет смысла играться с DoubleBuffered ?.. или для лежащего на форме TImage в принципе нельзя добиться отсутствия мерцания, нужно было рисовать прямо на канве панели ?
понимаю, что вопрос обсуждается регулярно, но поиском не нашел ответа
Loginov Dmitry (2007-05-23 12:56:00) [1]Нафик здесь вообще TImage нужен? Рисуй на канве формы или на TPaintBox'е.
ЮЮ (2007-05-23 11:48:00) [2]
> код примитивный
>
> var
> xBMP: TBitmap;
> ...
> xBMP := TBitmap.Create;
> xBMP.Width := xImage.Picture.Bitmap.Width;
> xBMP.Height := xImage.Picture.Bitmap.Height;
Да уж. А без указания обработчика и бесполезный.
А почему после формирования xBMP просто не сделать xImage.Picture.Assign(xBMP), если BitBlt сдерживает указать DoubleBuffered у формы?
clickmaker (2007-05-23 11:42:00) [3]
> BitBlt(xBMP.Handle
что это? Там же HDC должно быть
и непонятно: рисовать-то надо на xBMP или все же на Image?
ari_9 (2007-05-23 11:37:00) [4]все утро играюсь, от мерцания не избавился
нужна помощь