Главная страница
    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
1-1195486930
dreamse
2007-11-19 18:42
2008.07.20
Как запретить завершать свой приложение?


2-1213774377
lewka-serdceed
2008-06-18 11:32
2008.07.20
Определение нажатия кнопки


2-1214074663
Igor23
2008-06-21 22:57
2008.07.20
Подскажите новечку плиз D7+MySQL


2-1213960748
DFT
2008-06-20 15:19
2008.07.20
изменение размеров родителя


15-1212563337
Kolan
2008-06-04 11:08
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский