Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.044 c
2-1213812379
TOXaKGD
2008-06-18 22:06
2008.07.20
FindFirst и Unicode


6-1190291073
Chaser
2007-09-20 16:24
2008.07.20
WNetAddConnection2


15-1212455954
brother
2008-06-03 05:19
2008.07.20
Мерцание 2х LCD мониторов (LG)


2-1213800461
Nucer
2008-06-18 18:47
2008.07.20
GetWindow


15-1212508777
Nic
2008-06-03 19:59
2008.07.20
Теория игр : задачи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский