Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Semi-Transparenz auf TCanvas

  Alt 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
  Mit Zitat antworten Zitat