Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi WM_NCPAINT ohne flackern (https://www.delphipraxis.net/88577-wm_ncpaint-ohne-flackern.html)

Gruber_Hans_12345 17. Mär 2007 12:29


WM_NCPAINT ohne flackern
 
tach,

ich zeichen im WM_NCPAINT den Frame meiner Windows also nur den Rand (oben 28 pixel und sonst überl 4 pixel)
leider flackert das immer etwas ... wie ist da die beste technik, damit man da das flackern wegbringt?

Wollte es schon mit einem Bimtap als zwischenbuffer probieren, aber habe ja das problem, das in der mitte ein 1000*800 pixel bereich ist, der ja im normalen WM_PAINT gezeichnet wird ...

also etwas vereinfacht ungefähr so ....

Delphi-Quellcode:
procedure WMNCPaint(var Msg: TWMNCPaint);
var
    DC         : HDC;
    iCanvas    : TCanvas;
begin
   iCanvas        := TCanvas.Create;
   DC             := GetWindowDC(Handle)
   // DC             := GetDCEx(Handle, Msg.RGN, DCX_WINDOW or DCX_INTERSECTRGN); // sollte laut MSDN gehen, liefert aber immer 0 zurück ?
   iCanvas.Handle := DC;

   SaveIndex  := SaveDC(iCanvas.Handle);
  ExcludeClipRect(iCanvas.Handle, R.Left + 4, R.Top + 28, R.Right - 4, R.Bottom - 4);

  iCanvas.FillRect(R);
 
  // diverse andere zeichen routinen
  RestoreDC(iCanvas.Handle, SaveIndex);  


   ReleaseDC(Handle, DC);

   iCanvas.free;
   Msg.Result := 0;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz