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 >
Pascal/Delphi Source File  |  2001-04-10  |  6KB  |  234 lines

  1. unit TDGradientPanel;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ExtCtrls;
  8.  
  9. type
  10.   TTDGradientPanel = class(TCustomPanel)
  11.   private
  12.     FStep: Byte;
  13.     FStartColor: TColor;
  14.     FEndColor: TColor;
  15.     FShadowColor: TColor;
  16.     FShadowDistance: Byte;
  17.     FAlignment: TAlignment;
  18.     procedure SetEndColor(const Value: TColor);
  19.     procedure SetStartColor(const Value: TColor);
  20.     procedure SetStep(const Value: Byte);
  21.     procedure SetShadowColor(const Value: TColor);
  22.     procedure SetShadowDistance(const Value: Byte);
  23.     procedure SetAlignment(const Value: TAlignment);
  24.     { Private declarations }
  25.   protected
  26.     { Protected declarations }
  27.     procedure WMPAINT(var Mes: TMessage); message WM_PAINT;
  28.   public
  29.     { Public declarations }
  30.     property Canvas;
  31.     property DockManager;
  32.     procedure MakeGradient;
  33.     procedure DrawCaption;
  34.     constructor Create(AOwner: TComponent); override;
  35.   published
  36.     property Align;
  37.     property Anchors;
  38.     property AutoSize;
  39.     property BevelInner;
  40.     property BevelOuter;
  41.     property BevelWidth;
  42.     property BiDiMode;
  43.     property BorderWidth;
  44.     property BorderStyle;
  45.     property Caption;
  46.     //property Color;
  47.     property Constraints;
  48.     property Ctl3D;
  49.     property UseDockManager default True;
  50.     property DockSite;
  51.     property DragCursor;
  52.     property DragKind;
  53.     property DragMode;
  54.     property Enabled;
  55.     property FullRepaint;
  56.     property Font;
  57.     property Locked;
  58.     property ParentBiDiMode;
  59.     property ParentColor;
  60.     property ParentCtl3D;
  61.     property ParentFont;
  62.     property ParentShowHint;
  63.     property PopupMenu;
  64.     property ShowHint;
  65.     property TabOrder;
  66.     property TabStop;
  67.     property Visible;
  68.     property OnCanResize;
  69.     property OnClick;
  70.     property OnConstrainedResize;
  71.     property OnContextPopup;
  72.     property OnDockDrop;
  73.     property OnDockOver;
  74.     property OnDblClick;
  75.     property OnDragDrop;
  76.     property OnDragOver;
  77.     property OnEndDock;
  78.     property OnEndDrag;
  79.     property OnEnter;
  80.     property OnExit;
  81.     property OnGetSiteInfo;
  82.     property OnMouseDown;
  83.     property OnMouseMove;
  84.     property OnMouseUp;
  85.     property OnResize;
  86.     property OnStartDock;
  87.     property OnStartDrag;
  88.     property OnUnDock;
  89.     property Step: Byte read FStep write SetStep;
  90.     property StartColor: TColor read FStartColor write SetStartColor;
  91.     property EndColor: TColor read FEndColor write SetEndColor;
  92.     property ShadowColor: TColor read FShadowColor write SetShadowColor;
  93.     property ShadowDistance: Byte read FShadowDistance write SetShadowDistance;
  94.     property Alignment: TAlignment read FAlignment write SetAlignment;
  95.   end;
  96.   
  97.  
  98. procedure Register;
  99.  
  100. implementation
  101.  
  102. procedure Register;
  103. begin
  104.   RegisterComponents('TDSoft', [TTDGradientPanel]);
  105. end;
  106.  
  107. { TTDGradientPanel }
  108.  
  109. constructor TTDGradientPanel.Create(AOwner: TComponent);
  110. begin
  111.   inherited Create(AOwner);
  112.   Parent:=(AOwner as TWinControl);
  113.   FStartColor:=clBlack;
  114.   FEndColor:=clWhite;
  115.   FStep:=64;
  116.   Alignment:=taLeftJustify;
  117.   Font.Color:=clWhite;
  118.   FShadowColor:=clGray;
  119.   FShadowDistance:=1;
  120. end;
  121.  
  122. procedure TTDGradientPanel.DrawCaption;
  123. var
  124.   CaptX, CaptY: Cardinal;
  125. begin
  126.   with Canvas do
  127.   begin
  128.     Brush.Style:=bsClear;
  129.     Font.Assign(Self.Font);
  130.     CaptX:=0; //Only for compiler;
  131.     CaptY:=(ClipRect.Bottom - ClipRect.Top) div 2 - TextHeight(Caption) div 2;
  132.     case Alignment of
  133.       taLeftJustify:
  134.         CaptX:=0;
  135.       taCenter:
  136.         CaptX:=ClipRect.Left + (ClipRect.Right - ClipRect.Left) div 2 - TextWidth(Caption) div 2;
  137.       taRightJustify:
  138.         CaptX:=ClipRect.Right - TextWidth(Caption);
  139.     end;
  140.  
  141.     Font.Color:=FShadowColor;
  142.     TextOut(CaptX + FShadowDistance ,CaptY + FShadowDistance,Caption);
  143.  
  144.     Font.Assign(Self.Font);
  145.     TextOut(CaptX,CaptY,Caption);
  146.   end;
  147.  
  148. end;
  149.  
  150. procedure TTDGradientPanel.MakeGradient;
  151. var
  152.   i: Byte;
  153.   RStart, REnd, RStep: integer;
  154.   GStart, GEnd, GStep: integer;
  155.   BStart, BEnd, BStep: integer;
  156.   WidthStep: double;
  157.   ColorStart, ColorEnd: Longint;
  158.  
  159.  
  160. begin
  161.   ColorStart:=ColorToRGB(FStartColor);
  162.   ColorEnd:=ColorToRGB(FEndColor);
  163.  
  164.  
  165.   RStart:=GetRValue(ColorStart);
  166.   GStart:=GetGValue(ColorStart);
  167.   BStart:=GetBValue(ColorStart);
  168.  
  169.   REnd:=GetRValue(ColorEnd);
  170.   GEnd:=GetGValue(ColorEnd);
  171.   BEnd:=GetBValue(ColorEnd);
  172.  
  173.   RStep:=trunc((REnd - RStart) /(FStep - 1));
  174.   GStep:=trunc((GEnd - GStart) /(FStep - 1));
  175.   BStep:=trunc((BEnd - BStart) /(FStep - 1));
  176.  
  177.  
  178.   WidthStep:=(Canvas.ClipRect.Right - Canvas.ClipRect.Left) / (FStep - 1);
  179.  
  180.   for i:=0 to FStep do
  181.   with Canvas do
  182.   begin
  183.     Brush.Color:=RGB(RStart + (i * RStep),GStart + (i * GStep),BStart + (i * BStep));
  184.     FillRect(Rect(trunc(i * WidthStep),0,trunc((i+1) * WidthStep),Height));
  185.   end;
  186.  
  187.   DrawCaption;
  188.  
  189. end;
  190.  
  191. procedure TTDGradientPanel.SetAlignment(const Value: TAlignment);
  192. begin
  193.   FAlignment := Value;
  194.   MakeGradient;
  195. end;
  196.  
  197. procedure TTDGradientPanel.SetEndColor(const Value: TColor);
  198. begin
  199.   FEndColor := Value;
  200.   MakeGradient;
  201. end;
  202.  
  203. procedure TTDGradientPanel.SetShadowColor(const Value: TColor);
  204. begin
  205.   FShadowColor := Value;
  206.   MakeGradient;
  207. end;
  208.  
  209. procedure TTDGradientPanel.SetShadowDistance(const Value: Byte);
  210. begin
  211.   FShadowDistance := Value;
  212.   MakeGradient;
  213. end;
  214.  
  215. procedure TTDGradientPanel.SetStartColor(const Value: TColor);
  216. begin
  217.   FStartColor := Value;
  218.   MakeGradient;
  219. end;
  220.  
  221. procedure TTDGradientPanel.SetStep(const Value: Byte);
  222. begin
  223.   FStep := Value;
  224.   MakeGradient;
  225. end;
  226.  
  227. procedure TTDGradientPanel.WMPAINT(var Mes: TMessage);
  228. begin
  229.   inherited;
  230.   MakeGradient;
  231. end;
  232.  
  233. end.
  234.