Текущий архив: 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