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

Вниз

Как узнать использует ли приложение DoubleBuffered   Найти похожие ветки 

 
DelphiLexx ©   (2006-08-29 09:40) [0]

Есть чужое приложение которое умеет рисовать схемы. Как узнать использует ли данное приложение DoubleBuffered = true.
Да и вообще постараться вытянуть как можно больше инфы о методах рисования используемых этим приложением.


 
Rouse_ ©   (2006-08-29 10:35) [1]

Приложение пишут не только на Delphi. В том же VB | VC++ нет понятия DoubleBuffered.


 
DelphiLexx ©   (2006-08-29 10:36) [2]


> Приложение пишут не только на Delphi. В том же VB | VC++
> нет понятия DoubleBuffered.

Тогда назови мне аналог DoubleBuffered на С++


 
Дятел   (2006-08-29 10:58) [3]

Щас фсё бросим, побежим аналоги называть. Сказано ж: нету такого понятия!


 
Rouse_ ©   (2006-08-29 11:07) [4]


> Тогда назови мне аналог DoubleBuffered на С++

Аналог? Да не вопрос: Большая функция написанная грамотным программистом.


 
DelphiLexx ©   (2006-08-29 11:23) [5]


> Аналог? Да не вопрос: Большая функция написанная грамотным
> программистом.

Правильно ли я понял:
Во избежания мерцания программисты Си вместо одной строчки программистов Delphi DoubleBuffered := true пишут самостоятельно большую процедуру.


 
Lamer@fools.ua ©   (2006-08-29 11:26) [6]

>Во избежания мерцания программисты Си вместо одной строчки программистов Delphi DoubleBuffered := true пишут самостоятельно большую процедуру.

... которую для программистов Delphi уже написали добрые дяди из Борланда.


 
DelphiLexx ©   (2006-08-29 11:36) [7]


> пишут самостоятельно большую процедуру.

Зоопарк


 
Rouse_ ©   (2006-08-29 11:49) [8]

Вот смотри как работает DoubleBuffered (обрати внимание на флаг FDoubleBuffered):

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;

procedure TWinControl.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
 with ThemeServices do
 if ThemesEnabled and Assigned(Parent) and (csParentBackground in FControlStyle) then
   begin
     { Get the parent to draw its background into the control"s background. }
     if Parent.DoubleBuffered then
       PerformEraseBackground(Self, Message.DC)
     else
       DrawParentBackground(Handle, Message.DC, nil, False);
   end
   else
   begin
     { Only erase background if we"re not doublebuffering or painting to memory. }
     if not FDoubleBuffered or
        (TMessage(Message).wParam = TMessage(Message).lParam) then
       FillRect(Message.DC, ClientRect, FBrush.Handle);
   end;

 Message.Result := 1;
end;



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

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

Наверх




Память: 0.49 MB
Время: 0.057 c
4-1156734921
tar4
2006-08-28 07:15
2007.01.14
обращение к отладочным регистрам


2-1166644753
i-am-vladko
2006-12-20 22:59
2007.01.14
published property`s


15-1166631451
IMHO
2006-12-20 19:17
2007.01.14
"Война - войной, а обед - по расписанию"


1-1163773693
alexey_potapov
2006-11-17 17:28
2007.01.14
"Недостаточно памяти для завершения операции"


2-1166740295
XfroSt
2006-12-22 01:31
2007.01.14
Передача значения в поток thread