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

Вниз

TWinControl.WMPaint от Delphi7 запостите пожалуйста.   Найти похожие ветки 

 
DVM ©   (2007-11-20 13:05) [0]

У кого под рукой есть D7 запостите пожалуйста приведенный выше метод. У меня сейчас только D2007 под рукой, что-то там борланд перемудрил там с двойной буферизацией имхо. Сравнить хочу.


 
homm ©   (2007-11-20 13:09) [1]

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;


Что не так?


 
DVM ©   (2007-11-20 13:16) [2]


> Что не так?

еще не понял, но визуально выглядит так сдвиг координат что ли при заливке региона (во всех пред делфи глюк отсутствует, отсутствует и при выключении двойной буферизации).

http://dvmuratov.narod.ru/gluk.png


 
DVM ©   (2007-11-20 13:18) [3]

Вот от В2007 код. Буду думать, глюк мой или борланда.


procedure TWinControl.WMPaint(var Message: TWMPaint);
var
 DC, MemDC: HDC;
 MemBitmap, OldBitmap: HBITMAP;
 PS: TPaintStruct;
 PaintBuffer: HPAINTBUFFER;
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
   if DwmCompositionEnabled then
   begin
     DC := BeginPaint(Handle, PS);
     try
       PaintBuffer := BeginBufferedPaint(DC, PS.rcPaint, BPBF_COMPOSITED, nil, MemDC);
       if PaintBuffer <> 0 then
         try
           Perform(WM_ERASEBKGND, MemDC, MemDC);
           Perform(WM_PRINTCLIENT, MemDC, PRF_CLIENT);
           if not (Self is TCustomForm) then
             BufferedPaintMakeOpaque(PaintBuffer, @PS.rcPaint);
         finally
           EndBufferedPaint(PaintBuffer, True);
         end;
     finally
       EndPaint(Handle, PS);
     end;
   end
   else
   begin
     DC := BeginPaint(Handle, PS);
     MemBitmap := CreateCompatibleBitmap(DC, PS.rcPaint.Right - PS.rcPaint.Left,
       PS.rcPaint.Bottom - PS.rcPaint.Top);
     try
       MemDC := CreateCompatibleDC(DC);
       OldBitmap := SelectObject(MemDC, MemBitmap);
       try
         SetWindowOrgEx(MemDC, PS.rcPaint.Left, PS.rcPaint.Top, nil);
         Perform(WM_ERASEBKGND, MemDC, MemDC);
         Message.DC := MemDC;
         WMPaint(Message);
         Message.DC := 0;
         BitBlt(DC, PS.rcPaint.Left, PS.rcPaint.Top,
           PS.rcPaint.Right - PS.rcPaint.Left,
           PS.rcPaint.Bottom - PS.rcPaint.Top,
           MemDC,
           PS.rcPaint.Left, PS.rcPaint.Top,
           SRCCOPY);
       finally
         SelectObject(MemDC, OldBitmap);
       end;
     finally
       EndPaint(Handle, PS);
       DeleteDC(MemDC);
       DeleteObject(MemBitmap);
     end;
   end;
 end;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.025 c
2-1213947379
uno-84
2008-06-20 11:36
2008.07.20
Передача ссылки на файл по почтовику


2-1213688495
Viktor198
2008-06-17 11:41
2008.07.20
Программа выдаёт ошибку "Record, object or class type required "


2-1214211036
Джоник__
2008-06-23 12:50
2008.07.20
Панели быстрого запуска


15-1212343059
Style
2008-06-01 21:57
2008.07.20
Помогите пожалуйста


2-1213665444
ply
2008-06-17 05:17
2008.07.20
вычисляемое поле в датасете