Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
Delphi 2010 Professional
|
Re: Semi-Transparenz auf TCanvas
16. Jan 2009, 19:16
Hallo,
mit der folgenden Routine kannst du auf einem Canvas ein Rechteck mit Alphablending zeichnen:
Delphi-Quellcode:
// Zeichnet ein gefülltes Rechteck auf einem Canvas mit Alphablending
procedure AlphaBlendRect (
const aCanvas : TCanvas; // Ziel-Canvas
const aRect : TRect; // zu füllendes Rechteck
const aColor : TColor; // Füllfarbe
const aIntensity : Byte // Intensität (0=durchsichtig, 255=deckend)
);
var
Width, Height : Integer;
Bitmap : {Graphics.}TBitmap;
BlendParams : TBlendFunction;
begin
Width := Succ(aRect.Right - aRect.Left);
Height := Succ(aRect.Bottom - aRect.Top);
Bitmap := TBitmap.Create;
try
Bitmap.SetSize (Width, Height);
Bitmap.Canvas.Brush.Color := aColor;
Bitmap.Canvas.FillRect(Rect(0, 0, Width, Height));
BlendParams.BlendOp := AC_SRC_OVER;
BlendParams.BlendFlags := 0;
BlendParams.SourceConstantAlpha := aIntensity;
BlendParams.AlphaFormat := 0;
Windows.AlphaBlend(aCanvas.Handle, aRect.Left, aRect.Top, Bitmap.Width, Bitmap.Height,
Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height,
BlendParams);
finally
Bitmap.Free;
end;
end;
// Beispiel-Aufruf
AlphaBlendRect (Form1.Canvas, Rect(50, 50, 250, 150), clBlue, 64);
Gruß Hawkeye
|
|
Zitat
|