1 | unit GR32_Dsgn_Color;
|
---|
2 |
|
---|
3 | (* ***** BEGIN LICENSE BLOCK *****
|
---|
4 | * Version: MPL 1.1 or LGPL 2.1 with linking exception
|
---|
5 | *
|
---|
6 | * The contents of this file are subject to the Mozilla Public License Version
|
---|
7 | * 1.1 (the "License"); you may not use this file except in compliance with
|
---|
8 | * the License. You may obtain a copy of the License at
|
---|
9 | * http://www.mozilla.org/MPL/
|
---|
10 | *
|
---|
11 | * Software distributed under the License is distributed on an "AS IS" basis,
|
---|
12 | * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
---|
13 | * for the specific language governing rights and limitations under the
|
---|
14 | * License.
|
---|
15 | *
|
---|
16 | * Alternatively, the contents of this file may be used under the terms of the
|
---|
17 | * Free Pascal modified version of the GNU Lesser General Public License
|
---|
18 | * Version 2.1 (the "FPC modified LGPL License"), in which case the provisions
|
---|
19 | * of this license are applicable instead of those above.
|
---|
20 | * Please see the file LICENSE.txt for additional information concerning this
|
---|
21 | * license.
|
---|
22 | *
|
---|
23 | * The Original Code is Graphics32
|
---|
24 | *
|
---|
25 | * The Initial Developer of the Original Code is
|
---|
26 | * Alex A. Denisov
|
---|
27 | *
|
---|
28 | * Portions created by the Initial Developer are Copyright (C) 2000-2009
|
---|
29 | * the Initial Developer. All Rights Reserved.
|
---|
30 | *
|
---|
31 | * Contributor(s):
|
---|
32 | *
|
---|
33 | * ***** END LICENSE BLOCK ***** *)
|
---|
34 |
|
---|
35 | interface
|
---|
36 |
|
---|
37 | {$I GR32.inc}
|
---|
38 |
|
---|
39 | uses
|
---|
40 | Classes, SysUtils,
|
---|
41 | {$IFDEF FPC}
|
---|
42 | RTLConsts, LazIDEIntf, PropEdits, Graphics, Dialogs, Forms,
|
---|
43 | {$IFDEF Windows}
|
---|
44 | Windows, Registry,
|
---|
45 | {$ENDIF}
|
---|
46 | {$ELSE}
|
---|
47 | Consts,
|
---|
48 | DesignIntf, DesignEditors, VCLEditors,
|
---|
49 | Windows, Registry, Graphics, Dialogs, Forms, Controls,
|
---|
50 | {$ENDIF}
|
---|
51 | GR32, GR32_Image;
|
---|
52 |
|
---|
53 | type
|
---|
54 | { TColorManager }
|
---|
55 | PColorEntry = ^TColorEntry;
|
---|
56 | TColorEntry = record
|
---|
57 | Name: string[31];
|
---|
58 | Color: TColor32;
|
---|
59 | end;
|
---|
60 |
|
---|
61 | TColorManager = class(TList)
|
---|
62 | public
|
---|
63 | destructor Destroy; override;
|
---|
64 | procedure AddColor(const AName: string; AColor: TColor32);
|
---|
65 | procedure EnumColors(Proc: TGetStrProc);
|
---|
66 | function FindColor(const AName: string): TColor32;
|
---|
67 | function GetColor(const AName: string): TColor32;
|
---|
68 | function GetColorName(AColor: TColor32): string;
|
---|
69 | procedure RegisterDefaultColors;
|
---|
70 | procedure RemoveColor(const AName: string);
|
---|
71 | end;
|
---|
72 |
|
---|
73 | {$IFDEF COMPILER2010_UP}
|
---|
74 | TColor32Dialog = class(TCommonDialog)
|
---|
75 | private
|
---|
76 | FColor: TColor32;
|
---|
77 | FCustomColors: TStrings;
|
---|
78 | procedure SetCustomColors(Value: TStrings);
|
---|
79 | public
|
---|
80 | function Execute(ParentWnd: HWND): Boolean; override;
|
---|
81 | published
|
---|
82 | property Color: TColor32 read FColor write FColor default clBlack32;
|
---|
83 | property CustomColors: TStrings read FCustomColors write SetCustomColors;
|
---|
84 | property Ctl3D default True;
|
---|
85 | end;
|
---|
86 | {$ENDIF}
|
---|
87 |
|
---|
88 | { TColor32Property }
|
---|
89 | TColor32Property = class(TIntegerProperty
|
---|
90 | {$IFDEF EXT_PROP_EDIT}
|
---|
91 | , ICustomPropertyListDrawing, ICustomPropertyDrawing
|
---|
92 | {$IFDEF COMPILER2005_UP}, ICustomPropertyDrawing80{$ENDIF}
|
---|
93 | {$ENDIF}
|
---|
94 | )
|
---|
95 | public
|
---|
96 | function GetAttributes: TPropertyAttributes; override;
|
---|
97 | function GetValue: string; override;
|
---|
98 | procedure GetValues(Proc: TGetStrProc); override;
|
---|
99 | procedure SetValue(const Value: string); override;
|
---|
100 | {$IFDEF EXT_PROP_EDIT}
|
---|
101 | procedure Edit; override;
|
---|
102 | { ICustomPropertyListDrawing }
|
---|
103 | procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas; var AWidth: Integer);
|
---|
104 | procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas; var AHeight: Integer);
|
---|
105 | procedure ListDrawValue(const Value: string; ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
|
---|
106 | { ICustomPropertyDrawing }
|
---|
107 | procedure PropDrawName(ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
|
---|
108 | procedure PropDrawValue(ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
|
---|
109 | {$IFDEF COMPILER2005_UP}
|
---|
110 | { ICustomPropertyDrawing80 }
|
---|
111 | function PropDrawNameRect(const ARect: TRect): TRect;
|
---|
112 | function PropDrawValueRect(const ARect: TRect): TRect;
|
---|
113 | {$ENDIF}
|
---|
114 | {$ENDIF}
|
---|
115 | end;
|
---|
116 |
|
---|
117 | procedure RegisterColor(const AName: string; AColor: TColor32);
|
---|
118 | procedure UnregisterColor(const AName: string);
|
---|
119 |
|
---|
120 | var ColorManager: TColorManager;
|
---|
121 |
|
---|
122 | implementation
|
---|
123 |
|
---|
124 | {$IFDEF COMPILER2010_UP}
|
---|
125 | uses
|
---|
126 | GR32_Dsgn_ColorPicker;
|
---|
127 | {$ENDIF}
|
---|
128 |
|
---|
129 | { TColorManager }
|
---|
130 |
|
---|
131 | destructor TColorManager.Destroy;
|
---|
132 | var
|
---|
133 | I: Integer;
|
---|
134 | begin
|
---|
135 | for I := 0 to Count - 1 do FreeMem(Items[I], SizeOf(TColorEntry));
|
---|
136 | inherited;
|
---|
137 | end;
|
---|
138 |
|
---|
139 | procedure TColorManager.AddColor(const AName: string; AColor: TColor32);
|
---|
140 | var
|
---|
141 | NewEntry: PColorEntry;
|
---|
142 | begin
|
---|
143 | New(NewEntry);
|
---|
144 | if NewEntry = nil then
|
---|
145 | raise Exception.Create('Could not allocate memory for color registration!');
|
---|
146 | with NewEntry^ do
|
---|
147 | begin
|
---|
148 | Name := ShortString(AName);
|
---|
149 | Color := AColor;
|
---|
150 | end;
|
---|
151 | Add(NewEntry);
|
---|
152 | end;
|
---|
153 |
|
---|
154 | procedure TColorManager.EnumColors(Proc: TGetStrProc);
|
---|
155 | var
|
---|
156 | I: Integer;
|
---|
157 | begin
|
---|
158 | for I := 0 to Count - 1 do Proc(string(TColorEntry(Items[I]^).Name));
|
---|
159 | end;
|
---|
160 |
|
---|
161 | function TColorManager.FindColor(const AName: string): TColor32;
|
---|
162 | var
|
---|
163 | I: Integer;
|
---|
164 | begin
|
---|
165 | Result := clBlack32;
|
---|
166 | for I := 0 to Count - 1 do
|
---|
167 | with TColorEntry(Items[I]^) do
|
---|
168 | if string(Name) = AName then
|
---|
169 | begin
|
---|
170 | Result := Color;
|
---|
171 | Break;
|
---|
172 | end;
|
---|
173 | end;
|
---|
174 |
|
---|
175 | function TColorManager.GetColor(const AName: string): TColor32;
|
---|
176 | var
|
---|
177 | S: string;
|
---|
178 |
|
---|
179 | function HexToClr(const HexStr: string): Cardinal;
|
---|
180 | var
|
---|
181 | I: Integer;
|
---|
182 | C: Char;
|
---|
183 | begin
|
---|
184 | Result := 0;
|
---|
185 | for I := 1 to Length(HexStr) do
|
---|
186 | begin
|
---|
187 | C := HexStr[I];
|
---|
188 | case C of
|
---|
189 | '0'..'9': Result := Int64(16) * Result + (Ord(C) - $30);
|
---|
190 | 'A'..'F': Result := Int64(16) * Result + (Ord(C) - $37);
|
---|
191 | 'a'..'f': Result := Int64(16) * Result + (Ord(C) - $57);
|
---|
192 | else
|
---|
193 | raise EConvertError.Create('Illegal character in hex string');
|
---|
194 | end;
|
---|
195 | end;
|
---|
196 | end;
|
---|
197 |
|
---|
198 | begin
|
---|
199 | S := Trim(AName);
|
---|
200 | if S[1] = '$' then S := Copy(S, 2, Length(S) - 1);
|
---|
201 | if (S[1] = 'c') and (S[2] = 'l') then Result := FindColor(S)
|
---|
202 | else
|
---|
203 | try
|
---|
204 | Result := HexToClr(S);
|
---|
205 | except
|
---|
206 | Result := clBlack32;
|
---|
207 | end;
|
---|
208 | end;
|
---|
209 |
|
---|
210 | function TColorManager.GetColorName(AColor: TColor32): string;
|
---|
211 | var
|
---|
212 | I: Integer;
|
---|
213 | begin
|
---|
214 | for I := 0 to Count - 1 do
|
---|
215 | with TColorEntry(Items[I]^) do
|
---|
216 | if Color = AColor then
|
---|
217 | begin
|
---|
218 | Result := string(TColorEntry(Items[I]^).Name);
|
---|
219 | Exit;
|
---|
220 | end;
|
---|
221 | Result := '$' + IntToHex(AColor, 8);
|
---|
222 | end;
|
---|
223 |
|
---|
224 | procedure TColorManager.RegisterDefaultColors;
|
---|
225 | begin
|
---|
226 | Capacity := 50;
|
---|
227 | AddColor('clBlack32', clBlack32);
|
---|
228 | AddColor('clDimGray32', clDimGray32);
|
---|
229 | AddColor('clGray32', clGray32);
|
---|
230 | AddColor('clLightGray32', clLightGray32);
|
---|
231 | AddColor('clWhite32', clWhite32);
|
---|
232 | AddColor('clMaroon32', clMaroon32);
|
---|
233 | AddColor('clGreen32', clGreen32);
|
---|
234 | AddColor('clOlive32', clOlive32);
|
---|
235 | AddColor('clNavy32', clNavy32);
|
---|
236 | AddColor('clPurple32', clPurple32);
|
---|
237 | AddColor('clTeal32', clTeal32);
|
---|
238 | AddColor('clRed32', clRed32);
|
---|
239 | AddColor('clLime32', clLime32);
|
---|
240 | AddColor('clYellow32', clYellow32);
|
---|
241 | AddColor('clBlue32', clBlue32);
|
---|
242 | AddColor('clFuchsia32', clFuchsia32);
|
---|
243 | AddColor('clAqua32', clAqua32);
|
---|
244 |
|
---|
245 | AddColor('clTrWhite32', clTrWhite32);
|
---|
246 | AddColor('clTrBlack32', clTrBlack32);
|
---|
247 | AddColor('clTrRed32', clTrRed32);
|
---|
248 | AddColor('clTrGreen32', clTrGreen32);
|
---|
249 | AddColor('clTrBlue32', clTrBlue32);
|
---|
250 |
|
---|
251 | AddColor('clAliceBlue32', clAliceBlue32);
|
---|
252 | AddColor('clAntiqueWhite32', clAntiqueWhite32);
|
---|
253 | AddColor('clAquamarine32', clAquamarine32);
|
---|
254 | AddColor('clAzure32', clAzure32);
|
---|
255 | AddColor('clBeige32', clBeige32);
|
---|
256 | AddColor('clBisque32', clBisque32);
|
---|
257 | AddColor('clBlancheDalmond32', clBlancheDalmond32);
|
---|
258 | AddColor('clBlueViolet32', clBlueViolet32);
|
---|
259 | AddColor('clBrown32', clBrown32);
|
---|
260 | AddColor('clBurlyWood32', clBurlyWood32);
|
---|
261 | AddColor('clCadetblue32', clCadetblue32);
|
---|
262 | AddColor('clChartReuse32', clChartReuse32);
|
---|
263 | AddColor('clChocolate32', clChocolate32);
|
---|
264 | AddColor('clCoral32', clCoral32);
|
---|
265 | AddColor('clCornFlowerBlue32', clCornFlowerBlue32);
|
---|
266 | AddColor('clCornSilk32', clCornSilk32);
|
---|
267 | AddColor('clCrimson32', clCrimson32);
|
---|
268 | AddColor('clDarkBlue32', clDarkBlue32);
|
---|
269 | AddColor('clDarkCyan32', clDarkCyan32);
|
---|
270 | AddColor('clDarkGoldenRod32', clDarkGoldenRod32);
|
---|
271 | AddColor('clDarkGray32', clDarkGray32);
|
---|
272 | AddColor('clDarkGreen32', clDarkGreen32);
|
---|
273 | AddColor('clDarkGrey32', clDarkGrey32);
|
---|
274 | AddColor('clDarkKhaki32', clDarkKhaki32);
|
---|
275 | AddColor('clDarkMagenta32', clDarkMagenta32);
|
---|
276 | AddColor('clDarkOliveGreen32', clDarkOliveGreen32);
|
---|
277 | AddColor('clDarkOrange32', clDarkOrange32);
|
---|
278 | AddColor('clDarkOrchid32', clDarkOrchid32);
|
---|
279 | AddColor('clDarkRed32', clDarkRed32);
|
---|
280 | AddColor('clDarkSalmon32', clDarkSalmon32);
|
---|
281 | AddColor('clDarkSeaGreen32', clDarkSeaGreen32);
|
---|
282 | AddColor('clDarkSlateBlue32', clDarkSlateBlue32);
|
---|
283 | AddColor('clDarkSlateGray32', clDarkSlateGray32);
|
---|
284 | AddColor('clDarkSlateGrey32', clDarkSlateGrey32);
|
---|
285 | AddColor('clDarkTurquoise32', clDarkTurquoise32);
|
---|
286 | AddColor('clDarkViolet32', clDarkViolet32);
|
---|
287 | AddColor('clDeepPink32', clDeepPink32);
|
---|
288 | AddColor('clDeepSkyBlue32', clDeepSkyBlue32);
|
---|
289 | AddColor('clDodgerBlue32', clDodgerBlue32);
|
---|
290 | AddColor('clFireBrick32', clFireBrick32);
|
---|
291 | AddColor('clFloralWhite32', clFloralWhite32);
|
---|
292 | AddColor('clGainsBoro32', clGainsBoro32);
|
---|
293 | AddColor('clGhostWhite32', clGhostWhite32);
|
---|
294 | AddColor('clGold32', clGold32);
|
---|
295 | AddColor('clGoldenRod32', clGoldenRod32);
|
---|
296 | AddColor('clGreenYellow32', clGreenYellow32);
|
---|
297 | AddColor('clGrey32', clGrey32);
|
---|
298 | AddColor('clHoneyDew32', clHoneyDew32);
|
---|
299 | AddColor('clHotPink32', clHotPink32);
|
---|
300 | AddColor('clIndianRed32', clIndianRed32);
|
---|
301 | AddColor('clIndigo32', clIndigo32);
|
---|
302 | AddColor('clIvory32', clIvory32);
|
---|
303 | AddColor('clKhaki32', clKhaki32);
|
---|
304 | AddColor('clLavender32', clLavender32);
|
---|
305 | AddColor('clLavenderBlush32', clLavenderBlush32);
|
---|
306 | AddColor('clLawnGreen32', clLawnGreen32);
|
---|
307 | AddColor('clLemonChiffon32', clLemonChiffon32);
|
---|
308 | AddColor('clLightBlue32', clLightBlue32);
|
---|
309 | AddColor('clLightCoral32', clLightCoral32);
|
---|
310 | AddColor('clLightCyan32', clLightCyan32);
|
---|
311 | AddColor('clLightGoldenRodYellow32', clLightGoldenRodYellow32);
|
---|
312 | AddColor('clLightGray32', clLightGray32);
|
---|
313 | AddColor('clLightGreen32', clLightGreen32);
|
---|
314 | AddColor('clLightGrey32', clLightGrey32);
|
---|
315 | AddColor('clLightPink32', clLightPink32);
|
---|
316 | AddColor('clLightSalmon32', clLightSalmon32);
|
---|
317 | AddColor('clLightSeagreen32', clLightSeagreen32);
|
---|
318 | AddColor('clLightSkyblue32', clLightSkyblue32);
|
---|
319 | AddColor('clLightSlategray32', clLightSlategray32);
|
---|
320 | AddColor('clLightSlategrey32', clLightSlategrey32);
|
---|
321 | AddColor('clLightSteelblue32', clLightSteelblue32);
|
---|
322 | AddColor('clLightYellow32', clLightYellow32);
|
---|
323 | AddColor('clLtGray32', clLtGray32);
|
---|
324 | AddColor('clMedGray32', clMedGray32);
|
---|
325 | AddColor('clDkGray32', clDkGray32);
|
---|
326 | AddColor('clMoneyGreen32', clMoneyGreen32);
|
---|
327 | AddColor('clLegacySkyBlue32', clLegacySkyBlue32);
|
---|
328 | AddColor('clCream32', clCream32);
|
---|
329 | AddColor('clLimeGreen32', clLimeGreen32);
|
---|
330 | AddColor('clLinen32', clLinen32);
|
---|
331 | AddColor('clMediumAquamarine32', clMediumAquamarine32);
|
---|
332 | AddColor('clMediumBlue32', clMediumBlue32);
|
---|
333 | AddColor('clMediumOrchid32', clMediumOrchid32);
|
---|
334 | AddColor('clMediumPurple32', clMediumPurple32);
|
---|
335 | AddColor('clMediumSeaGreen32', clMediumSeaGreen32);
|
---|
336 | AddColor('clMediumSlateBlue32', clMediumSlateBlue32);
|
---|
337 | AddColor('clMediumSpringGreen32', clMediumSpringGreen32);
|
---|
338 | AddColor('clMediumTurquoise32', clMediumTurquoise32);
|
---|
339 | AddColor('clMediumVioletRed32', clMediumVioletRed32);
|
---|
340 | AddColor('clMidnightBlue32', clMidnightBlue32);
|
---|
341 | AddColor('clMintCream32', clMintCream32);
|
---|
342 | AddColor('clMistyRose32', clMistyRose32);
|
---|
343 | AddColor('clMoccasin32', clMoccasin32);
|
---|
344 | AddColor('clNavajoWhite32', clNavajoWhite32);
|
---|
345 | AddColor('clOldLace32', clOldLace32);
|
---|
346 | AddColor('clOliveDrab32', clOliveDrab32);
|
---|
347 | AddColor('clOrange32', clOrange32);
|
---|
348 | AddColor('clOrangeRed32', clOrangeRed32);
|
---|
349 | AddColor('clOrchid32', clOrchid32);
|
---|
350 | AddColor('clPaleGoldenRod32', clPaleGoldenRod32);
|
---|
351 | AddColor('clPaleGreen32', clPaleGreen32);
|
---|
352 | AddColor('clPaleTurquoise32', clPaleTurquoise32);
|
---|
353 | AddColor('clPaleVioletred32', clPaleVioletred32);
|
---|
354 | AddColor('clPapayaWhip32', clPapayaWhip32);
|
---|
355 | AddColor('clPeachPuff32', clPeachPuff32);
|
---|
356 | AddColor('clPeru32', clPeru32);
|
---|
357 | AddColor('clPlum32', clPlum32);
|
---|
358 | AddColor('clPowderBlue32', clPowderBlue32);
|
---|
359 | AddColor('clPurple32', clPurple32);
|
---|
360 | AddColor('clRosyBrown32', clRosyBrown32);
|
---|
361 | AddColor('clRoyalBlue32', clRoyalBlue32);
|
---|
362 | AddColor('clSaddleBrown32', clSaddleBrown32);
|
---|
363 | AddColor('clSalmon32', clSalmon32);
|
---|
364 | AddColor('clSandyBrown32', clSandyBrown32);
|
---|
365 | AddColor('clSeaGreen32', clSeaGreen32);
|
---|
366 | AddColor('clSeaShell32', clSeaShell32);
|
---|
367 | AddColor('clSienna32', clSienna32);
|
---|
368 | AddColor('clSilver32', clSilver32);
|
---|
369 | AddColor('clSkyblue32', clSkyblue32);
|
---|
370 | AddColor('clSlateBlue32', clSlateBlue32);
|
---|
371 | AddColor('clSlateGray32', clSlateGray32);
|
---|
372 | AddColor('clSlateGrey32', clSlateGrey32);
|
---|
373 | AddColor('clSnow32', clSnow32);
|
---|
374 | AddColor('clSpringgreen32', clSpringgreen32);
|
---|
375 | AddColor('clSteelblue32', clSteelblue32);
|
---|
376 | AddColor('clTan32', clTan32);
|
---|
377 | AddColor('clThistle32', clThistle32);
|
---|
378 | AddColor('clTomato32', clTomato32);
|
---|
379 | AddColor('clTurquoise32', clTurquoise32);
|
---|
380 | AddColor('clViolet32', clViolet32);
|
---|
381 | AddColor('clWheat32', clWheat32);
|
---|
382 | AddColor('clWhitesmoke32', clWhitesmoke32);
|
---|
383 | AddColor('clYellowgreen32', clYellowgreen32);
|
---|
384 | end;
|
---|
385 |
|
---|
386 | procedure TColorManager.RemoveColor(const AName: string);
|
---|
387 | var
|
---|
388 | I: Integer;
|
---|
389 | begin
|
---|
390 | for I := 0 to Count - 1 do
|
---|
391 | if CompareText(string(TColorEntry(Items[I]^).Name), AName) = 0 then
|
---|
392 | begin
|
---|
393 | Delete(I);
|
---|
394 | Break;
|
---|
395 | end;
|
---|
396 | end;
|
---|
397 |
|
---|
398 | procedure RegisterColor(const AName: string; AColor: TColor32);
|
---|
399 | begin
|
---|
400 | ColorManager.AddColor(AName, AColor);
|
---|
401 | end;
|
---|
402 |
|
---|
403 | procedure UnregisterColor(const AName: string);
|
---|
404 | begin
|
---|
405 | ColorManager.RemoveColor(AName);
|
---|
406 | end;
|
---|
407 |
|
---|
408 |
|
---|
409 | { TColor32Dialog }
|
---|
410 |
|
---|
411 | {$IFDEF COMPILER2010_UP}
|
---|
412 | procedure TColor32Dialog.SetCustomColors(Value: TStrings);
|
---|
413 | begin
|
---|
414 | FCustomColors.Assign(Value);
|
---|
415 | end;
|
---|
416 |
|
---|
417 | function TColor32Dialog.Execute(ParentWnd: HWND): Boolean;
|
---|
418 | var
|
---|
419 | ColorPicker: TFormColorPicker;
|
---|
420 | begin
|
---|
421 | ColorPicker := TFormColorPicker.Create(nil);
|
---|
422 | try
|
---|
423 | ColorPicker.Color := FColor;
|
---|
424 | Result := ColorPicker.ShowModal = mrOK;
|
---|
425 | if Result then
|
---|
426 | FColor := ColorPicker.Color;
|
---|
427 | finally
|
---|
428 | ColorPicker.Free;
|
---|
429 | end;
|
---|
430 | end;
|
---|
431 | {$ENDIF}
|
---|
432 |
|
---|
433 |
|
---|
434 | { TColor32Property }
|
---|
435 |
|
---|
436 | {$IFDEF EXT_PROP_EDIT}
|
---|
437 | procedure TColor32Property.Edit;
|
---|
438 | var
|
---|
439 | {$IFDEF COMPILER2010_UP}
|
---|
440 | ColorDialog: TColor32Dialog;
|
---|
441 | {$ELSE}
|
---|
442 | ColorDialog: TColorDialog;
|
---|
443 | {$ENDIF}
|
---|
444 | IniFile: TRegIniFile;
|
---|
445 |
|
---|
446 | procedure GetCustomColors;
|
---|
447 | begin
|
---|
448 | if BaseRegistryKey = '' then Exit;
|
---|
449 | IniFile := TRegIniFile.Create(BaseRegistryKey);
|
---|
450 | try
|
---|
451 | IniFile.ReadSectionValues(SCustomColors, ColorDialog.CustomColors);
|
---|
452 | except
|
---|
453 | { Ignore errors while reading values }
|
---|
454 | end;
|
---|
455 | end;
|
---|
456 |
|
---|
457 | procedure SaveCustomColors;
|
---|
458 | var
|
---|
459 | I, P: Integer;
|
---|
460 | S: string;
|
---|
461 | begin
|
---|
462 | if IniFile <> nil then
|
---|
463 | with ColorDialog do
|
---|
464 | for I := 0 to CustomColors.Count - 1 do
|
---|
465 | begin
|
---|
466 | S := CustomColors.Strings[I];
|
---|
467 | P := Pos('=', S);
|
---|
468 | if P <> 0 then
|
---|
469 | begin
|
---|
470 | S := Copy(S, 1, P - 1);
|
---|
471 | IniFile.WriteString(SCustomColors, S, CustomColors.Values[S]);
|
---|
472 | end;
|
---|
473 | end;
|
---|
474 | end;
|
---|
475 |
|
---|
476 | begin
|
---|
477 | IniFile := nil;
|
---|
478 | {$IFDEF COMPILER2010_UP}
|
---|
479 | ColorDialog := TColor32Dialog.Create(Application);
|
---|
480 | {$ELSE}
|
---|
481 | ColorDialog := TColorDialog.Create(Application);
|
---|
482 | {$ENDIF}
|
---|
483 | try
|
---|
484 | GetCustomColors;
|
---|
485 | ColorDialog.Color := GetOrdValue;
|
---|
486 | ColorDialog.HelpContext := 25010;
|
---|
487 | {$IFNDEF COMPILER2010_UP}
|
---|
488 | ColorDialog.Options := [cdShowHelp];
|
---|
489 | {$ENDIF}
|
---|
490 | if ColorDialog.Execute then
|
---|
491 | SetOrdValue(Cardinal(ColorDialog.Color));
|
---|
492 | SaveCustomColors;
|
---|
493 | finally
|
---|
494 | IniFile.Free;
|
---|
495 | ColorDialog.Free;
|
---|
496 | end;
|
---|
497 | end;
|
---|
498 | {$ENDIF}
|
---|
499 |
|
---|
500 | function TColor32Property.GetAttributes: TPropertyAttributes;
|
---|
501 | begin
|
---|
502 | Result := [paMultiSelect, {$IFDEF EXT_PROP_EDIT}paDialog,{$ENDIF} paValueList,
|
---|
503 | paRevertable];
|
---|
504 | end;
|
---|
505 |
|
---|
506 | procedure TColor32Property.GetValues(Proc: TGetStrProc);
|
---|
507 | begin
|
---|
508 | try
|
---|
509 | ColorManager.EnumColors(Proc);
|
---|
510 | except
|
---|
511 | on E: Exception do ShowMessage(E.Message);
|
---|
512 | end;
|
---|
513 | end;
|
---|
514 |
|
---|
515 | function TColor32Property.GetValue: string;
|
---|
516 | begin
|
---|
517 | try
|
---|
518 | Result := ColorManager.GetColorName(Cardinal(GetOrdValue));
|
---|
519 | except
|
---|
520 | on E: Exception do ShowMessage(E.Message);
|
---|
521 | end;
|
---|
522 | end;
|
---|
523 |
|
---|
524 | procedure TColor32Property.SetValue(const Value: string);
|
---|
525 | begin
|
---|
526 | try
|
---|
527 | SetOrdValue(Cardinal(ColorManager.GetColor(Value)));
|
---|
528 | Modified;
|
---|
529 | except
|
---|
530 | on E: Exception do ShowMessage(E.Message);
|
---|
531 | end;
|
---|
532 | end;
|
---|
533 |
|
---|
534 | {$IFDEF EXT_PROP_EDIT}
|
---|
535 |
|
---|
536 | procedure TColor32Property.ListMeasureWidth(const Value: string; ACanvas: TCanvas; var AWidth: Integer);
|
---|
537 | begin
|
---|
538 | // implementation dummie to satisfy interface. Don't change default value.
|
---|
539 | end;
|
---|
540 |
|
---|
541 | procedure TColor32Property.ListMeasureHeight(const Value: string; ACanvas: TCanvas; var AHeight: Integer);
|
---|
542 | begin
|
---|
543 | // implementation dummie to satisfy interface. Don't change default value.
|
---|
544 | end;
|
---|
545 |
|
---|
546 | procedure TColor32Property.ListDrawValue(const Value: string; ACanvas: TCanvas;
|
---|
547 | const ARect: TRect; ASelected: Boolean);
|
---|
548 | var
|
---|
549 | Right: Integer;
|
---|
550 | C: TColor32;
|
---|
551 | i, j: Integer;
|
---|
552 | W, H: Integer;
|
---|
553 | Bitmap32: TBitmap32;
|
---|
554 | begin
|
---|
555 | try
|
---|
556 | Right := (ARect.Bottom - ARect.Top) + ARect.Left;
|
---|
557 | Bitmap32 := TBitmap32.Create;
|
---|
558 | try
|
---|
559 | W := Right - ARect.Left - 2;
|
---|
560 | H := ARect.Bottom - ARect.Top - 2;
|
---|
561 | Bitmap32.SetSize(W, H);
|
---|
562 | if Assigned(ColorManager) then
|
---|
563 | C := ColorManager.GetColor(Value)
|
---|
564 | else
|
---|
565 | C := clWhite32;
|
---|
566 | if (W > 8) and (H > 8) then
|
---|
567 | begin
|
---|
568 | if not (C and $FF000000 = $FF000000) then
|
---|
569 | begin
|
---|
570 | for j := 0 to H - 1 do
|
---|
571 | for i := 0 to W - 1 do
|
---|
572 | if Odd(i div 3) = Odd(j div 3) then
|
---|
573 | Bitmap32[i, j] := clBlack32
|
---|
574 | else
|
---|
575 | Bitmap32[i, j] := clWhite32;
|
---|
576 | end;
|
---|
577 | Bitmap32.FillRectT(0, 0, W, H, C);
|
---|
578 | end;
|
---|
579 | Bitmap32.FrameRectTS(0, 0, W, H, $DF000000);
|
---|
580 | Bitmap32.RaiseRectTS(1, 1, W - 1, H - 1, 20);
|
---|
581 | Bitmap32.DrawTo(ACanvas.Handle, ARect.Left + 1, ARect.Top + 1);
|
---|
582 | finally
|
---|
583 | Bitmap32.Free;
|
---|
584 | DefaultPropertyListDrawValue(Value, ACanvas,
|
---|
585 | Rect(Right, ARect.Top, ARect.Right, ARect.Bottom), ASelected);
|
---|
586 | end;
|
---|
587 | except
|
---|
588 | on E: Exception do ShowMessage(E.Message);
|
---|
589 | end;
|
---|
590 | end;
|
---|
591 |
|
---|
592 | procedure TColor32Property.PropDrawValue(ACanvas: TCanvas; const ARect: TRect;
|
---|
593 | ASelected: Boolean);
|
---|
594 | begin
|
---|
595 | if GetVisualValue <> '' then
|
---|
596 | ListDrawValue(GetVisualValue, ACanvas, ARect, True{ASelected})
|
---|
597 | else
|
---|
598 | DefaultPropertyDrawValue(Self, ACanvas, ARect);
|
---|
599 | end;
|
---|
600 |
|
---|
601 | procedure TColor32Property.PropDrawName(ACanvas: TCanvas; const ARect: TRect;
|
---|
602 | ASelected: Boolean);
|
---|
603 | begin
|
---|
604 | DefaultPropertyDrawName(Self, ACanvas, ARect);
|
---|
605 | end;
|
---|
606 |
|
---|
607 | {$IFDEF COMPILER2005_UP}
|
---|
608 | function TColor32Property.PropDrawNameRect(const ARect: TRect): TRect;
|
---|
609 | begin
|
---|
610 | Result := ARect;
|
---|
611 | end;
|
---|
612 |
|
---|
613 | function TColor32Property.PropDrawValueRect(const ARect: TRect): TRect;
|
---|
614 | begin
|
---|
615 | Result := Rect(ARect.Left, ARect.Top, (ARect.Bottom - ARect.Top) + ARect.Left, ARect.Bottom);
|
---|
616 | end;
|
---|
617 | {$ENDIF}
|
---|
618 |
|
---|
619 | {$ENDIF}
|
---|
620 |
|
---|
621 |
|
---|
622 | initialization
|
---|
623 | ColorManager := TColorManager.Create;
|
---|
624 | ColorManager.RegisterDefaultColors;
|
---|
625 |
|
---|
626 | finalization
|
---|
627 | ColorManager.Free;
|
---|
628 |
|
---|
629 | end.
|
---|