1 | {***********************************************************************
|
---|
2 | * *
|
---|
3 | * This example implements a Win32 IExplore stlye "CoolBar" and also *
|
---|
4 | * shows how to implement a Class property editor *
|
---|
5 | * *
|
---|
6 | * (C) 1998 SpeedSoft *
|
---|
7 | * *
|
---|
8 | ***********************************************************************}
|
---|
9 |
|
---|
10 | Unit CoolBar;
|
---|
11 |
|
---|
12 | Interface
|
---|
13 |
|
---|
14 | Uses Classes,Forms,Graphics,Buttons,StdCtrls,ComCtrls,Dialogs;
|
---|
15 |
|
---|
16 | Type
|
---|
17 | TCoolSection=Class(THeaderSection)
|
---|
18 | Private
|
---|
19 | FImage:LongInt;
|
---|
20 | FHotImage:LongInt;
|
---|
21 | FDisabledImage:LongInt;
|
---|
22 | FDisabled:Boolean;
|
---|
23 | Private
|
---|
24 | Procedure SetDisabled(NewValue:Boolean);
|
---|
25 | Procedure SetImage(NewValue:LongInt);
|
---|
26 | Procedure SetHotImage(NewValue:LongInt);
|
---|
27 | Procedure SetDisabledImage(NewValue:LongInt);
|
---|
28 | Public
|
---|
29 | Constructor Create(ACollection:TCollection);Override;
|
---|
30 | Procedure Assign(Source:TCollectionItem);Override;
|
---|
31 | Public
|
---|
32 | Property Disabled:Boolean read FDisabled write SetDisabled;
|
---|
33 | Property Image:LongInt read FImage write SetImage;
|
---|
34 | Property HotImage:LongInt read FHotImage write SetHotImage;
|
---|
35 | Property DisabledImage:LongInt read FDisabledImage write SetDisabledImage;
|
---|
36 | End;
|
---|
37 |
|
---|
38 | TCoolSections=Class(THeaderSections)
|
---|
39 | Public
|
---|
40 | Procedure SetupComponent;Override;
|
---|
41 | End;
|
---|
42 |
|
---|
43 | TDrawCoolSectionEvent=Procedure(HeaderControl:THeaderControl;Section:TCoolSection;
|
---|
44 | Const rc:TRect;Pressed,Hot,Enabled:Boolean) Of Object;
|
---|
45 |
|
---|
46 | TCoolBar=Class(THeaderControl)
|
---|
47 | Private
|
---|
48 | FBackgroundBitmap:TBitmap;
|
---|
49 | FActiveSection:TCoolSection;
|
---|
50 | FImages:TImageList;
|
---|
51 | FFlat:Boolean;
|
---|
52 | FBackgroundOffset:LongWord;
|
---|
53 | FMouseTimer:TTimer;
|
---|
54 | FOnDrawSection:TDrawCoolSectionEvent;
|
---|
55 | Private
|
---|
56 | Procedure EvFMouseTimer(Sender:TObject);
|
---|
57 | Procedure SetBackgroundBitmap(NewValue:TBitmap);
|
---|
58 | Procedure UpdateHeader(Header:THeaderSection);Override;
|
---|
59 | Procedure SetImages(NewValue:TImageList);
|
---|
60 | Procedure SetFlat(NewValue:Boolean);
|
---|
61 | Procedure SetBackgroundOffset(NewValue:LongWord);
|
---|
62 | Function GetSections:TCoolSections;
|
---|
63 | Procedure SetSections(NewValue:TCoolSections);
|
---|
64 | Protected
|
---|
65 | Procedure DrawSection(Section:TCoolSection;Const rc:TRect;Pressed,Hot,Enabled:Boolean);Virtual;
|
---|
66 | Procedure MouseDown(Button:TMouseButton;ShiftState:TShiftState;X,Y:LongInt);Override;
|
---|
67 | Procedure MouseDblClick(Button:TMouseButton;ShiftState:TShiftState;X,Y:LongInt);Override;
|
---|
68 | Procedure MouseMove(ShiftState:TShiftState;X,Y:LongInt);Override;
|
---|
69 | Procedure Notification(AComponent:TComponent;Operation:TOperation);Override;
|
---|
70 | Public
|
---|
71 | Procedure SetupComponent;Override;
|
---|
72 | Procedure Redraw(Const rec:TRect);Override;
|
---|
73 | Procedure ReadSCUResource(Const ResName:TResourceName;Var Data;DataLen:LongInt);Override;
|
---|
74 | Function WriteSCUResource(Stream:TResourceStream):Boolean;Override;
|
---|
75 | Published
|
---|
76 | Property BackgroundBitmap:TBitmap read FBackgroundBitmap write SetBackgroundBitmap;
|
---|
77 | Property BackgroundOffset:LongWord read FBackgroundOffset write SetBackgroundOffset;
|
---|
78 | Property Images:TImageList read FImages write SetImages;
|
---|
79 | Property Flat:Boolean read FFlat write SetFlat;
|
---|
80 | Property Sections:TCoolSections Read GetSections Write SetSections;
|
---|
81 | Published
|
---|
82 | Property OnDrawSection:TDrawCoolSectionEvent Read FOnDrawSection Write FOnDrawSection;
|
---|
83 | End;
|
---|
84 |
|
---|
85 | Implementation
|
---|
86 |
|
---|
87 | {$R CoolBar}
|
---|
88 |
|
---|
89 | {
|
---|
90 | ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
---|
91 | º º
|
---|
92 | º Speed-Pascal/2 Version 2.0 º
|
---|
93 | º º
|
---|
94 | º Speed-Pascal Component Classes (SPCC) º
|
---|
95 | º º
|
---|
96 | º This section: TCoolSection Class Implementation º
|
---|
97 | º º
|
---|
98 | º (C) 1995,97 SpeedSoft. All rights reserved. Disclosure probibited ! º
|
---|
99 | º º
|
---|
100 | ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍŒ
|
---|
101 | }
|
---|
102 |
|
---|
103 | Constructor TCoolSection.Create(ACollection:TCollection);
|
---|
104 | Begin
|
---|
105 | Inherited Create(ACollection);
|
---|
106 | FImage:=-1;
|
---|
107 | FHotImage:=-1;
|
---|
108 | FDisabledImage:=-1;
|
---|
109 | End;
|
---|
110 |
|
---|
111 | Procedure TCoolSection.Assign(Source:TCollectionItem);
|
---|
112 | Begin
|
---|
113 | Inherited Assign(Source);
|
---|
114 | If Source Is TCoolSection Then
|
---|
115 | If Source<>Self Then
|
---|
116 | Begin
|
---|
117 | FImage:=TCoolSection(Source).Image;
|
---|
118 | FHotImage:=TCoolSection(Source).HotImage;
|
---|
119 | FDisabledImage:=TCoolSection(Source).DisabledImage;
|
---|
120 | FDisabled:=TCoolSection(Source).Disabled;
|
---|
121 | End;
|
---|
122 | End;
|
---|
123 |
|
---|
124 | Procedure TCoolSection.SetDisabled(NewValue:Boolean);
|
---|
125 | Begin
|
---|
126 | If NewValue=FDisabled Then exit;
|
---|
127 | FDisabled:=NewValue;
|
---|
128 | Changed(False);
|
---|
129 | End;
|
---|
130 |
|
---|
131 | Procedure TCoolSection.SetImage(NewValue:LongInt);
|
---|
132 | Begin
|
---|
133 | If NewValue=FImage Then exit;
|
---|
134 | FImage:=NewValue;
|
---|
135 | Changed(False);
|
---|
136 | End;
|
---|
137 |
|
---|
138 | Procedure TCoolSection.SetHotImage(NewValue:LongInt);
|
---|
139 | Begin
|
---|
140 | If NewValue=FHotImage Then exit;
|
---|
141 | FHotImage:=NewValue;
|
---|
142 | Changed(False);
|
---|
143 | End;
|
---|
144 |
|
---|
145 | Procedure TCoolSection.SetDisabledImage(NewValue:LongInt);
|
---|
146 | Begin
|
---|
147 | If NewValue=FDisabledImage Then exit;
|
---|
148 | FDisabledImage:=NewValue;
|
---|
149 | Changed(False);
|
---|
150 | End;
|
---|
151 |
|
---|
152 | {
|
---|
153 | ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
---|
154 | º º
|
---|
155 | º Speed-Pascal/2 Version 2.0 º
|
---|
156 | º º
|
---|
157 | º Speed-Pascal Component Classes (SPCC) º
|
---|
158 | º º
|
---|
159 | º This section: TCoolSections Class Implementation º
|
---|
160 | º º
|
---|
161 | º (C) 1995,97 SpeedSoft. All rights reserved. Disclosure probibited ! º
|
---|
162 | º º
|
---|
163 | ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍŒ
|
---|
164 | }
|
---|
165 |
|
---|
166 | Procedure TCoolSections.SetupComponent;
|
---|
167 | Begin
|
---|
168 | Inherited SetupComponent;
|
---|
169 | Name:='CoolSections';
|
---|
170 | ItemClass:=TCoolSection;
|
---|
171 | End;
|
---|
172 |
|
---|
173 | {
|
---|
174 | ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
---|
175 | º º
|
---|
176 | º Speed-Pascal/2 Version 2.0 º
|
---|
177 | º º
|
---|
178 | º Speed-Pascal Component Classes (SPCC) º
|
---|
179 | º º
|
---|
180 | º This section: TCoolBar Class Implementation º
|
---|
181 | º º
|
---|
182 | º (C) 1995,97 SpeedSoft. All rights reserved. Disclosure probibited ! º
|
---|
183 | º º
|
---|
184 | ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍŒ
|
---|
185 | }
|
---|
186 |
|
---|
187 | Procedure TCoolBar.SetupComponent;
|
---|
188 | Begin
|
---|
189 | Inherited SetupComponent;
|
---|
190 |
|
---|
191 | FBackgroundBitmap.Create;
|
---|
192 | FBackgroundBitmap.LoadFromResourceName('Cool');
|
---|
193 | FFlat:=True;
|
---|
194 | FMouseTimer.Create(Self);
|
---|
195 | Include(FMouseTimer.ComponentState, csDetail);
|
---|
196 | FMouseTimer.Interval := 50;
|
---|
197 | FMouseTimer.OnTimer := EvFMouseTimer;
|
---|
198 | Name:='CoolBar';
|
---|
199 | SectionsClass:=TCoolSections;
|
---|
200 | End;
|
---|
201 |
|
---|
202 | Procedure TCoolBar.SetFlat(NewValue:Boolean);
|
---|
203 | Begin
|
---|
204 | If NewValue=FFlat Then exit;
|
---|
205 | FFlat:=NewValue;
|
---|
206 | Invalidate;
|
---|
207 | End;
|
---|
208 |
|
---|
209 | Function TCoolBar.GetSections:TCoolSections;
|
---|
210 | Begin
|
---|
211 | Result:=TCoolSections(Inherited Sections);
|
---|
212 | End;
|
---|
213 |
|
---|
214 | Procedure TCoolBar.SetSections(NewValue:TCoolSections);
|
---|
215 | Begin
|
---|
216 | Inherited Sections:=NewValue;
|
---|
217 | End;
|
---|
218 |
|
---|
219 |
|
---|
220 | Procedure TCoolBar.SetImages(NewValue:TImageList);
|
---|
221 | Begin
|
---|
222 | If NewValue=FImages Then exit;
|
---|
223 | If FImages<>Nil Then FImages.Notification(Self,opRemove);
|
---|
224 | FImages:=NewValue;
|
---|
225 | If FImages <> Nil Then FImages.FreeNotification(Self);
|
---|
226 | Invalidate;
|
---|
227 | End;
|
---|
228 |
|
---|
229 | Procedure TCoolBar.Notification(AComponent:TComponent;Operation:TOperation);
|
---|
230 | Begin
|
---|
231 | Inherited Notification(AComponent,Operation);
|
---|
232 |
|
---|
233 | If Operation = opRemove Then
|
---|
234 | If AComponent = FImages Then FImages := Nil;
|
---|
235 | End;
|
---|
236 |
|
---|
237 |
|
---|
238 | Procedure TCoolBar.SetBackgroundBitmap(NewValue:TBitmap);
|
---|
239 | Begin
|
---|
240 | If NewValue=FBackgroundBitmap Then exit;
|
---|
241 | If FBackgroundBitmap<>Nil Then FBackgroundBitmap.Destroy;
|
---|
242 | If NewValue<>Nil Then FBackgroundBitmap:=NewValue.Copy
|
---|
243 | Else FBackgroundBitmap:=Nil;
|
---|
244 | End;
|
---|
245 |
|
---|
246 | Procedure TCoolBar.SetBackgroundOffset(NewValue:LongWord);
|
---|
247 | Begin
|
---|
248 | If NewValue=FBackgroundOffset Then exit;
|
---|
249 | FBackgroundOffset:=NewValue;
|
---|
250 | Invalidate;
|
---|
251 | End;
|
---|
252 |
|
---|
253 | Procedure TCoolBar.DrawSection(Section:TCoolSection;Const rc:TRect;Pressed,Hot,Enabled:Boolean);
|
---|
254 | Var
|
---|
255 | Align:TAlignment;
|
---|
256 | S:String;
|
---|
257 | CX,CY,CX1,CY1,H,X,Y:LongInt;
|
---|
258 | rec,bmprec:TRect;
|
---|
259 | PointsArray:Array[0..5] Of TPoint;
|
---|
260 | offs:LongInt;
|
---|
261 | FBitmap,FMask:TBitmap;
|
---|
262 |
|
---|
263 | Procedure DrawMasked(Bitmap,Mask:TBitmap;X,Y:LongInt);
|
---|
264 | Var Source,Dest:TRect;
|
---|
265 | Begin
|
---|
266 | If Bitmap=Nil Then exit;
|
---|
267 | Source.Left:=0;
|
---|
268 | Source.Bottom:=0;
|
---|
269 | Dest.Left:=X;
|
---|
270 | Dest.Bottom:=Y;
|
---|
271 |
|
---|
272 | If Mask<>Nil Then
|
---|
273 | Begin
|
---|
274 | Source.Right:=Mask.Width;
|
---|
275 | Source.Top:=Mask.Height;
|
---|
276 | Dest.Top:=Dest.Bottom+Mask.Height;
|
---|
277 | Dest.Right:=Dest.Left+Mask.Width;
|
---|
278 | Mask.Canvas.BitBlt(Canvas,Dest,Source,cmSrcAnd,bitfIgnore);
|
---|
279 | End;
|
---|
280 |
|
---|
281 | Source.Right:=Bitmap.Width;
|
---|
282 | Source.Top:=Bitmap.Height;
|
---|
283 | Dest.Top:=Dest.Bottom+Bitmap.Height;
|
---|
284 | Dest.Right:=Dest.Left+Bitmap.Width;
|
---|
285 | If Mask<>Nil Then
|
---|
286 | Bitmap.Canvas.BitBlt(Canvas,Dest,Source,cmSrcPaint,bitfIgnore)
|
---|
287 | Else
|
---|
288 | Bitmap.Canvas.BitBlt(Canvas,Dest,Source,cmSrcCopy,bitfIgnore);
|
---|
289 |
|
---|
290 | Canvas.ExcludeClipRect(Dest);
|
---|
291 | End;
|
---|
292 |
|
---|
293 | Begin
|
---|
294 | Align:=section.Alignment;
|
---|
295 | S:=section.Text;
|
---|
296 |
|
---|
297 | If S='' Then
|
---|
298 | Begin
|
---|
299 | CX:=0;
|
---|
300 | CY:=0;
|
---|
301 | End
|
---|
302 | Else Canvas.GetTextExtent(S,CX,CY);
|
---|
303 |
|
---|
304 | FBitmap:=Nil;
|
---|
305 | FMask:=Nil;
|
---|
306 | If FImages<>Nil Then If FImages.Count>0 Then
|
---|
307 | Begin
|
---|
308 | If not Enabled Then
|
---|
309 | Begin
|
---|
310 | If Section.DisabledImage>=0 Then
|
---|
311 | If FImages.Count>Section.DisabledImage Then
|
---|
312 | Begin
|
---|
313 | FBitmap.Create;
|
---|
314 | FImages.GetBitmap(Section.DisabledImage,FBitmap);
|
---|
315 | FMask.Create;
|
---|
316 | FImages.GetMask(Section.DisabledImage,FMask);
|
---|
317 | End;
|
---|
318 | End
|
---|
319 | Else If Hot Then
|
---|
320 | Begin
|
---|
321 | If Section.HotImage>=0 Then
|
---|
322 | If FImages.Count>Section.HotImage Then
|
---|
323 | Begin
|
---|
324 | FBitmap.Create;
|
---|
325 | FImages.GetBitmap(Section.HotImage,FBitmap);
|
---|
326 | FMask.Create;
|
---|
327 | FImages.GetMask(Section.HotImage,FMask);
|
---|
328 | End;
|
---|
329 | End;
|
---|
330 |
|
---|
331 | If FBitmap<>Nil Then If FBitmap.Empty Then
|
---|
332 | Begin
|
---|
333 | FBitmap.Destroy;
|
---|
334 | FBitmap:=Nil;
|
---|
335 | End;
|
---|
336 |
|
---|
337 | If FMask<>Nil Then If FMask.Empty Then
|
---|
338 | Begin
|
---|
339 | FMask.Destroy;
|
---|
340 | FMask:=Nil;
|
---|
341 | End;
|
---|
342 |
|
---|
343 | If FBitmap=Nil Then
|
---|
344 | Begin
|
---|
345 | If Section.Image>=0 Then
|
---|
346 | If FImages.Count>Section.Image Then
|
---|
347 | Begin
|
---|
348 | FBitmap.Create;
|
---|
349 | FImages.GetBitmap(Section.Image,FBitmap);
|
---|
350 | FMask.Create;
|
---|
351 | FImages.GetMask(Section.Image,FMask);
|
---|
352 | End;
|
---|
353 | End;
|
---|
354 |
|
---|
355 | If FBitmap<>Nil Then If FBitmap.Empty Then
|
---|
356 | Begin
|
---|
357 | FBitmap.Destroy;
|
---|
358 | FBitmap:=Nil;
|
---|
359 | End;
|
---|
360 |
|
---|
361 | If FMask<>Nil Then If FMask.Empty Then
|
---|
362 | Begin
|
---|
363 | FMask.Destroy;
|
---|
364 | FMask:=Nil;
|
---|
365 | End;
|
---|
366 | End;
|
---|
367 |
|
---|
368 | CX1:=CX;
|
---|
369 | CY1:=CY;
|
---|
370 |
|
---|
371 | If FBitmap<>Nil Then
|
---|
372 | Begin
|
---|
373 | If Align=taCenter Then inc(CY1,FBitmap.Height+3)
|
---|
374 | Else inc(CX1,FBitmap.Width+3);
|
---|
375 | End;
|
---|
376 |
|
---|
377 | Case Align Of
|
---|
378 | taLeftJustify:
|
---|
379 | Begin
|
---|
380 | H:=rc.Right-rc.Left;
|
---|
381 | rec.Left:=rc.Left+((H-CX1) Div 2);
|
---|
382 | End;
|
---|
383 | taRightJustify:
|
---|
384 | Begin
|
---|
385 | H:=rc.Right-rc.Left;
|
---|
386 | rec.Left:=rc.Left+((H-CX1) Div 2);
|
---|
387 | If FBitmap<>Nil Then inc(rec.Left,FBitmap.Width);
|
---|
388 | End
|
---|
389 | Else //taCenter
|
---|
390 | Begin
|
---|
391 | H:=rc.Right-rc.Left;
|
---|
392 | rec.Left:=rc.Left+((H-CX) Div 2);
|
---|
393 | End;
|
---|
394 | End; //Case
|
---|
395 |
|
---|
396 | If rec.Left<rc.Left+3 Then rec.Left:=rc.Left+3;
|
---|
397 |
|
---|
398 | H:=rc.Top-rc.Bottom;
|
---|
399 | rec.Bottom:=rc.Bottom+((H-CY1) Div 2);
|
---|
400 | If rec.Bottom<rc.Bottom+3 Then rec.Bottom:=rc.Bottom+3;
|
---|
401 | rec.Right:=rec.Left+CX-1;
|
---|
402 | rec.Top:=rec.Bottom+CY-1;
|
---|
403 |
|
---|
404 | //Draw Bitmap
|
---|
405 | If FBitmap<>Nil Then
|
---|
406 | Begin
|
---|
407 | H:=rc.Top-rc.Bottom;
|
---|
408 | Y:=rc.Bottom+((H-CY1) Div 2);
|
---|
409 | If Y<rc.Bottom+3 Then Y:=rc.Bottom+3;
|
---|
410 |
|
---|
411 | Case Align Of
|
---|
412 | taLeftJustify:
|
---|
413 | Begin
|
---|
414 | DrawMasked(FBitmap,FMask,rec.Right+3,Y);
|
---|
415 | End;
|
---|
416 | taRightJustify:
|
---|
417 | Begin
|
---|
418 | DrawMasked(FBitmap,FMask,rec.Left-3-FBitmap.Width,Y);
|
---|
419 | End;
|
---|
420 | Else //taCenter
|
---|
421 | Begin
|
---|
422 | H:=rc.Right-rc.Left;
|
---|
423 | X:=rc.Left+((H-FBitmap.Width) Div 2);
|
---|
424 | If X<rc.Left+3 Then X:=rc.Left+3;
|
---|
425 | DrawMasked(FBitmap,FMask,X,Y+CY+3);
|
---|
426 | End;
|
---|
427 | End; //Case
|
---|
428 |
|
---|
429 | FBitmap.Destroy;
|
---|
430 | If FMask<>Nil Then FMask.Destroy;
|
---|
431 | End;
|
---|
432 |
|
---|
433 | If S<>'' Then
|
---|
434 | Begin
|
---|
435 | Canvas.Brush.Mode:=bmTransparent;
|
---|
436 | If not Enabled Then Canvas.Pen.Color:=clDkGray
|
---|
437 | Else Canvas.Pen.Color:=PenColor;
|
---|
438 |
|
---|
439 | Canvas.TextOut(rec.Left,rec.Bottom,S);
|
---|
440 | Canvas.Brush.Mode:=bmOpaque;
|
---|
441 |
|
---|
442 | Canvas.ExcludeClipRect(rec);
|
---|
443 | End;
|
---|
444 |
|
---|
445 | If ((not Flat)Or(Hot And Enabled)) Then
|
---|
446 | Begin
|
---|
447 | If BevelWidth > 1 Then
|
---|
448 | Begin
|
---|
449 | offs := BevelWidth-1;
|
---|
450 | PointsArray[0] := Point(rc.Left,rc.Bottom);
|
---|
451 | PointsArray[1] := Point(rc.Left+offs,rc.Bottom+offs);
|
---|
452 | PointsArray[2] := Point(rc.Left+offs,rc.Top-offs);
|
---|
453 | PointsArray[3] := Point(rc.Right-offs,rc.Top-offs);
|
---|
454 | PointsArray[4] := Point(rc.Right,rc.Top);
|
---|
455 | PointsArray[5] := Point(rc.Left,rc.Top);
|
---|
456 | Canvas.Pen.color := clWhite;
|
---|
457 | Canvas.Polygon(PointsArray);
|
---|
458 | PointsArray[2] := Point(rc.Right-offs,rc.Bottom+offs);
|
---|
459 | PointsArray[3] := Point(rc.Right-offs,rc.Top-offs);
|
---|
460 | PointsArray[4] := Point(rc.Right,rc.Top);
|
---|
461 | PointsArray[5] := Point(rc.Right,rc.Bottom);
|
---|
462 | Canvas.Pen.color := clDkGray;
|
---|
463 | Canvas.Polygon(PointsArray);
|
---|
464 | Canvas.Pen.color:=PenColor;
|
---|
465 | End
|
---|
466 | Else Canvas.ShadowedBorder(rc,clWhite,clDkGray);
|
---|
467 | End;
|
---|
468 | End;
|
---|
469 |
|
---|
470 | Type
|
---|
471 | PHeaderItem=^THeaderItem;
|
---|
472 | THeaderItem=Record
|
---|
473 | Image:LongInt;
|
---|
474 | HotImage:LongInt;
|
---|
475 | DisabledImage:LongInt;
|
---|
476 | Disabled:Boolean;
|
---|
477 | End;
|
---|
478 |
|
---|
479 | Const rnCoolHeaders='rnCoolHeaders';
|
---|
480 |
|
---|
481 | Procedure TCoolBar.ReadSCUResource(Const ResName:TResourceName;Var Data;DataLen:LongInt);
|
---|
482 | Var
|
---|
483 | Count:^LongInt;
|
---|
484 | Items:PHeaderItem;
|
---|
485 | section:TCoolSection;
|
---|
486 | T:LongInt;
|
---|
487 | ps:^String;
|
---|
488 | Begin
|
---|
489 | If ResName = rnCoolHeaders Then
|
---|
490 | Begin
|
---|
491 | Count:=@Data;
|
---|
492 | Items:=@Data;
|
---|
493 | Inc(Items,4);
|
---|
494 | For T:=1 To Count^ Do
|
---|
495 | Begin
|
---|
496 | Section:=TCoolSection(Sections[t-1]);
|
---|
497 | section.Image:=Items^.Image;
|
---|
498 | section.HotImage:=Items^.HotImage;
|
---|
499 | section.DisabledImage:=Items^.DisabledImage;
|
---|
500 | section.Disabled:=Items^.Disabled;
|
---|
501 | Inc(Items,SizeOf(THeaderItem));
|
---|
502 | End;
|
---|
503 | End
|
---|
504 | Else Inherited ReadSCUResource(ResName,Data,DataLen);
|
---|
505 | End;
|
---|
506 |
|
---|
507 |
|
---|
508 | Function TCoolBar.WriteSCUResource(Stream:TResourceStream):Boolean;
|
---|
509 | Var MemStream:TMemoryStream;
|
---|
510 | T:LongInt;
|
---|
511 | Item:THeaderItem;
|
---|
512 | section:TCoolSection;
|
---|
513 | S:String;
|
---|
514 | Begin
|
---|
515 | Result := Inherited WriteSCUResource(Stream);
|
---|
516 | If Not Result Then Exit;
|
---|
517 |
|
---|
518 | If Sections<>Nil Then If Sections.Count>0 Then
|
---|
519 | Begin
|
---|
520 | MemStream.Create;
|
---|
521 | T:=Sections.Count;
|
---|
522 | MemStream.Write(T,4);
|
---|
523 | For T:=0 To Sections.Count-1 Do
|
---|
524 | Begin
|
---|
525 | section:=TCoolSection(Sections[T]);
|
---|
526 | Item.Image:=section.Image;
|
---|
527 | Item.HotImage:=section.HotImage;
|
---|
528 | Item.DisabledImage:=section.DisabledImage;
|
---|
529 | Item.Disabled:=section.Disabled;
|
---|
530 | MemStream.Write(Item,SizeOf(THeaderItem));
|
---|
531 | End;
|
---|
532 |
|
---|
533 | Result:=Stream.NewResourceEntry(rnCoolHeaders,MemStream.Memory^,MemStream.Size);
|
---|
534 | MemStream.Destroy;
|
---|
535 | End;
|
---|
536 | End;
|
---|
537 |
|
---|
538 |
|
---|
539 | Procedure TCoolBar.Redraw(Const rec:TRect);
|
---|
540 | Var X,Y:LongInt;
|
---|
541 | rc,rc2,Src:TRect;
|
---|
542 | FSections:TCoolSections;
|
---|
543 | Section:TCoolSection;
|
---|
544 | IsPressed:Boolean;
|
---|
545 | t,W:LongInt;
|
---|
546 | Begin
|
---|
547 | Canvas.ClipRect:=rec;
|
---|
548 |
|
---|
549 | If FBackgroundBitmap<>Nil Then
|
---|
550 | Begin
|
---|
551 | Y:=0;
|
---|
552 | While Y<Height Do
|
---|
553 | Begin
|
---|
554 | X:=0;
|
---|
555 | While X<Width Do
|
---|
556 | Begin
|
---|
557 | rc.Left:=X;
|
---|
558 | rc.Right:=rc.Left+FBackgroundBitmap.Width;
|
---|
559 | rc.Bottom:=Y;
|
---|
560 | rc.Top:=rc.Bottom+FBackgroundBitmap.Height;
|
---|
561 | If ((BackgroundOffset<>0)And(Y=0)And(X=0)) Then
|
---|
562 | Begin
|
---|
563 | W:=BackgroundOffset;
|
---|
564 | If W>BackgroundBitmap.Width Then W:=BackgroundBitmap.Width;
|
---|
565 | Src.Left:=W;
|
---|
566 | Src.Bottom:=0;
|
---|
567 | Src.Right:=FBackGroundBitmap.Width;
|
---|
568 | Src.Top:=FBackGroundBitmap.Height;
|
---|
569 | rc.Right:=rc.Left+(BackgroundBitmap.Width-W);
|
---|
570 | FBackgroundBitmap.PartialDraw(Canvas,Src,rc);
|
---|
571 | inc(X,BackgroundBitmap.Width-W);
|
---|
572 | End
|
---|
573 | Else
|
---|
574 | Begin
|
---|
575 | FBackgroundBitmap.Draw(Canvas,rc);
|
---|
576 | inc(X,FBackgroundBitmap.Width);
|
---|
577 | End;
|
---|
578 | End;
|
---|
579 | inc(Y,FBackgroundBitmap.Height);
|
---|
580 | End;
|
---|
581 | End
|
---|
582 | Else Canvas.FillRect(rec,Color);
|
---|
583 |
|
---|
584 | FSections:=TCoolSections(Sections);
|
---|
585 | rc:=ClientRect;
|
---|
586 | Inc(rc.Bottom);
|
---|
587 | For T:=0 To FSections.Count-1 Do
|
---|
588 | Begin
|
---|
589 | Section:=TCoolSection(FSections[T]);
|
---|
590 | rc.Right:=rc.Left+section.Width;
|
---|
591 | If rc.Right>Width-1 Then rc.Right:=Width-1;
|
---|
592 |
|
---|
593 | IsPressed:=Section=ClickSection;
|
---|
594 | If IsPressed Then
|
---|
595 | Begin
|
---|
596 | Inc(rc.Left);
|
---|
597 | Inc(rc.Right);
|
---|
598 | Dec(rc.Bottom);
|
---|
599 | Dec(rc.Top);
|
---|
600 | End;
|
---|
601 |
|
---|
602 | rc2:=Forms.IntersectRect(rc,rec);
|
---|
603 | If Not Forms.IsRectEmpty(rc2) Then
|
---|
604 | Begin
|
---|
605 | inc(rc2.Right);
|
---|
606 | Canvas.ClipRect:=rc2;
|
---|
607 |
|
---|
608 | If Section.Style=hsOwnerDraw Then
|
---|
609 | Begin
|
---|
610 | If OnDrawSection<>Nil Then OnDrawSection(Self,section,rc,IsPressed,Section=FActiveSection,Section.Disabled=False)
|
---|
611 | Else DrawSection(Section,rc,IsPressed,Section=FActiveSection,Section.Disabled=False);
|
---|
612 | End
|
---|
613 | Else DrawSection(section,rc,IsPressed,Section=FActiveSection,Section.Disabled=False);
|
---|
614 | End;
|
---|
615 |
|
---|
616 | If IsPressed Then
|
---|
617 | Begin
|
---|
618 | Dec(rc.Left);
|
---|
619 | Dec(rc.Right);
|
---|
620 | Inc(rc.Bottom);
|
---|
621 | Inc(rc.Top);
|
---|
622 | End;
|
---|
623 | Inc(rc.Left,Section.Width+Spacing+1);
|
---|
624 | End;
|
---|
625 |
|
---|
626 | Canvas.DeleteClipRegion;
|
---|
627 | End;
|
---|
628 |
|
---|
629 | Procedure TCoolBar.MouseDown(Button:TMouseButton;ShiftState:TShiftState;X,Y:LongInt);
|
---|
630 | Var T:LongInt;
|
---|
631 | section:TCoolSection;
|
---|
632 | FSections:TCoolSections;
|
---|
633 | Begin
|
---|
634 | TControl.MouseDown(Button,ShiftState,X,Y);
|
---|
635 |
|
---|
636 | If Button <> mbLeft Then Exit;
|
---|
637 |
|
---|
638 | FSections:=TCoolSections(Sections);
|
---|
639 | For T:=0 To FSections.Count-1 Do
|
---|
640 | Begin
|
---|
641 | section:=TCoolSection(FSections[T]);
|
---|
642 | If ((section.AllowSize)And(X>section.Right-2)And(X<section.Right+2)) Then
|
---|
643 | Begin
|
---|
644 | Inherited MouseDown(Button,ShiftState,X,Y);
|
---|
645 | exit;
|
---|
646 | End;
|
---|
647 | End;
|
---|
648 |
|
---|
649 | If Designed Then Exit;
|
---|
650 |
|
---|
651 | //Test Press
|
---|
652 | Section:=TCoolSection(GetMouseHeader(X,Y));
|
---|
653 | If Section<>Nil Then If section.AllowClick Then If not Section.Disabled Then
|
---|
654 | Inherited MouseDown(Button,ShiftState,X,Y);
|
---|
655 | End;
|
---|
656 |
|
---|
657 | Procedure TCoolBar.MouseDblClick(Button:TMouseButton;ShiftState:TShiftState;X,Y:LongInt);
|
---|
658 | Var section:TCoolSection;
|
---|
659 | Begin
|
---|
660 | If Button=mbLeft Then
|
---|
661 | Begin
|
---|
662 | Section:=TCoolSection(GetMouseHeader(X,Y));
|
---|
663 | If Section<>Nil Then If section.AllowClick Then If not Section.Disabled Then
|
---|
664 | Inherited MouseDblClick(Button,ShiftState,X,Y);
|
---|
665 | End
|
---|
666 | Else Inherited MouseDblClick(Button,ShiftState,X,Y);
|
---|
667 | End;
|
---|
668 |
|
---|
669 | Procedure TCoolBar.UpdateHeader(Header:THeaderSection);
|
---|
670 | Var T:LongInt;
|
---|
671 | rc:TRect;
|
---|
672 | FSections:TCoolSections;
|
---|
673 | Begin
|
---|
674 | //Get Rectangle For the Panel
|
---|
675 | rc:=ClientRect;
|
---|
676 | FSections:=TCoolSections(Sections);
|
---|
677 | For T:=0 To FSections.Count-1 Do
|
---|
678 | Begin
|
---|
679 | If FSections[T]=Header Then break
|
---|
680 | Else Inc(rc.Left,FSections[T].Width+Spacing+1);
|
---|
681 | End;
|
---|
682 |
|
---|
683 | rc.Right:=rc.Left+Header.Width+1;
|
---|
684 | If not Flat Then InflateRect(rc,-BevelWidth*2,-BevelWidth*2);
|
---|
685 | InvalidateRect(rc);
|
---|
686 | Update;
|
---|
687 | End;
|
---|
688 |
|
---|
689 |
|
---|
690 | Procedure TCoolBar.MouseMove(ShiftState:TShiftState;X,Y:LongInt);
|
---|
691 | Var
|
---|
692 | Section,OldActiveSection:TCoolSection;
|
---|
693 | Begin
|
---|
694 | FMouseTimer.Stop;
|
---|
695 |
|
---|
696 | OldActiveSection:=FActiveSection;
|
---|
697 | Section:=TCoolSection(GetMouseHeader(X,Y));
|
---|
698 | If ((Section=Nil)Or(not Section.Disabled)) Then FActiveSection:=Section;
|
---|
699 |
|
---|
700 | Inherited MouseMove(ShiftState,X,Y);
|
---|
701 |
|
---|
702 | If FActiveSection<>OldActiveSection Then
|
---|
703 | Begin
|
---|
704 | If OldActiveSection<>Nil Then UpdateHeader(OldActiveSection);
|
---|
705 | If FActiveSection<>Nil Then UpdateHeader(FActiveSection);
|
---|
706 | End;
|
---|
707 |
|
---|
708 | If FFlat Then FMouseTimer.Start;
|
---|
709 | End;
|
---|
710 |
|
---|
711 |
|
---|
712 | Procedure TCoolBar.EvFMouseTimer(Sender:TObject);
|
---|
713 | Var
|
---|
714 | AControl:TControl;
|
---|
715 | OldActiveSection:TCoolSection;
|
---|
716 | Begin
|
---|
717 | FMouseTimer.Stop;
|
---|
718 |
|
---|
719 | AControl := Screen.GetControlFromPoint(Screen.MousePos);
|
---|
720 |
|
---|
721 | If AControl <> Self Then
|
---|
722 | Begin
|
---|
723 | OldActiveSection:=FActiveSection;
|
---|
724 | FActiveSection := Nil;
|
---|
725 | If OldActiveSection<>Nil Then UpdateHeader(OldActiveSection);
|
---|
726 | End
|
---|
727 | Else FMouseTimer.Start;
|
---|
728 | End;
|
---|
729 |
|
---|
730 | {
|
---|
731 | ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
---|
732 | º º
|
---|
733 | º Sibyl Version 2.0 º
|
---|
734 | º º
|
---|
735 | º This section: TCoolSectionsPropertyEditor Class implementation º
|
---|
736 | º º
|
---|
737 | º º
|
---|
738 | ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍŒ
|
---|
739 | }
|
---|
740 |
|
---|
741 | Type
|
---|
742 | TCoolSectionsPropertyEditor=Class(TClassPropertyEditor)
|
---|
743 | Public
|
---|
744 | Function Execute(Var ClassToEdit:TObject):TClassPropertyEditorReturn;Override;
|
---|
745 | End;
|
---|
746 |
|
---|
747 | TCoolSectionsPropEditDialog=Class(TDialog)
|
---|
748 | Private
|
---|
749 | FSections:TCoolSections;
|
---|
750 | FListBox:TListBox;
|
---|
751 | FText:TEdit;
|
---|
752 | FWidth:TEdit;
|
---|
753 | FMinWidth,FMaxWidth:TEdit;
|
---|
754 | FImage,FHotImage,FDisabledImage:TEdit;
|
---|
755 | FStyle:TComboBox;
|
---|
756 | FAlignment:TComboBox;
|
---|
757 | FCurrentSection:TCoolSection;
|
---|
758 | FCurrentIndex:LongInt;
|
---|
759 | FAllowClick:TCheckBox;
|
---|
760 | FAllowSize:TCheckBox;
|
---|
761 | FDisabled:TCheckBox;
|
---|
762 | Protected
|
---|
763 | Procedure SetupComponent;Override;
|
---|
764 | Procedure NewClicked(Sender:TObject);
|
---|
765 | Procedure DeleteClicked(Sender:TObject);
|
---|
766 | Procedure UpdateClicked(Sender:TObject);
|
---|
767 | Procedure ListItemFocus(Sender:TObject;Index:LongInt);
|
---|
768 | Procedure StoreItem;
|
---|
769 | Procedure TextChange(Sender:TObject);
|
---|
770 | Procedure WidthChange(Sender:TObject);
|
---|
771 | Procedure MinWidthChange(Sender:TObject);
|
---|
772 | Procedure MaxWidthChange(Sender:TObject);
|
---|
773 | Procedure ImageChange(Sender:TObject);
|
---|
774 | Procedure HotImageChange(Sender:TObject);
|
---|
775 | Procedure DisabledClick(Sender:TObject);
|
---|
776 | Procedure DisabledImageChange(Sender:TObject);
|
---|
777 | Procedure StyleSelect(Sender:TObject;Index:LongInt);
|
---|
778 | Procedure AlignmentSelect(Sender:TObject;Index:LongInt);
|
---|
779 | End;
|
---|
780 |
|
---|
781 |
|
---|
782 | {$HINTS OFF}
|
---|
783 | Procedure TCoolSectionsPropEditDialog.TextChange(Sender:TObject);
|
---|
784 | Begin
|
---|
785 | If FCurrentSection=Nil Then exit;
|
---|
786 | FCurrentSection.Text:=FText.Text;
|
---|
787 | End;
|
---|
788 |
|
---|
789 | Procedure TCoolSectionsPropEditDialog.WidthChange(Sender:TObject);
|
---|
790 | Var i:LongInt;
|
---|
791 | c:Integer;
|
---|
792 | Begin
|
---|
793 | If FCurrentSection=Nil Then exit;
|
---|
794 | VAL(FWidth.Text,i,c);
|
---|
795 | If c<>0 Then exit;
|
---|
796 | FCurrentSection.Width:=i;
|
---|
797 | End;
|
---|
798 |
|
---|
799 | Procedure TCoolSectionsPropEditDialog.MinWidthChange(Sender:TObject);
|
---|
800 | Var i:LongInt;
|
---|
801 | c:Integer;
|
---|
802 | Begin
|
---|
803 | If FCurrentSection=Nil Then exit;
|
---|
804 | VAL(FMinWidth.Text,i,c);
|
---|
805 | If c<>0 Then exit;
|
---|
806 | FCurrentSection.MinWidth:=i;
|
---|
807 | End;
|
---|
808 |
|
---|
809 | Procedure TCoolSectionsPropEditDialog.MaxWidthChange(Sender:TObject);
|
---|
810 | Var i:LongInt;
|
---|
811 | c:Integer;
|
---|
812 | Begin
|
---|
813 | If FCurrentSection=Nil Then exit;
|
---|
814 | VAL(FMaxWidth.Text,i,c);
|
---|
815 | If c<>0 Then exit;
|
---|
816 | FCurrentSection.MaxWidth:=i;
|
---|
817 | End;
|
---|
818 |
|
---|
819 | Procedure TCoolSectionsPropEditDialog.DisabledClick(Sender:TObject);
|
---|
820 | Begin
|
---|
821 | If FCurrentSection=Nil Then exit;
|
---|
822 | FCurrentSection.Disabled:=FDisabled.Checked;
|
---|
823 | End;
|
---|
824 |
|
---|
825 | Procedure TCoolSectionsPropEditDialog.ImageChange(Sender:TObject);
|
---|
826 | Var i:LongInt;
|
---|
827 | c:Integer;
|
---|
828 | Begin
|
---|
829 | If FCurrentSection=Nil Then exit;
|
---|
830 | VAL(FImage.Text,i,c);
|
---|
831 | If c<>0 Then exit;
|
---|
832 | FCurrentSection.Image:=i;
|
---|
833 | End;
|
---|
834 |
|
---|
835 | Procedure TCoolSectionsPropEditDialog.HotImageChange(Sender:TObject);
|
---|
836 | Var i:LongInt;
|
---|
837 | c:Integer;
|
---|
838 | Begin
|
---|
839 | If FCurrentSection=Nil Then exit;
|
---|
840 | VAL(FHotImage.Text,i,c);
|
---|
841 | If c<>0 Then exit;
|
---|
842 | FCurrentSection.HotImage:=i;
|
---|
843 | End;
|
---|
844 |
|
---|
845 | Procedure TCoolSectionsPropEditDialog.DisabledImageChange(Sender:TObject);
|
---|
846 | Var i:LongInt;
|
---|
847 | c:Integer;
|
---|
848 | Begin
|
---|
849 | If FCurrentSection=Nil Then exit;
|
---|
850 | VAL(FDisabledImage.Text,i,c);
|
---|
851 | If c<>0 Then exit;
|
---|
852 | FCurrentSection.DisabledImage:=i;
|
---|
853 | End;
|
---|
854 |
|
---|
855 |
|
---|
856 | Procedure TCoolSectionsPropEditDialog.StyleSelect(Sender:TObject;Index:LongInt);
|
---|
857 | Begin
|
---|
858 | If FCurrentSection=Nil Then exit;
|
---|
859 | If FStyle.Text='OwnerDraw' Then FCurrentSection.Style:=hsOwnerDraw
|
---|
860 | Else FCurrentSection.Style:=hsText;
|
---|
861 | End;
|
---|
862 |
|
---|
863 | Procedure TCoolSectionsPropEditDialog.AlignmentSelect(Sender:TObject;Index:LongInt);
|
---|
864 | Begin
|
---|
865 | If FCurrentSection=Nil Then exit;
|
---|
866 | If FAlignment.Text='Center' Then FCurrentSection.Alignment:=taCenter
|
---|
867 | Else If FAlignment.Text='Right justify' Then FCurrentSection.Alignment:=taRightJustify
|
---|
868 | Else FCurrentSection.Alignment:=taLeftJustify;
|
---|
869 | End;
|
---|
870 |
|
---|
871 | Procedure TCoolSectionsPropEditDialog.UpdateClicked(Sender:TObject);
|
---|
872 | Begin
|
---|
873 | StoreItem;
|
---|
874 | FSections.Update(Nil);
|
---|
875 | End;
|
---|
876 |
|
---|
877 | Procedure TCoolSectionsPropEditDialog.NewClicked(Sender:TObject);
|
---|
878 | Var Section:THeaderSection;
|
---|
879 | Begin
|
---|
880 | Section:=FSections.Add;
|
---|
881 | If Section.Text='' Then FListBox.Items.Add(tostr(Section.Index)+' - (Untitled)')
|
---|
882 | Else FListBox.Items.Add(tostr(Section.Index)+' - '+Section.Text);
|
---|
883 | FListBox.ItemIndex:=Section.Index;
|
---|
884 | FSections.Update(Nil);
|
---|
885 | End;
|
---|
886 |
|
---|
887 | Procedure TCoolSectionsPropEditDialog.DeleteClicked(Sender:TObject);
|
---|
888 | Var Section:THeaderSection;
|
---|
889 | Index:LongInt;
|
---|
890 | Begin
|
---|
891 | Index:=FListBox.ItemIndex;
|
---|
892 | If Index<0 Then exit;
|
---|
893 | FListBox.Items.Delete(Index);
|
---|
894 | Section:=FSections[Index];
|
---|
895 | Section.Destroy;
|
---|
896 | FCurrentSection:=Nil;
|
---|
897 | FCurrentIndex:=-1;
|
---|
898 | If FListBox.Items.Count>0 Then FListBox.ItemIndex:=0;
|
---|
899 | End;
|
---|
900 | {$HINTS ON}
|
---|
901 |
|
---|
902 | Procedure TCoolSectionsPropEditDialog.StoreItem;
|
---|
903 | Var c:Integer;
|
---|
904 | i:LongInt;
|
---|
905 | Begin
|
---|
906 | If FCurrentSection<>Nil Then //store values
|
---|
907 | Begin
|
---|
908 | FCurrentSection.Text:=FText.Text;
|
---|
909 | If FText.Text='' Then FListBox.Items[FCurrentIndex]:=tostr(FCurrentIndex)+' - (Untitled)'
|
---|
910 | Else FListBox.Items[FCurrentIndex]:=tostr(FCurrentIndex)+' - '+FText.Text;
|
---|
911 |
|
---|
912 | VAL(FWidth.Text,i,c);
|
---|
913 | If c<>0 Then i:=100;
|
---|
914 | FCurrentSection.Width:=i;
|
---|
915 |
|
---|
916 | VAL(FMinWidth.Text,i,c);
|
---|
917 | If c<>0 Then i:=0;
|
---|
918 | FCurrentSection.MinWidth:=i;
|
---|
919 |
|
---|
920 | VAL(FMaxWidth.Text,i,c);
|
---|
921 | If c<>0 Then i:=10000;
|
---|
922 | FCurrentSection.MaxWidth:=i;
|
---|
923 |
|
---|
924 | VAL(FImage.Text,i,c);
|
---|
925 | If c<>0 Then i:=10000;
|
---|
926 | FCurrentSection.Image:=i;
|
---|
927 |
|
---|
928 | VAL(FHotImage.Text,i,c);
|
---|
929 | If c<>0 Then i:=10000;
|
---|
930 | FCurrentSection.HotImage:=i;
|
---|
931 |
|
---|
932 | VAL(FDisabledImage.Text,i,c);
|
---|
933 | If c<>0 Then i:=10000;
|
---|
934 | FCurrentSection.DisabledImage:=i;
|
---|
935 |
|
---|
936 | FCurrentSection.Disabled:=FDisabled.Checked;
|
---|
937 |
|
---|
938 | If FStyle.Text='OwnerDraw' Then FCurrentSection.Style:=hsOwnerDraw
|
---|
939 | Else FCurrentSection.Style:=hsText;
|
---|
940 |
|
---|
941 | If FAlignment.Text='Center' Then FCurrentSection.Alignment:=taCenter
|
---|
942 | Else If FAlignment.Text='Right justify' Then FCurrentSection.Alignment:=taRightJustify
|
---|
943 | Else FCurrentSection.Alignment:=taLeftJustify;
|
---|
944 |
|
---|
945 | FCurrentSection.AllowClick:=FAllowClick.Checked;
|
---|
946 | FCurrentSection.AllowSize:=FAllowSize.Checked;
|
---|
947 | End;
|
---|
948 | End;
|
---|
949 |
|
---|
950 | Procedure TCoolSectionsPropEditDialog.ListItemFocus(Sender:TObject;Index:LongInt);
|
---|
951 | Begin
|
---|
952 | StoreItem;
|
---|
953 |
|
---|
954 | FCurrentSection:=TCoolSection(FSections[Index]);
|
---|
955 | FCurrentIndex:=Index;
|
---|
956 | FText.Text:=FCurrentSection.Text;
|
---|
957 | FWidth.Text:=tostr(FCurrentSection.Width);
|
---|
958 | FMinWidth.Text:=tostr(FCurrentSection.MinWidth);
|
---|
959 | FMaxWidth.Text:=tostr(FCurrentSection.MaxWidth);
|
---|
960 | FImage.Text:=tostr(FCurrentSection.Image);
|
---|
961 | FHotImage.Text:=tostr(FCurrentSection.HotImage);
|
---|
962 | FDisabledImage.Text:=tostr(FCurrentSection.DisabledImage);
|
---|
963 | FDisabled.Checked:=FCurrentSection.Disabled;
|
---|
964 | If FCurrentSection.Style=hsText Then FStyle.Text:='Text'
|
---|
965 | Else FStyle.Text:='OwnerDraw';
|
---|
966 |
|
---|
967 | Case FCurrentSection.Alignment Of
|
---|
968 | taRightJustify:FAlignment.Text:='Right justify';
|
---|
969 | taCenter:FAlignment.Text:='Center';
|
---|
970 | Else FAlignment.Text:='Left justify';
|
---|
971 | End;
|
---|
972 |
|
---|
973 | FAllowClick.Checked:=FCurrentSection.AllowClick;
|
---|
974 | FAllowSize.Checked:=FCurrentSection.AllowSize;
|
---|
975 | End;
|
---|
976 |
|
---|
977 | Procedure TCoolSectionsPropEditDialog.SetupComponent;
|
---|
978 | Var Button:TButton;
|
---|
979 | ComboBox:TComboBox;
|
---|
980 | Begin
|
---|
981 | Inherited SetupComponent;
|
---|
982 |
|
---|
983 | Caption:='CoolBar sections editor';
|
---|
984 | Width:=445;
|
---|
985 | Height:=380;
|
---|
986 |
|
---|
987 | InsertGroupBox(Self,10,50,180,290,'Sections');
|
---|
988 | FListBox:=InsertListBox(Self,20,100,160,220,'');
|
---|
989 | FListBox.OnItemFocus:=ListItemFocus;
|
---|
990 |
|
---|
991 | Button:=InsertButton(Self,20,60,70,30,'New','New Section');
|
---|
992 | Button.OnClick:=NewClicked;
|
---|
993 | Button:=InsertButton(Self,100,60,70,30,'Delete','Delete Section');
|
---|
994 | Button.OnClick:=DeleteClicked;
|
---|
995 |
|
---|
996 | InsertGroupBox(Self,200,50,230,290,'Section Properties');
|
---|
997 |
|
---|
998 | InsertLabel(Self,210,290,50,20,'Text');
|
---|
999 | FText:=InsertEdit(Self,280,295,140,20,'','');
|
---|
1000 | FText.OnChange:=TextChange;
|
---|
1001 |
|
---|
1002 | InsertLabel(Self,210,260,100,20,'Width');
|
---|
1003 | FWidth:=InsertEdit(Self,280,265,140,20,'','');
|
---|
1004 | FWidth.OnChange:=WidthChange;
|
---|
1005 | FWidth.NumbersOnly:=TRUE;
|
---|
1006 |
|
---|
1007 | InsertLabel(Self,210,230,60,20,'Min/Max');
|
---|
1008 | FMinWidth:=InsertEdit(Self,280,235,65,20,'','');
|
---|
1009 | FMinWidth.OnChange:=MinWidthChange;
|
---|
1010 | FMinWidth.NumbersOnly:=TRUE;
|
---|
1011 | FMaxWidth:=InsertEdit(Self,355,235,65,20,'','');
|
---|
1012 | FMaxWidth.OnChange:=MaxWidthChange;
|
---|
1013 | FMaxWidth.NumbersOnly:=TRUE;
|
---|
1014 |
|
---|
1015 | InsertLabel(Self,210,200,100,20,'Style');
|
---|
1016 | FStyle:=InsertComboBox(Self,280,205,140,20,csDropDownList);
|
---|
1017 | FStyle.Items.Add('Text');
|
---|
1018 | FStyle.Items.Add('OwnerDraw');
|
---|
1019 | FStyle.OnItemSelect:=StyleSelect;
|
---|
1020 |
|
---|
1021 | InsertLabel(Self,210,170,100,20,'Alignment');
|
---|
1022 | FAlignment:=InsertComboBox(Self,280,175,140,20,csDropDownList);
|
---|
1023 | FAlignment.Items.Add('Left justify');
|
---|
1024 | FAlignment.Items.Add('Right justify');
|
---|
1025 | FAlignment.Items.Add('Center');
|
---|
1026 | FAlignment.OnItemSelect:=AlignmentSelect;
|
---|
1027 |
|
---|
1028 | FAllowClick:=InsertCheckBox(Self,210,135,100,20,'Allow Click','');
|
---|
1029 | FAllowSize:=InsertCheckBox(Self,210,115,100,20,'Allow Size','');
|
---|
1030 | FDisabled:=InsertCheckBox(Self,210,95,100,20,'Disabled','');
|
---|
1031 | FDisabled.OnClick:=DisabledClick;
|
---|
1032 |
|
---|
1033 | InsertLabel(Self,300,133,100,20,'Image');
|
---|
1034 | FImage:=InsertEdit(Self,400,138,20,20,'','');
|
---|
1035 | FImage.OnChange:=ImageChange;
|
---|
1036 | FImage.NumbersOnly:=TRUE;
|
---|
1037 |
|
---|
1038 | InsertLabel(Self,300,113,100,20,'HotImage');
|
---|
1039 | FHotImage:=InsertEdit(Self,400,118,20,20,'','');
|
---|
1040 | FHotImage.OnChange:=HotImageChange;
|
---|
1041 | FHotImage.NumbersOnly:=TRUE;
|
---|
1042 |
|
---|
1043 | InsertLabel(Self,300,93,100,20,'DisabledImage');
|
---|
1044 | FDisabledImage:=InsertEdit(Self,400,98,20,20,'','');
|
---|
1045 | FDisabledImage.OnChange:=DisabledImageChange;
|
---|
1046 | FDisabledImage.NumbersOnly:=TRUE;
|
---|
1047 |
|
---|
1048 | Button:=InsertButton(Self,210,60,200,30,'Update','Update Section');
|
---|
1049 | Button.OnClick:=UpdateClicked;
|
---|
1050 |
|
---|
1051 | InsertBitBtn(Self,10,10,90,30,bkOk,'~Ok','Click here to accept');
|
---|
1052 | InsertBitBtn(Self,110,10,90,30,bkCancel,'~Cancel','Click here to cancel');
|
---|
1053 | InsertBitBtn(Self,210,10,90,30,bkHelp,'~Help','Click here to get help');
|
---|
1054 | End;
|
---|
1055 |
|
---|
1056 | Function TCoolSectionsPropertyEditor.Execute(Var ClassToEdit:TObject):TClassPropertyEditorReturn;
|
---|
1057 | Var HeaderSections:TCoolSections;
|
---|
1058 | FDialog:TCoolSectionsPropEditDialog;
|
---|
1059 | SaveHeaders:TCoolSections;
|
---|
1060 | Section:TCoolSection;
|
---|
1061 | t:LongInt;
|
---|
1062 | Begin
|
---|
1063 | HeaderSections:=TCoolSections(ClassToEdit);
|
---|
1064 | If HeaderSections.HeaderControl=Nil Then
|
---|
1065 | Begin
|
---|
1066 | result:=peNoEditor;
|
---|
1067 | exit;
|
---|
1068 | End;
|
---|
1069 |
|
---|
1070 | SaveHeaders.Create(Nil);
|
---|
1071 | SaveHeaders.Assign(HeaderSections);
|
---|
1072 |
|
---|
1073 | FDialog.Create(Nil);
|
---|
1074 | FDialog.FSections:=HeaderSections;
|
---|
1075 |
|
---|
1076 | For t:=0 TO HeaderSections.Count-1 Do
|
---|
1077 | Begin
|
---|
1078 | Section:=TCoolSection(HeaderSections[t]);
|
---|
1079 | If Section.Text='' Then FDialog.FListBox.Items.Add(tostr(t)+' - (Untitled)')
|
---|
1080 | Else FDialog.FListBox.Items.Add(tostr(t)+' - '+Section.Text);
|
---|
1081 | End;
|
---|
1082 | If FDialog.FListBox.Items.Count>0 Then FDialog.FListBox.ItemIndex:=0;
|
---|
1083 |
|
---|
1084 | FDialog.ShowModal;
|
---|
1085 |
|
---|
1086 | //Modify ClassToEdit here
|
---|
1087 | result:=peCancel;
|
---|
1088 | Case FDialog.ModalResult Of
|
---|
1089 | cmOk:
|
---|
1090 | Begin
|
---|
1091 | FDialog.StoreItem;
|
---|
1092 | result:=peOk;
|
---|
1093 | End;
|
---|
1094 | Else
|
---|
1095 | Begin
|
---|
1096 | HeaderSections.Assign(SaveHeaders);
|
---|
1097 | result:=peCancel;
|
---|
1098 | End;
|
---|
1099 | End; {Case}
|
---|
1100 |
|
---|
1101 | SaveHeaders.Destroy;
|
---|
1102 | FDialog.Destroy;
|
---|
1103 | End;
|
---|
1104 |
|
---|
1105 | Initialization
|
---|
1106 | RegisterClasses([TCoolBar]);
|
---|
1107 | //Register property editor
|
---|
1108 | AddClassPropertyEditor(TCoolSections,TCoolSectionsPropertyEditor);
|
---|
1109 | End.
|
---|