|
| Gradient Label | 
|
|---|
| How to create a cute gradient label | Product: Delphi all versions | Category: GUI | Skill Level:
 | Scoring:  | Last Update: 11/03/2001 | Search Keys: delphi delphi3000 article borland vcl code-snippet Gradient Label | Times Scored: 3 | Visits: 2857 | Uploader: Alain Gosselin Company: | Reference: N/A | | | Question/Problem/Abstract:
How to create a gradient label as a component? | Answer:
unit AGGradientLabel;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
const
DefaultStart = clBlue;
DefaultEnd = clBlack;
type
TAGGradientLabel = class(TLabel)
private
FclStart: TColor;
FclEnd: TColor;
procedure SetEndColor(const Value: TColor);
procedure SetStartColor(const Value: TColor);
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property GradientEnd: TColor read FclEnd write SetEndColor default DefaultEnd;
property GradientStart: TColor read FclStart write SetStartColor default DefaultStart;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Alain', [TAGGradientLabel]);
end;
{ TAGGradientLabel }
constructor TAGGradientLabel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FclStart:=DefaultStart;
FclEnd:=DefaultEnd;
Font.Color:=clWhite;
end;
destructor TAGGradientLabel.Destroy;
begin
inherited Destroy;
end;
procedure TAGGradientLabel.Paint;
const
Alignments: array[TAlignment] of Word = (DT_LEFT,DT_RIGHT,DT_CENTER);
var
ColorStart: LongInt;
ColorEnd : LongInt;
RC1 : Byte;
GC1 : Byte;
BC1 : Byte;
RC2 : Byte;
GC2 : Byte;
BC2 : Byte;
Rct : TRect;
CRct : TRect;
I : Integer;
LblSize : Integer;
DrawStyle : LongInt;
begin
ColorStart:=ColorToRGB(FclStart);
ColorEnd :=ColorToRGB(FclEnd);
RC1 :=GetRValue(ColorStart);
GC1 :=GetGValue(ColorStart);
BC1 :=GetBValue(ColorStart);
RC2 :=GetRValue(ColorEnd);
GC2 :=GetGValue(ColorEnd);
BC2 :=GetBValue(ColorEnd);
Rct :=Canvas.ClipRect;
LblSize :=Rct.Right-Rct.Left;
Canvas.Brush.Style:=bsSolid;
for I:=0 to LblSize do
begin
Canvas.Brush.Color:=RGB(
(RC1+(((RC2-RC1)*(Rct.Left+I)) div LblSize)),
(GC1+(((GC2-GC1)*(Rct.Left+I)) div LblSize)),
(BC1+(((BC2-BC1)*(Rct.Left+I)) div LblSize))
);
Canvas.FillRect(Rect(Rct.Left+I,0,Rct.Left+I+1,Height));
end;
Canvas.Brush.Style:=bsClear;
DrawStyle:=(DT_EXPANDTABS or DT_WORDBREAK) or Alignments[Alignment];
if Layout<>tlTop then
begin
CRct:=Rct;
DoDrawText(CRct,DrawStyle or DT_CALCRECT);
if Layout=tlBottom then OffsetRect(Rct,0,Height-CRct.Bottom)
else OffsetRect(Rct,0,(Height-CRct.Bottom) div 2);
end;
DoDrawText(Rct,DrawStyle);
end;
procedure TAGGradientLabel.SetEndColor(const Value: TColor);
begin
FclEnd:=Value;
Paint;
end;
procedure TAGGradientLabel.SetStartColor(const Value: TColor);
begin
FclStart:=Value;
Paint;
end;
end.
|
|
|
| |
Sign up to consume product discounts for Bronze memberships !
|
|
| |
Community Ad of C.A. Longen |
|
| |
|
|
|