home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 October
/
Chip_2001-10_cd1.bin
/
zkuste
/
delphi
/
kolekce
/
d56
/
TDSOFT.ZIP
/
TDGradientPanel.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2001-04-10
|
6KB
|
234 lines
unit TDGradientPanel;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TTDGradientPanel = class(TCustomPanel)
private
FStep: Byte;
FStartColor: TColor;
FEndColor: TColor;
FShadowColor: TColor;
FShadowDistance: Byte;
FAlignment: TAlignment;
procedure SetEndColor(const Value: TColor);
procedure SetStartColor(const Value: TColor);
procedure SetStep(const Value: Byte);
procedure SetShadowColor(const Value: TColor);
procedure SetShadowDistance(const Value: Byte);
procedure SetAlignment(const Value: TAlignment);
{ Private declarations }
protected
{ Protected declarations }
procedure WMPAINT(var Mes: TMessage); message WM_PAINT;
public
{ Public declarations }
property Canvas;
property DockManager;
procedure MakeGradient;
procedure DrawCaption;
constructor Create(AOwner: TComponent); override;
published
property Align;
property Anchors;
property AutoSize;
property BevelInner;
property BevelOuter;
property BevelWidth;
property BiDiMode;
property BorderWidth;
property BorderStyle;
property Caption;
//property Color;
property Constraints;
property Ctl3D;
property UseDockManager default True;
property DockSite;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property FullRepaint;
property Font;
property Locked;
property ParentBiDiMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnCanResize;
property OnClick;
property OnConstrainedResize;
property OnContextPopup;
property OnDockDrop;
property OnDockOver;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnGetSiteInfo;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnStartDock;
property OnStartDrag;
property OnUnDock;
property Step: Byte read FStep write SetStep;
property StartColor: TColor read FStartColor write SetStartColor;
property EndColor: TColor read FEndColor write SetEndColor;
property ShadowColor: TColor read FShadowColor write SetShadowColor;
property ShadowDistance: Byte read FShadowDistance write SetShadowDistance;
property Alignment: TAlignment read FAlignment write SetAlignment;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('TDSoft', [TTDGradientPanel]);
end;
{ TTDGradientPanel }
constructor TTDGradientPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Parent:=(AOwner as TWinControl);
FStartColor:=clBlack;
FEndColor:=clWhite;
FStep:=64;
Alignment:=taLeftJustify;
Font.Color:=clWhite;
FShadowColor:=clGray;
FShadowDistance:=1;
end;
procedure TTDGradientPanel.DrawCaption;
var
CaptX, CaptY: Cardinal;
begin
with Canvas do
begin
Brush.Style:=bsClear;
Font.Assign(Self.Font);
CaptX:=0; //Only for compiler;
CaptY:=(ClipRect.Bottom - ClipRect.Top) div 2 - TextHeight(Caption) div 2;
case Alignment of
taLeftJustify:
CaptX:=0;
taCenter:
CaptX:=ClipRect.Left + (ClipRect.Right - ClipRect.Left) div 2 - TextWidth(Caption) div 2;
taRightJustify:
CaptX:=ClipRect.Right - TextWidth(Caption);
end;
Font.Color:=FShadowColor;
TextOut(CaptX + FShadowDistance ,CaptY + FShadowDistance,Caption);
Font.Assign(Self.Font);
TextOut(CaptX,CaptY,Caption);
end;
end;
procedure TTDGradientPanel.MakeGradient;
var
i: Byte;
RStart, REnd, RStep: integer;
GStart, GEnd, GStep: integer;
BStart, BEnd, BStep: integer;
WidthStep: double;
ColorStart, ColorEnd: Longint;
begin
ColorStart:=ColorToRGB(FStartColor);
ColorEnd:=ColorToRGB(FEndColor);
RStart:=GetRValue(ColorStart);
GStart:=GetGValue(ColorStart);
BStart:=GetBValue(ColorStart);
REnd:=GetRValue(ColorEnd);
GEnd:=GetGValue(ColorEnd);
BEnd:=GetBValue(ColorEnd);
RStep:=trunc((REnd - RStart) /(FStep - 1));
GStep:=trunc((GEnd - GStart) /(FStep - 1));
BStep:=trunc((BEnd - BStart) /(FStep - 1));
WidthStep:=(Canvas.ClipRect.Right - Canvas.ClipRect.Left) / (FStep - 1);
for i:=0 to FStep do
with Canvas do
begin
Brush.Color:=RGB(RStart + (i * RStep),GStart + (i * GStep),BStart + (i * BStep));
FillRect(Rect(trunc(i * WidthStep),0,trunc((i+1) * WidthStep),Height));
end;
DrawCaption;
end;
procedure TTDGradientPanel.SetAlignment(const Value: TAlignment);
begin
FAlignment := Value;
MakeGradient;
end;
procedure TTDGradientPanel.SetEndColor(const Value: TColor);
begin
FEndColor := Value;
MakeGradient;
end;
procedure TTDGradientPanel.SetShadowColor(const Value: TColor);
begin
FShadowColor := Value;
MakeGradient;
end;
procedure TTDGradientPanel.SetShadowDistance(const Value: Byte);
begin
FShadowDistance := Value;
MakeGradient;
end;
procedure TTDGradientPanel.SetStartColor(const Value: TColor);
begin
FStartColor := Value;
MakeGradient;
end;
procedure TTDGradientPanel.SetStep(const Value: Byte);
begin
FStep := Value;
MakeGradient;
end;
procedure TTDGradientPanel.WMPAINT(var Mes: TMessage);
begin
inherited;
MakeGradient;
end;
end.