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

Вниз

DoubleBuffered распространять, на определенный участок   Найти похожие ветки 

 
DelphiLexx ©   (2006-08-28 16:49) [0]

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


 
Fay ©   (2006-08-28 16:58) [1]

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


 
DelphiLexx ©   (2006-08-28 17:02) [2]


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

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


 
oxffff ©   (2006-08-28 17:03) [3]

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

procedure TWinControl.WMPaint(var Message: TWMPaint);


 
Fay ©   (2006-08-28 17:04) [4]

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


 
oxffff ©   (2006-08-28 17:06) [5]

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


 
oxffff ©   (2006-08-28 17:07) [6]

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


 
OSokin ©   (2006-08-28 17:22) [7]

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


 
DelphiLexx ©   (2006-08-28 17:24) [8]


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

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


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

2 fay

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


 
Fay ©   (2006-08-28 21:25) [10]

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


 
oxffff ©   (2006-08-29 12:10) [11]

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;


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

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


 
oxffff ©   (2006-08-29 12:18) [13]

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

Аля

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


 
Fay ©   (2006-08-29 15:28) [14]

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


 
oxffff ©   (2006-08-29 18:25) [15]

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

Не понял тебя


 
oxffff ©   (2006-08-29 18:33) [16]

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


 
Fay ©   (2006-08-30 02:25) [17]

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



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

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

Наверх




Память: 0.5 MB
Время: 0.055 c
1-1155810465
GrBob
2006-08-17 14:27
2006.10.08
Variant и Int64


3-1154944344
DelphiLexx
2006-08-07 13:52
2006.10.08
TFIBDataSet.DisableControls не работает


15-1157075691
Доктор Шмурге
2006-09-01 05:54
2006.10.08
Куда попадет Сатана после смерти?


2-1158581883
Xmen
2006-09-18 16:18
2006.10.08
deadlock


2-1158308782
TrainerOfDolphins
2006-09-15 12:26
2006.10.08
loCaseInsensitive