Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DoubleBuffered распространять, на определенный участок


DelphiLexx ©   (2006-08-28 16:49:00) 

Как заставить DoubleBuffered Control'a действовать не на весь размер (Width и Height) этого контрола, а на определенную часть.
Мне это необходимо в связи с тем, что при больших размерах Width Height контрола (ну скажем 3000, 2000 соответственно) прорисовка начинает кушать немеренно ресурсы процессора, что ведет к торможению.


Fay   (2006-08-30 02:25:00) [1]

2 oxffff ©   (29.08.06 18:33) [16]
Я действительно не знал, о чём и сказал.


oxffff   (2006-08-29 18:33:00) [2]

2 fay
Так у ТObject.Dispatch на что.
А у TControl WndProc и вызывает Dispatch.


oxffff   (2006-08-29 18:25:00) [3]

2 fay
> На самом деле, для меня было открытием, что все контролы могут
> получать сообщение. Приплыли называется 8)

Не понял тебя


Fay   (2006-08-29 15:28:00) [4]

На самом деле, для меня было открытием, что все контролы могут получать сообщение. Приплыли называется 8)


oxffff   (2006-08-29 12:18:00) [5]

Естественно не править TWinControl.WMPaint(var Message: TWMPaint);
А переопределить в своем классе.

Аля

MyClass=class(..)
private
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
end;


oxffff   (2006-08-29 12:11:00) [6]

А если это не потомок TwinConrol.
Тогда написать аналогично.


oxffff   (2006-08-29 12:10:00) [7]

Fay wrote
> 2 oxffff ©   (28.08.06 17:03) [3]
>А мне вот не очевидно, что целевой control - потомок TWinControl

oxffff answered
Почему же есть DoubleBuffered, height, width.

to DelphiLexx

procedure TWinControl.WMPaint(var Message: TWMPaint);
var
 DC, MemDC: HDC;
 MemBitmap, OldBitmap: HBITMAP;
 PS: TPaintStruct;
begin
 if not FDoubleBuffered or (Message.DC <> 0) then
 begin
   if not (csCustomPaint in ControlState) and (ControlCount = 0) then
     inherited
   else
     PaintHandler(Message);
 end
 else
 begin
   DC := GetDC(0);
/////////////////////////////////////////////////////////////////////////
!!! Здесь нужно поправить область
///

   MemBitmap := CreateCompatibleBitmap(DC, ClientRect.Right, ClientRect.Bottom);
   ReleaseDC(0, DC);
   MemDC := CreateCompatibleDC(0);
   OldBitmap := SelectObject(MemDC, MemBitmap);
   try
     DC := BeginPaint(Handle, PS);
     Perform(WM_ERASEBKGND, MemDC, MemDC);
     Message.DC := MemDC;
     WMPaint(Message);
     Message.DC := 0;
     BitBlt(DC, 0, 0, ClientRect.Right, ClientRect.Bottom, MemDC, 0, 0, SRCCOPY);
     EndPaint(Handle, PS);
   finally
     SelectObject(MemDC, OldBitmap);
     DeleteDC(MemDC);
     DeleteObject(MemBitmap);
   end;
 end;
end;


Fay   (2006-08-28 21:25:00) [8]

2 oxffff ©   (28.08.06 20:08) [9]
> не совсем понял твой ответ
Такая же фигня


oxffff   (2006-08-28 20:08:00) [9]

2 fay

> Почему же есть DoubleBuffered, height, width.
> :)
> В смысле "DoubleBuffered, height, width." не совсем понял твой ответ.


DelphiLexx   (2006-08-28 17:24:00) [10]


> Почему же есть DoubleBuffered, height, width.
> :)

В смысле "DoubleBuffered, height, width." не совсем понял твой ответ.


OSokin   (2006-08-28 17:22:00) [11]

Самому реализовывать даблбуфферность


oxffff   (2006-08-28 17:07:00) [12]

Почему же есть DoubleBuffered, height, width.
:)


oxffff   (2006-08-28 17:06:00) [13]

А зачем такой размер?


Fay   (2006-08-28 17:04:00) [14]

2 oxffff ©   (28.08.06 17:03) [3]
А мне вот не очевидно, что целевой control - потомок TWinControl


oxffff   (2006-08-28 17:03:00) [15]

Написать свою реализацию WMPaint(var Message: TWMPaint);

procedure TWinControl.WMPaint(var Message: TWMPaint);


DelphiLexx   (2006-08-28 17:02:00) [16]


> 40-дюймовый монитор?

У меня 17-ити дюймовый!


Fay   (2006-08-28 16:58:00) [17]

40-дюймовый монитор?


Наверх

Титульная страница Поиск, карта сайта Написать письмо