Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Schwarzer Rand beim Zeichnen (https://www.delphipraxis.net/107740-schwarzer-rand-beim-zeichnen.html)

Prototypjack 1. Feb 2008 13:16


Schwarzer Rand beim Zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,

Ich bin's wieder mit meinem Vista-Projekt (zur Erleichterung der Arbeit mit Vista und < D2007).

Also nochmal kurz ein Rückblick: Ich hooke die Paint-Methode von bestimmten WinControls und geben Ihnen folgenden Code:

Delphi-Quellcode:
var
  DC, MemDC: HDC;
  PS: TPaintStruct;
  PaintBuffer: HPAINTBUFFER;
begin
  if ((Message.Msg = WM_PAINT) and FOwner.DoubleBuffered
    and CompositionServices.CompositionEnabled) then
  begin
    begin
      DC := BeginPaint(FOwner.Handle, PS);
      try
        PaintBuffer := BeginBufferedPaint(DC, PS.rcPaint, BPBF_TOPDOWNDIB, nil, MemDC);
        FOwner.Perform(WM_ERASEBKGND, MemDC, MemDC);
        FOwner.Perform(WM_PRINTCLIENT, MemDC, PRF_CLIENT);
        if not Self is TCustomForm then
        begin        
          BufferedPaintSetAlpha(PaintBuffer, @PS.rcPaint, 255);
        end;
        EndBufferedPaint(PaintBuffer, True);
      finally
        EndPaint(FOwner.Handle, PS);
      end;
    end
  end
  else
  begin
    FOldWindowProc(Message);
  end;
Das funktioniert auch super. In der tat funktioniert es sogar zu gut, denn nun haben diese WinControls schwarze Ränder (siehe Anhang).

Hat jemand den Ansatz einer Idee, wie ich das verhindern kann?

Danke & Grüße,
Max

Prototypjack 2. Feb 2008 18:05

Re: Schwarzer Rand beim Zeichnen
 
Moin,

Ach kommt schon ;)

So weit daneben kann ich doch gar nicht liegen. Hat keiner eine Idee? Irgendwie muss es doch gehen?

Daniel zeigt, soweit ich mich erinnern kann, in seinem Video eine korrekte Darstellung per DoubleBuffered := True, also muss ich die richtige Methode gehooked haben und auch kann mein Code gar nicht so weit daneben liegen, denn ich bin ja fast beim richtigen Ergebnis.

Wo liegt mein Fehler? Was habe ich vergessen?

Danke & Grüße,
Max

Prototypjack 4. Feb 2008 19:33

Re: Schwarzer Rand beim Zeichnen
 
*push* :pale:

zahor 27. Aug 2008 12:13

Re: Schwarzer Rand beim Zeichnen
 
für den fall, dass dein problem nach nem halben jahr immer noch besteht: setzt mal
Delphi-Quellcode:
form1.doublebuffered := true
Damit ist dein Problem zwar nicht prinzipiell gelöst, aber der Rand ist jetzt weiß^^ Ich hoffe, das ist näher an der Lösung. Wahrscheinlich braucht man aber GDI+...
beim speedbutton gibt's das Problem übrigens nicht


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr.

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