source: trunk/Sibyl/Addon/GRADIENT.PAS@ 7

Last change on this file since 7 was 7, checked in by RBRi, 19 years ago

+ sibyl staff

  • Property svn:eol-style set to native
File size: 4.7 KB
Line 
1UNIT Gradient;
2
3INTERFACE
4
5USES Classes, Forms, Graphics;
6
7TYPE
8 TDirection = (dLeft, dRight, dUp, dDown);
9
10 TGradient = CLASS(TControl)
11 PRIVATE
12 FDirection : TDirection;
13 FStartColor : TColor;
14 FEndColor : TColor;
15 PROCEDURE SetDirection(NewDirection:TDirection);
16 PROCEDURE SetStartColor(NewColor:TColor);
17 PROCEDURE SetEndColor(NewColor:TColor);
18 PROPERTY Caption;
19 PROPERTY Font;
20 PROPERTY Color;
21 PROPERTY PenColor;
22 PROPERTY ParentColor;
23 PROPERTY ParentPenColor;
24 PROPERTY TabStop;
25 PROTECTED
26 PROCEDURE SetupComponent; OVERRIDE;
27 PUBLIC
28 PROCEDURE Redraw(CONST rc:TRect); OVERRIDE;
29 PUBLISHED
30 PROPERTY Align;
31 PROPERTY DragCursor;
32 PROPERTY DragMode;
33 PROPERTY Enabled;
34 PROPERTY ParentFont;
35 PROPERTY ParentShowHint;
36 PROPERTY PopupMenu;
37 PROPERTY ShowHint;
38 PROPERTY TabOrder;
39 PROPERTY Visible;
40 PROPERTY ZOrder;
41
42 PROPERTY OnCanDrag;
43 PROPERTY OnCommand;
44 PROPERTY OnDblClick;
45 PROPERTY OnDragDrop;
46 PROPERTY OnDragOver;
47 PROPERTY OnEndDrag;
48 PROPERTY OnEnter;
49 PROPERTY OnExit;
50 PROPERTY OnFontChange;
51 PROPERTY OnMouseClick;
52 PROPERTY OnMouseDblClick;
53 PROPERTY OnMouseDown;
54 PROPERTY OnMouseMove;
55 PROPERTY OnMouseUp;
56 PROPERTY OnResize;
57 PROPERTY OnSetupShow;
58 PROPERTY OnStartDrag;
59 PROPERTY Direction:TDirection read FDirection write SetDirection;
60 PROPERTY StartColor:TColor read FStartColor write SetStartColor;
61 PROPERTY EndColor:TColor read FEndColor write SetEndColor;
62 END;
63
64IMPLEMENTATION
65
66PROCEDURE TGradient.SetDirection(NewDirection:TDirection);
67BEGIN
68 FDirection:=NewDirection;
69 Invalidate;
70END;
71
72PROCEDURE TGradient.SetStartColor(NewColor:TColor);
73BEGIN
74 FStartColor:=NewColor;
75 Invalidate;
76END;
77
78PROCEDURE TGradient.SetEndColor(NewColor:TColor);
79BEGIN
80 FEndColor:=NewColor;
81 Invalidate;
82END;
83
84PROCEDURE TGradient.SetupComponent;
85BEGIN
86 Inherited SetUpComponent;
87 Name:= 'Gradient';
88 FDirection:= dUp;
89 FStartColor:=clBlack;
90 FEndColor:=clBlue;
91 Width:=200;
92 Height:=200;
93 ZOrder:=zoBottom;
94 TabStop:=FALSE;
95END;
96
97PROCEDURE TGradient.Redraw(CONST rc:TRect);
98VAR
99 SaveColor:TColor;
100 DRed,DGreen,DBlue,DR,DG,DB:Extended;
101 StartLoop,EndLoop:LONGINT;
102 rec:TRect;
103BEGIN
104 SaveColor:=Canvas.Pen.Color;
105 Canvas.ClipRect:=rc;
106
107 DRed:=TRGB(FStartColor).Red;
108 DGreen:=TRGB(FStartColor).Green;
109 DBlue:=TRGB(FStartColor).Blue;
110 DR:=TRGB(FEndColor).Red-DRed;
111 DG:=TRGB(FEndColor).Green-DGreen;
112 DB:=TRGB(FEndColor).Blue-DBlue;
113
114 CASE FDirection OF
115 dUp,dDown,dLeft,dRight:
116 BEGIN
117 IF FDirection IN [dUp,dDown] THEN
118 BEGIN
119 DR:=DR / Height;
120 DG:=DG / Height;
121 DB:=DB / Height;
122 END
123 ELSE
124 BEGIN
125 DR:=DR / Width;
126 DG:=DG / Width;
127 DB:=DB / Width;
128 END;
129
130 IF FDirection=dUp THEN
131 BEGIN
132 StartLoop:=0;
133 EndLoop:=Height+1;
134 END
135 ELSE IF FDirection=dDown THEN
136 BEGIN
137 StartLoop:=Height+1;
138 EndLoop:=0;
139 END
140 ELSE IF FDirection=dLeft THEN
141 BEGIN
142 StartLoop:=0;
143 EndLoop:=Width+1;
144 END
145 ELSE
146 BEGIN
147 StartLoop:=Width+1;
148 EndLoop:=0;
149 END;
150
151 WHILE StartLoop<>EndLoop DO
152 BEGIN
153 IF FDirection IN [dUp,dDown] THEN
154 BEGIN
155 rec.Left:=0;
156 rec.Right:=Width;
157 rec.Bottom:=StartLoop;
158 rec.Top:=rec.Bottom+1;
159 END
160 ELSE
161 BEGIN
162 rec.Left:=StartLoop;
163 rec.Right:=rec.Left+1;
164 rec.Bottom:=0;
165 rec.Top:=Height;
166 END;
167 Canvas.FillRect(rec,ValuesToRGB(Round(DRed),Round(DGreen),Round(DBlue)));
168
169 DRed:=DRed+DR;
170 DGreen:=DGreen+DG;
171 DBlue:=DBlue+DB;
172
173 IF FDirection IN [dUp,dLeft] THEN inc(StartLoop)
174 ELSE dec(StartLoop);
175 END;
176 END;
177 END; //case
178
179 Canvas.Pen.Color:=SaveColor;
180 Canvas.DeleteClipRegion;
181end;
182
183begin
184 RegisterClasses([TGradient]);
185end.
Note: See TracBrowser for help on using the repository browser.