Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: VCL / WinForms / Controls (https://www.delphipraxis.net/24-library-vcl-winforms-controls/)
-   -   Delphi Label mit Alpha-Wert (https://www.delphipraxis.net/91548-label-mit-alpha-wert.html)

CalganX 6. Mai 2007 21:24


Label mit Alpha-Wert
 
SirThornberry hat hier eine kleine Unit gepostet, mit der es möglich ist, einem Label einen Alpha-Wert für Transparenz hinzuzufügen.
Delphi-Quellcode:
unit uAlphaLabel;

interface

uses
  windows, graphics, classes, StdCtrls;

type
  TLabel = class(StdCtrls.TLabel)
  private
    fAlphaVal: Byte;
    procedure FSetAlphaVal(AAlpha: Byte);
  public
    constructor Create(AOwner: TComponent); override;
    procedure Paint; override;
  published
    property AlphaVal: Byte read fAlphaVal write FSetAlphaVal default 255;
  end;

implementation

constructor TLabel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Transparent := True;
  fAlphaVal := 255;
end;

procedure TLabel.Paint;
type
  PCanvas = ^TCanvas;
var LBitmap: TBitmap;
    LOldCanvas: TCanvas;
    LBlendFunc: TBlendFunction;
begin
  if fAlphaVal = 255 then
    inherited Paint
  else begin
    LBitmap := TBitmap.Create;
    LBitmap.Width := Width;
    LBitmap.Height := Height;
    BitBlt(LBitmap.Canvas.Handle, 0, 0, Width, Height, Canvas.Handle, 0, 0, SRCCOPY);
    LOldCanvas := Canvas;
    PCanvas(@Canvas)^ := LBitmap.Canvas;
    inherited Paint;
    PCanvas(@Canvas)^ := LOldCanvas;
    LBlendFunc.BlendOp := AC_SRC_OVER;
    LBlendFunc.BlendFlags := 0;
    LBlendFunc.SourceConstantAlpha := fAlphaVal;
    LBlendFunc.AlphaFormat := 0;
    windows.AlphaBlend(Canvas.Handle, 0, 0, Width, Height, LBitmap.Canvas.Handle,
                       0, 0, Width, Height, LBlendFunc);
    LBitmap.Free;
  end;
end;

procedure TLabel.FSetAlphaVal(AAlpha: Byte);
begin
  if AAlpha <> fAlphaVal then
  begin
    fAlphaVal := AAlpha;
    Repaint;
  end;
end;

end.
Hinweisen zur Verwendung:
Zitat:

Zitat von SirThornberry
So wirds verwendet:
- Den Source als "uAlphaLabel.pas" abspeichern.
- Wie gewohnt einfach normale Labels auf dem Form plazieren
- In die Uses des Forms wo die Labels drauf sind "uAlphaLabel" aufnehmen, dabei darauf achten das in den uses "uAlphaLabel" hinter "StdCtrls" steht.
- dadurch wird jetzt jedes Label welches sich auf dem Form befindet zu einem "alphalabel", dementsprechend können wir auch im Constructor den Alphawert setzen (Label1.Alphaval := 127)

Standard Alphawert des Alphalabels ist 255 damit nicht Labels die eigentlich keine Transparenz haben sollen plözlich transparent sind.



Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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