Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: AlphaBlending und Canvas der Oberklasse

  Alt 24. Nov 2005, 22:13
erstmal ist dein fColor undefiniert (außer man ruft die SetColor auf), also einfach einen Startwert im Create dafür vergeben (für Alpha am besten auch gleich mit).

Und dann zu deinem eigentlichen Problem. Ich verstehe nicht warum du inherited Paint aufrufst und davor die Canvas umbiegst und danach wieder zurück.
Es reicht aus wenn du einfach mit AlphaBlend direkt auf die Originalcanvas das Blending ausführst. Denn das "inherited Paint" sorgt dafür das deine gesammte Canvas eingefärbt wird und somit blendest du anschließend dein FarbBitmap mit einer bereits komplett eingefärbten Grundfläsche.

Also folgende Zeilen entfernen:
Delphi-Quellcode:
 LOldCanvas := Canvas;
  PCanvas(@Canvas)^ := NextBitmap.Canvas;
  inherited Paint;
  PCanvas(@Canvas)^ := LOldCanvas;
[...]
BitBlt(Canvas.Handle,0,0,Width,Height,NextBitmap.Canvas.Handle,0,0,SRCCOPY);
Dann sollte anschließend auch FarbBitmap mit dem Hintergrund der Komponenten geblendet sein.

(wenn du nur den Hintergrund der Komponente mit einer Farbe blenden willst muss FarbBitmap auch nicht genau so groß sein wie deine Komponente (reicht 1pixel * 1pixel und dann kann die Funktion Alphablend dafür sorgend das die Farbfläche auf volle größe gestretcht wird)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat