Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2 | daniel-mar | 1 | unit Unit1; |
2 | |||
3 | interface |
||
4 | |||
5 | uses |
||
6 | Windows, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, ExtCtrls, |
||
7 | Buttons, Spin, math, ComCtrls, Messages, Menus, Registry, IniFiles, |
||
8 | ShellApi, Dialogs; |
||
9 | |||
10 | // Graphutils |
||
11 | // ColorRGBToHLS |
||
12 | |||
13 | type |
||
14 | TLanguageEntry = record |
||
15 | name: string; |
||
16 | text: string; |
||
17 | end; |
||
18 | |||
19 | TMainForm = class(TForm) |
||
20 | ColorPanel: TPanel; |
||
21 | KomplementaerColor: TPanel; |
||
22 | PickTimer: TTimer; |
||
23 | PopupMenu: TPopupMenu; |
||
24 | mGetColor: TMenuItem; |
||
25 | mPutColor: TMenuItem; |
||
26 | mAktuell: TMenuItem; |
||
27 | mKomplementaer: TMenuItem; |
||
28 | mMixColor: TMenuItem; |
||
29 | mUmkehren: TMenuItem; |
||
30 | mAktuell2: TMenuItem; |
||
31 | mKomplementaer2: TMenuItem; |
||
32 | WebSafe1: TPanel; |
||
33 | WebSafe2: TPanel; |
||
34 | CurrentLbl: TLabel; |
||
35 | mWebsafe: TMenuItem; |
||
36 | mWebsafeInv: TMenuItem; |
||
37 | TabControl: TTabControl; |
||
38 | Panel1: TPanel; |
||
39 | RGBBox: TGroupBox; |
||
40 | RLbl: TLabel; |
||
41 | GLbl: TLabel; |
||
42 | BLbl: TLabel; |
||
43 | RDecLbl: TLabel; |
||
44 | GDecLbl: TLabel; |
||
45 | BDecLbl: TLabel; |
||
46 | RHexLbl: TLabel; |
||
47 | GHexLbl: TLabel; |
||
48 | BHexLbl: TLabel; |
||
49 | BDecC: TUpDown; |
||
50 | GDecC: TUpDown; |
||
51 | RDecC: TUpDown; |
||
52 | RHexC: TUpDown; |
||
53 | GHexC: TUpDown; |
||
54 | BHexC: TUpDown; |
||
55 | RDec: TEdit; |
||
56 | RHex: TEdit; |
||
57 | GDec: TEdit; |
||
58 | GHex: TEdit; |
||
59 | BDec: TEdit; |
||
60 | BHex: TEdit; |
||
61 | R: TTrackBar; |
||
62 | G: TTrackBar; |
||
63 | B: TTrackBar; |
||
64 | HSVBox: TGroupBox; |
||
65 | HLbl: TLabel; |
||
66 | SLbl: TLabel; |
||
67 | VLbl: TLabel; |
||
68 | HDecLbl: TLabel; |
||
69 | SDecLbl: TLabel; |
||
70 | VDecLbl: TLabel; |
||
71 | HHexLbl: TLabel; |
||
72 | SHexLbl: TLabel; |
||
73 | VHexLbl: TLabel; |
||
74 | HDec: TEdit; |
||
75 | HDecC: TUpDown; |
||
76 | SDec: TEdit; |
||
77 | SDecC: TUpDown; |
||
78 | VDec: TEdit; |
||
79 | VDecC: TUpDown; |
||
80 | H: TTrackBar; |
||
81 | S: TTrackBar; |
||
82 | V: TTrackBar; |
||
83 | HHex: TEdit; |
||
84 | HHexC: TUpDown; |
||
85 | SHex: TEdit; |
||
86 | SHexC: TUpDown; |
||
87 | VHex: TEdit; |
||
88 | VHexC: TUpDown; |
||
89 | ColorcodeBox: TGroupBox; |
||
90 | HTMLLbl: TLabel; |
||
91 | DelphiLbl: TLabel; |
||
92 | VisualCLbl: TLabel; |
||
93 | VisualBasicLbl: TLabel; |
||
94 | JavaLbl: TLabel; |
||
95 | PhotoshopLbl: TLabel; |
||
96 | LongLbl: TLabel; |
||
97 | HTML: TEdit; |
||
98 | Delphi: TEdit; |
||
99 | VisualC: TEdit; |
||
100 | VisualBasic: TEdit; |
||
101 | Java: TEdit; |
||
102 | Photoshop: TEdit; |
||
103 | Long: TEdit; |
||
104 | Panel2: TPanel; |
||
105 | ColorMixerBox: TGroupBox; |
||
106 | Color1Per: TLabel; |
||
107 | Color2Per: TLabel; |
||
108 | Color2: TPanel; |
||
109 | Color1: TPanel; |
||
110 | MixedColor: TPanel; |
||
111 | Color1Edt: TEdit; |
||
112 | Color1Upd: TUpDown; |
||
113 | Color2Edt: TEdit; |
||
114 | Color2Upd: TUpDown; |
||
115 | ColorBox: TGroupBox; |
||
116 | DelphiBoxLbl: TLabel; |
||
117 | DelphiBox: TColorListBox; |
||
118 | Panel3: TPanel; |
||
119 | ColorPicker: TGroupBox; |
||
120 | AverageLbl: TLabel; |
||
121 | PickBtn: TButton; |
||
122 | EqualLbl: TLabel; |
||
123 | GreyscaleBtn: TPanel; |
||
124 | InvertBtn: TPanel; |
||
125 | RandomBtn: TPanel; |
||
126 | WebsafeLbl: TLabel; |
||
127 | WebSafeBtn: TPanel; |
||
128 | PanelR: TPanel; |
||
129 | RedBox: TPaintBox; |
||
130 | PanelG: TPanel; |
||
131 | GreenBox: TPaintBox; |
||
132 | PanelB: TPanel; |
||
133 | BlueBox: TPaintBox; |
||
134 | PanelH: TPanel; |
||
135 | HueBox: TPaintBox; |
||
136 | PanelS: TPanel; |
||
137 | SatBox: TPaintBox; |
||
138 | PanelV: TPanel; |
||
139 | ValBox: TPaintBox; |
||
140 | HGra: TEdit; |
||
141 | HGraC: TUpDown; |
||
142 | HGraLbl: TLabel; |
||
143 | WebcolorBox: TListBox; |
||
144 | WebcolorLbl: TLabel; |
||
145 | PalLbl: TLabel; |
||
146 | WinColorDialog: TColorDialog; |
||
147 | DelphiZutreffend: TListBox; |
||
148 | DelphiZutreffendLbl: TLabel; |
||
149 | FavoPnl: TPanel; |
||
150 | favo14: TPanel; |
||
151 | favo13: TPanel; |
||
152 | favo12: TPanel; |
||
153 | favo11: TPanel; |
||
154 | favo10: TPanel; |
||
155 | favo9: TPanel; |
||
156 | favo8: TPanel; |
||
157 | favo7: TPanel; |
||
158 | favo6: TPanel; |
||
159 | favo5: TPanel; |
||
160 | favo4: TPanel; |
||
161 | favo3: TPanel; |
||
162 | favo2: TPanel; |
||
163 | favo1: TPanel; |
||
164 | FavoritenLbl: TLabel; |
||
165 | BasicPanel: TPanel; |
||
166 | QBLbl: TLabel; |
||
167 | cpa1: TPanel; |
||
168 | cpa16: TPanel; |
||
169 | cpa15: TPanel; |
||
170 | cpa14: TPanel; |
||
171 | cpa13: TPanel; |
||
172 | cpa12: TPanel; |
||
173 | cpa11: TPanel; |
||
174 | cpa10: TPanel; |
||
175 | cpa9: TPanel; |
||
176 | cpa8: TPanel; |
||
177 | cpa7: TPanel; |
||
178 | cpa6: TPanel; |
||
179 | cpa5: TPanel; |
||
180 | cpa4: TPanel; |
||
181 | cpa3: TPanel; |
||
182 | cpa2: TPanel; |
||
183 | PalPanel: TPanel; |
||
184 | WinPanel: TPanel; |
||
185 | WindowsLbl: TLabel; |
||
186 | WinDialog: TLabel; |
||
187 | cpb48: TPanel; |
||
188 | cpb47: TPanel; |
||
189 | cpb46: TPanel; |
||
190 | cpb45: TPanel; |
||
191 | cpb44: TPanel; |
||
192 | cpb43: TPanel; |
||
193 | cpb42: TPanel; |
||
194 | cpb41: TPanel; |
||
195 | cpb40: TPanel; |
||
196 | cpb39: TPanel; |
||
197 | cpb38: TPanel; |
||
198 | cpb37: TPanel; |
||
199 | cpb36: TPanel; |
||
200 | cpb35: TPanel; |
||
201 | cpb34: TPanel; |
||
202 | cpb33: TPanel; |
||
203 | cpb32: TPanel; |
||
204 | cpb31: TPanel; |
||
205 | cpb24: TPanel; |
||
206 | cpb23: TPanel; |
||
207 | cpb30: TPanel; |
||
208 | cpb22: TPanel; |
||
209 | cpb29: TPanel; |
||
210 | cpb21: TPanel; |
||
211 | cpb28: TPanel; |
||
212 | cpb20: TPanel; |
||
213 | cpb27: TPanel; |
||
214 | cpb19: TPanel; |
||
215 | cpb25: TPanel; |
||
216 | cpb26: TPanel; |
||
217 | cpb18: TPanel; |
||
218 | cpb17: TPanel; |
||
219 | cpb16: TPanel; |
||
220 | cpb15: TPanel; |
||
221 | cpb14: TPanel; |
||
222 | cpb13: TPanel; |
||
223 | cpb12: TPanel; |
||
224 | cpb11: TPanel; |
||
225 | cpb10: TPanel; |
||
226 | cpb9: TPanel; |
||
227 | cpb8: TPanel; |
||
228 | cpb7: TPanel; |
||
229 | cpb6: TPanel; |
||
230 | cpb5: TPanel; |
||
231 | cpb4: TPanel; |
||
232 | cpb3: TPanel; |
||
233 | cpb2: TPanel; |
||
234 | cpb1: TPanel; |
||
235 | JskPanel: TPanel; |
||
236 | PaintshopProLbl: TLabel; |
||
237 | cpc47: TPanel; |
||
238 | cpc46: TPanel; |
||
239 | cpc45: TPanel; |
||
240 | cpc44: TPanel; |
||
241 | cpc43: TPanel; |
||
242 | cpc42: TPanel; |
||
243 | cpc39: TPanel; |
||
244 | cpc38: TPanel; |
||
245 | cpc37: TPanel; |
||
246 | cpc36: TPanel; |
||
247 | cpc35: TPanel; |
||
248 | cpc34: TPanel; |
||
249 | cpc31: TPanel; |
||
250 | cpc30: TPanel; |
||
251 | cpc29: TPanel; |
||
252 | cpc28: TPanel; |
||
253 | cpc27: TPanel; |
||
254 | cpc26: TPanel; |
||
255 | cpc23: TPanel; |
||
256 | cpc22: TPanel; |
||
257 | cpc21: TPanel; |
||
258 | cpc20: TPanel; |
||
259 | cpc19: TPanel; |
||
260 | cpc18: TPanel; |
||
261 | cpc40: TPanel; |
||
262 | cpc32: TPanel; |
||
263 | cpc24: TPanel; |
||
264 | cpc16: TPanel; |
||
265 | cpc15: TPanel; |
||
266 | cpc14: TPanel; |
||
267 | cpc13: TPanel; |
||
268 | cpc12: TPanel; |
||
269 | cpc11: TPanel; |
||
270 | cpc10: TPanel; |
||
271 | cpc7: TPanel; |
||
272 | cpc6: TPanel; |
||
273 | cpc5: TPanel; |
||
274 | cpc4: TPanel; |
||
275 | cpc3: TPanel; |
||
276 | cpc2: TPanel; |
||
277 | cpc8: TPanel; |
||
278 | cpc48: TPanel; |
||
279 | cpc41: TPanel; |
||
280 | cpc33: TPanel; |
||
281 | cpc25: TPanel; |
||
282 | cpc17: TPanel; |
||
283 | cpc9: TPanel; |
||
284 | cpc1: TPanel; |
||
285 | favo15: TPanel; |
||
286 | favo16: TPanel; |
||
287 | Pal: TListBox; |
||
288 | WebZutreffendLbl: TLabel; |
||
289 | WebZutreffend: TListBox; |
||
290 | Panel4: TPanel; |
||
291 | Info1: TLabel; |
||
292 | Info2: TLabel; |
||
293 | Info4: TLabel; |
||
294 | Info6: TLabel; |
||
295 | Info7: TLabel; |
||
296 | Info8: TLabel; |
||
297 | Info9: TLabel; |
||
298 | Info12: TLabel; |
||
299 | Info5: TLabel; |
||
300 | Info10: TLabel; |
||
301 | Info11: TLabel; |
||
302 | Info14: TLabel; |
||
303 | Info15: TLabel; |
||
304 | Info13: TLabel; |
||
305 | ColorTmr: TTimer; |
||
306 | Info3: TLabel; |
||
307 | AverageX: TEdit; |
||
308 | AverageMidLbl: TLabel; |
||
309 | AverageY: TEdit; |
||
310 | MagPnl: TPanel; |
||
311 | MagBox: TPaintBox; |
||
312 | favo17: TPanel; |
||
313 | favo18: TPanel; |
||
314 | favo19: TPanel; |
||
315 | favo20: TPanel; |
||
316 | CoordsLbl: TLabel; |
||
317 | CoordsLbl2: TLabel; |
||
318 | SPro: TEdit; |
||
319 | SProLbl: TLabel; |
||
320 | VProLbl: TLabel; |
||
321 | VPro: TEdit; |
||
322 | SProC: TUpDown; |
||
323 | VProC: TUpDown; |
||
324 | BPro: TEdit; |
||
325 | GPro: TEdit; |
||
326 | RPro: TEdit; |
||
327 | RProC: TUpDown; |
||
328 | GProC: TUpDown; |
||
329 | BProC: TUpDown; |
||
330 | RProLbl: TLabel; |
||
331 | GProLbl: TLabel; |
||
332 | BProLbl: TLabel; |
||
333 | procedure ColorClick(Sender: TObject; Button: TMouseButton; |
||
334 | Shift: TShiftState; X, Y: Integer); |
||
335 | procedure SaveEditChange(Sender: TObject); |
||
336 | procedure ColorTmrTimer(Sender: TObject); |
||
337 | procedure LinkClick(Sender: TObject); |
||
338 | procedure WebZutreffendClick(Sender: TObject); |
||
339 | procedure DelphiZutreffendClick(Sender: TObject); |
||
340 | procedure WebcolorBoxClick(Sender: TObject); |
||
341 | procedure WinDialogClick(Sender: TObject); |
||
342 | procedure PalClick(Sender: TObject); |
||
343 | procedure OutboxPaint(Sender: TObject); |
||
344 | procedure FormClose(Sender: TObject; var Action: TCloseAction); |
||
345 | procedure WebsafeLblClick(Sender: TObject); |
||
346 | procedure TabControlChange(Sender: TObject); |
||
347 | procedure InvertBtnClick(Sender: TObject); |
||
348 | procedure TakeClick(Sender: TObject); |
||
349 | procedure DelphiBoxClick(Sender: TObject); |
||
350 | procedure DefColorClick(Sender: TObject); |
||
351 | procedure GreyscaleBtnClick(Sender: TObject); |
||
352 | procedure Menu2Click(Sender: TObject); |
||
353 | procedure MenuClick(Sender: TObject); |
||
354 | procedure RandomBtnClick(Sender: TObject); |
||
355 | procedure PickTimerTimer(Sender: TObject); |
||
356 | procedure PickBtnClick(Sender: TObject); |
||
357 | procedure FormCreate(Sender: TObject); |
||
358 | procedure EditKeyPress(Sender: TObject; var Key: Char); |
||
359 | procedure UpDownClick(Sender: TObject; Button: TUDBtnType); |
||
360 | procedure Change(Sender: TObject); |
||
361 | private |
||
362 | LangArray: Array of TLanguageEntry; |
||
363 | function GetLangEntry(name: string): string; |
||
364 | public |
||
365 | SampleMethod, NewMethod: byte; |
||
366 | MemPix: TBitmap; |
||
367 | BoxBuf, Box2Buf: TBitmap; |
||
368 | ScreenDC: HDC; |
||
369 | PopupmenuSender: tobject; |
||
370 | procedure WMLButtonDown(var Msg: TMessage); message WM_LBUTTONDOWN; |
||
371 | procedure WMRButtonDown(var Msg: TMessage); message WM_RBUTTONDOWN; |
||
372 | procedure AppDeactivate(Sender: TObject); |
||
373 | procedure DrawGrad(BoxNum: integer); |
||
374 | procedure AktualisiereFarben(RGBAlsQuelle: boolean; ignore: integer = 0); |
||
375 | procedure AktualisiereWert(Sender: TObject); |
||
376 | procedure Ladefarbe(col: tcolor); |
||
377 | procedure BerechneMixColor; |
||
378 | procedure CheckWebfarben; |
||
379 | procedure CheckDelphiFarben; |
||
380 | procedure ZeigeRichtigePalette; |
||
381 | procedure SchreibeInt(name: string; wert: integer); |
||
382 | function LeseInt(name: string): integer; |
||
383 | end; |
||
384 | |||
385 | var |
||
386 | MainForm: TMainForm; |
||
387 | |||
388 | implementation |
||
389 | |||
390 | {$R *.DFM} |
||
391 | |||
392 | {$R WindowsXP.res} |
||
393 | |||
394 | const |
||
395 | webfarben: array[0..140] of string = ('#F0F8FF', '#FAEBD7', '#00FFFF', '#7FFFD4', |
||
396 | '#F0FFFF', '#F5F5DC', '#FFE4C4', '#000000', '#FFEBCD', '#0000FF', '#8A2BE2', |
||
397 | '#A52A2A', '#DEB887', '#5F9EA0', '#7FFF00', '#D2691E', '#FF7F50', '#6495ED', |
||
398 | '#FFF8DC', '#DC143C', '#00FFFF', '#00008B', '#008B8B', '#B8860B', '#A9A9A9', |
||
399 | '#006400', '#BDB76B', '#8B008B', '#556B2F', '#FF8C00', '#9932CC', '#8B0000', |
||
400 | '#E9967A', '#8FBC8F', '#483D8B', '#2F4F4F', '#00CED1', '#9400D3', '#FF1493', |
||
401 | '#00BFFF', '#696969', '#1E90FF', '#B22222', '#FFFAF0', '#228B22', '#FF00FF', |
||
402 | '#DCDCDC', '#F8F8FF', '#FFD700', '#DAA520', '#808080', '#008000', '#ADFF2F', |
||
403 | '#808080', '#F0FFF0', '#FF69B4', '#CD5C5C', '#4B0082', '#FFFFF0', '#F0E68C', |
||
404 | '#E6E6FA', '#FFF0F5', '#7CFC00', '#FFFACD', '#ADD8E6', '#F08080', '#E0FFFF', |
||
405 | '#FAFAD2', '#90EE90', '#D3D3D3', '#FFB6C1', '#FFA07A', '#20B2AA', '#87CEFA', |
||
406 | '#778899', '#B0C4DE', '#FFFFE0', '#00FF00', '#32CD32', '#FAF0E6', '#FF00FF', |
||
407 | '#800000', '#66CDAA', '#0000CD', '#BA55D3', '#9370DB', '#3CB371', '#7B68EE', |
||
408 | '#00FA9A', '#48D1CC', '#C71585', '#191970', '#F5FFFA', '#FFE4E1', '#FFE4B5', |
||
409 | '#FFDEAD', '#000080', '#FDF5E6', '#808000', '#6B8E23', '#FFA500', '#FF4500', |
||
410 | '#DA70D6', '#EEE8AA', '#98FB98', '#AFEEEE', '#DB7093', '#FFEFD5', '#FFDAB9', |
||
411 | '#CD853F', '#FFC0CB', '#DDA0DD', '#B0E0E6', '#800080', '#FF0000', '#BC8F8F', |
||
412 | '#4169E1', '#8B4513', '#FA8072', '#F4A460', '#2E8B57', '#FFF5EE', '#A0522D', |
||
413 | '#C0C0C0', '#87CEEB', '#6A5ACD', '#708090', '#FFFAFA', '#00FF7F', '#4682B4', |
||
414 | '#D2B48C', '#008080', '#D8BFD8', '#FF6347', '#40E0D0', '#EE82EE', '#F5DEB3', |
||
415 | '#FFFFFF', '#F5F5F5', '#FFFF00', '#9ACD32'); |
||
416 | |||
417 | function TMainForm.GetLangEntry(name: string): string; |
||
418 | var |
||
419 | i: integer; |
||
420 | begin |
||
421 | for i := 0 to high(LangArray) do |
||
422 | begin |
||
423 | if LangArray[i].name = name then |
||
424 | begin |
||
425 | result := LangArray[i].text; |
||
426 | break; |
||
427 | end; |
||
428 | end; |
||
429 | end; |
||
430 | |||
431 | // http://www.delphipraxis.net/topic49179_rgb+hsv+und+hsv+rgb.html |
||
432 | // mit 360° |
||
433 | function HSVtoRGB(H:Integer; S, V: Byte): TColor; |
||
434 | var |
||
435 | ht, d, t1, t2, t3:Integer; |
||
436 | R,G,B:Word; |
||
437 | begin |
||
438 | if S = 0 then |
||
439 | begin |
||
440 | R := V; G := V; B := V; |
||
441 | end |
||
442 | else |
||
443 | begin |
||
444 | ht := H * 6; |
||
445 | d := ht mod 360; |
||
446 | |||
447 | t1 := round(V * (255 - S) / 255); |
||
448 | t2 := round(V * (255 - S * d / 360) / 255); |
||
449 | t3 := round(V * (255 - S * (360 - d) / 360) / 255); |
||
450 | |||
451 | case ht div 360 of |
||
452 | 0: |
||
453 | begin |
||
454 | R := V; G := t3; B := t1; |
||
455 | end; |
||
456 | 1: |
||
457 | begin |
||
458 | R := t2; G := V; B := t1; |
||
459 | end; |
||
460 | 2: |
||
461 | begin |
||
462 | R := t1; G := V; B := t3; |
||
463 | end; |
||
464 | 3: |
||
465 | begin |
||
466 | R := t1; G := t2; B := V; |
||
467 | end; |
||
468 | 4: |
||
469 | begin |
||
470 | R := t3; G := t1; B := V; |
||
471 | end; |
||
472 | else |
||
473 | begin |
||
474 | R := V; G := t1; B := t2; |
||
475 | end; |
||
476 | end; |
||
477 | end; |
||
478 | Result:=RGB(R,G,B); |
||
479 | end; |
||
480 | |||
481 | // http://www.delphipraxis.net/topic49179_rgb+hsv+und+hsv+rgb.html |
||
482 | // mit 360° |
||
483 | procedure RGBtoHSV(Red, Green, Blue: Byte; var Hue: Integer; var Saturation, Value: Byte); |
||
484 | var |
||
485 | Maximum, Minimum: Byte; |
||
486 | Rc, Gc, Bc: Single; |
||
487 | H: Single; |
||
488 | begin |
||
489 | Maximum := Max(Red, Max(Green, Blue)); |
||
490 | Minimum := Min(Red, Min(Green, Blue)); |
||
491 | Value := Maximum; |
||
492 | if Maximum <> 0 then |
||
493 | Saturation := MulDiv(Maximum - Minimum, 255, Maximum) |
||
494 | else |
||
495 | Saturation := 0; |
||
496 | if Saturation = 0 then |
||
497 | Hue := 0 // arbitrary value |
||
498 | else |
||
499 | begin |
||
500 | Assert(Maximum <> Minimum); |
||
501 | Rc := (Maximum - Red) / (Maximum - Minimum); |
||
502 | Gc := (Maximum - Green) / (Maximum - Minimum); |
||
503 | Bc := (Maximum - Blue) / (Maximum - Minimum); |
||
504 | if Red = Maximum then |
||
505 | H := Bc - Gc |
||
506 | else if Green = Maximum then |
||
507 | H := 2 + Rc - Bc |
||
508 | else |
||
509 | begin |
||
510 | Assert(Blue = Maximum); |
||
511 | H := 4 + Gc - Rc; |
||
512 | end; |
||
513 | H := H * 60; |
||
514 | if H < 0 then |
||
515 | H := H + 360; |
||
516 | Hue := Round(H); |
||
517 | end; |
||
518 | end; |
||
519 | |||
520 | // http://www.delphipraxis.net/topic35695_kontrastfarbe+ermitteln.html |
||
521 | function BlackWhiteContrastColor(value: TColor): TColor; |
||
522 | var |
||
523 | intensity : Integer; |
||
524 | begin |
||
525 | value := ColorToRGB(value); |
||
526 | |||
527 | intensity := GetBValue(value) * 21 // Blue |
||
528 | + GetGValue(value) * 174 // Green |
||
529 | + GetRValue(value) * 61; // Red |
||
530 | |||
531 | // intensity = 0 -> dark |
||
532 | // intensity = 255*256 -> bright |
||
533 | |||
534 | if intensity >= (128*256) then |
||
535 | Result := clBlack |
||
536 | else |
||
537 | Result := clWhite; |
||
538 | end; |
||
539 | |||
540 | procedure TMainForm.WMLButtonDown(var Msg: TMessage); |
||
541 | begin |
||
542 | inherited; |
||
543 | if not PickBtn.Enabled then begin |
||
544 | ReleaseCapture; |
||
545 | PickBtn.Enabled := true; |
||
546 | Caption := Application.Title; |
||
547 | PostMessage(MainForm.Handle, WM_ACTIVATE, word(true), 0); |
||
548 | end; |
||
549 | end; |
||
550 | |||
551 | procedure TMainForm.WMRButtonDown(var Msg: TMessage); |
||
552 | begin |
||
553 | inherited; |
||
554 | WMLButtonDown(Msg); |
||
555 | end; |
||
556 | |||
557 | procedure TMainForm.AppDeactivate(Sender: TObject); |
||
558 | begin |
||
559 | if not PickBtn.Enabled then |
||
560 | SetCapture(MainForm.Handle); |
||
561 | end; |
||
562 | |||
563 | procedure TMainForm.DrawGrad(BoxNum: integer); |
||
564 | var |
||
565 | R, G, B, S, V: byte; |
||
566 | H: integer; |
||
567 | begin |
||
568 | case BoxNum of |
||
569 | 1: |
||
570 | begin |
||
571 | G := Mainform.G.Position; |
||
572 | B := Mainform.B.Position; |
||
573 | |||
574 | with BoxBuf.Canvas do |
||
575 | begin |
||
576 | for R := 0 to 255 do |
||
577 | Pixels[R, 0] := rgb(R, G, B); |
||
578 | StretchBlt(RedBox.Canvas.Handle, |
||
579 | 0, 0, RedBox.Width, RedBox.Height, |
||
580 | Handle, |
||
581 | 0, 0, |
||
582 | 256, 1, |
||
583 | SRCCOPY); |
||
584 | end; |
||
585 | end; |
||
586 | |||
587 | 2: |
||
588 | begin |
||
589 | R := Mainform.R.Position; |
||
590 | B := Mainform.B.Position; |
||
591 | |||
592 | with BoxBuf.Canvas do |
||
593 | begin |
||
594 | for G := 0 to 255 do |
||
595 | Pixels[G, 0] := rgb(R, G, B); |
||
596 | StretchBlt(GreenBox.Canvas.Handle, |
||
597 | 0, 0, GreenBox.Width, GreenBox.Height, |
||
598 | Handle, |
||
599 | 0, 0, |
||
600 | 256, 1, |
||
601 | SRCCOPY); |
||
602 | end; |
||
603 | end; |
||
604 | |||
605 | 3: |
||
606 | begin |
||
607 | R := Mainform.R.Position; |
||
608 | G := Mainform.G.Position; |
||
609 | |||
610 | with BoxBuf.Canvas do |
||
611 | begin |
||
612 | for B := 0 to 255 do |
||
613 | Pixels[B, 0] := rgb(R, G, B); |
||
614 | StretchBlt(BlueBox.Canvas.Handle, |
||
615 | 0, 0, BlueBox.Width, BlueBox.Height, |
||
616 | Handle, |
||
617 | 0, 0, |
||
618 | 256, 1, |
||
619 | SRCCOPY); |
||
620 | end; |
||
621 | end; |
||
622 | |||
623 | 4: |
||
624 | begin |
||
625 | S := Mainform.S.Position; |
||
626 | V := MainForm.V.Position; |
||
627 | |||
628 | with Box2Buf.Canvas do |
||
629 | begin |
||
630 | for H := 0 to 359 do |
||
631 | Pixels[H, 0] := HSVtoRGB(H, S, V); |
||
632 | StretchBlt(HueBox.Canvas.Handle, |
||
633 | 0, 0, HueBox.Width, HueBox.Height, |
||
634 | Handle, |
||
635 | 0, 0, |
||
636 | 360, 1, |
||
637 | SRCCOPY); |
||
638 | end; |
||
639 | end; |
||
640 | |||
641 | 5: |
||
642 | begin |
||
643 | H := Mainform.H.Position; |
||
644 | V := MainForm.V.Position; |
||
645 | |||
646 | with BoxBuf.Canvas do |
||
647 | begin |
||
648 | for S := 0 to 255 do |
||
649 | Pixels[S, 0] := HSVtoRGB(H, S, V); |
||
650 | StretchBlt(SatBox.Canvas.Handle, |
||
651 | 0, 0, SatBox.Width, SatBox.Height, |
||
652 | Handle, |
||
653 | 0, 0, |
||
654 | 256, 1, |
||
655 | SRCCOPY); |
||
656 | end; |
||
657 | end; |
||
658 | |||
659 | 6: |
||
660 | begin |
||
661 | H := Mainform.H.Position; |
||
662 | S := MainForm.S.Position; |
||
663 | |||
664 | with BoxBuf.Canvas do |
||
665 | begin |
||
666 | for V := 0 to 255 do |
||
667 | Pixels[V, 0] := HSVtoRGB(H, S, V); |
||
668 | StretchBlt(ValBox.Canvas.Handle, |
||
669 | 0, 0, ValBox.Width, ValBox.Height, |
||
670 | Handle, |
||
671 | 0, 0, |
||
672 | 256, 1, |
||
673 | SRCCOPY); |
||
674 | end; |
||
675 | end; |
||
676 | end; |
||
677 | end; |
||
678 | |||
679 | procedure TMainForm.FormCreate(Sender: TObject); |
||
680 | var |
||
681 | i: integer; |
||
682 | ini: tinifile; |
||
683 | str: TStringList; |
||
684 | begin |
||
685 | Application.OnDeactivate := AppDeactivate; |
||
686 | Randomize; |
||
687 | |||
688 | ScreenDC := GetDC(0); |
||
689 | |||
690 | MemPix := TBitmap.Create; |
||
691 | |||
692 | MemPix.Width := MagBox.Width; |
||
693 | MemPix.Height := MagBox.Height; |
||
694 | MemPix.Canvas.Pixels[0, 0] := clBlack; |
||
695 | |||
696 | SampleMethod := NewMethod; |
||
697 | |||
698 | BoxBuf := TBitmap.Create; |
||
699 | BoxBuf.Width := 256; |
||
700 | BoxBuf.Height := 1; |
||
701 | |||
702 | Box2Buf := TBitmap.Create; |
||
703 | Box2Buf.Width := 360; |
||
704 | Box2Buf.Height := 1; |
||
705 | |||
706 | Caption := Application.title; |
||
707 | Change(r); |
||
708 | Change(g); |
||
709 | Change(b); |
||
710 | |||
711 | delphibox.ItemIndex := -1; |
||
712 | color1upd.position := 50; |
||
713 | UpDownClick(color1upd, btPrev); |
||
714 | color1.Color := clBlack; |
||
715 | PopupmenuSender := color1; |
||
716 | MenuClick(popupmenu); |
||
717 | color2.Color := clBlack; |
||
718 | PopupmenuSender := color2; |
||
719 | MenuClick(popupmenu); |
||
720 | |||
721 | cpa1.font.color := BlackWhiteContrastColor(cpa1.Color); |
||
722 | cpa2.font.color := BlackWhiteContrastColor(cpa2.Color); |
||
723 | cpa3.font.color := BlackWhiteContrastColor(cpa3.Color); |
||
724 | cpa4.font.color := BlackWhiteContrastColor(cpa4.Color); |
||
725 | cpa5.font.color := BlackWhiteContrastColor(cpa5.Color); |
||
726 | cpa6.font.color := BlackWhiteContrastColor(cpa6.Color); |
||
727 | cpa7.font.color := BlackWhiteContrastColor(cpa7.Color); |
||
728 | cpa8.font.color := BlackWhiteContrastColor(cpa8.Color); |
||
729 | cpa9.font.color := BlackWhiteContrastColor(cpa9.Color); |
||
730 | cpa10.font.color := BlackWhiteContrastColor(cpa10.Color); |
||
731 | cpa11.font.color := BlackWhiteContrastColor(cpa11.Color); |
||
732 | cpa12.font.color := BlackWhiteContrastColor(cpa12.Color); |
||
733 | cpa13.font.color := BlackWhiteContrastColor(cpa13.Color); |
||
734 | cpa14.font.color := BlackWhiteContrastColor(cpa14.Color); |
||
735 | cpa15.font.color := BlackWhiteContrastColor(cpa15.Color); |
||
736 | cpa16.font.color := BlackWhiteContrastColor(cpa16.Color); |
||
737 | |||
738 | // Sprachdatei auslesen |
||
739 | if fileexists(ExtractFilePath(Application.ExeName)+'Language.ini') then |
||
740 | begin |
||
741 | ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Language.ini'); |
||
742 | str := TStringList.Create(); |
||
743 | try |
||
744 | ini.ReadSection(Name, str); |
||
745 | for i := 0 to str.count-1 do |
||
746 | begin |
||
747 | setlength(LangArray, length(LangArray)+1); |
||
748 | LangArray[length(LangArray)-1].name := str.strings[i]; |
||
749 | LangArray[length(LangArray)-1].text := ini.ReadString(name, str.strings[i], ''); |
||
750 | LangArray[length(LangArray)-1].text := StringReplace(LangArray[length(LangArray)-1].text, '###', #13#10, [rfReplaceAll]); |
||
751 | end; |
||
752 | finally |
||
753 | ini.free; |
||
754 | str.Free; |
||
755 | end; |
||
756 | end; |
||
757 | |||
758 | // Elemente mit Sprache versehen |
||
759 | rgbbox.Caption := GetLangEntry('rgb'); |
||
760 | hsvbox.Caption := GetLangEntry('hsv'); |
||
761 | rdeclbl.Caption := GetLangEntry('dec'); |
||
762 | gdeclbl.Caption := GetLangEntry('dec'); |
||
763 | bdeclbl.Caption := GetLangEntry('dec'); |
||
764 | hdeclbl.Caption := GetLangEntry('dec'); |
||
765 | sdeclbl.Caption := GetLangEntry('dec'); |
||
766 | vdeclbl.Caption := GetLangEntry('dec'); |
||
767 | rhexlbl.Caption := GetLangEntry('hex'); |
||
768 | ghexlbl.Caption := GetLangEntry('hex'); |
||
769 | bhexlbl.Caption := GetLangEntry('hex'); |
||
770 | hhexlbl.Caption := GetLangEntry('hex'); |
||
771 | shexlbl.Caption := GetLangEntry('hex'); |
||
772 | vhexlbl.Caption := GetLangEntry('hex'); |
||
773 | hgralbl.Caption := GetLangEntry('gra'); |
||
774 | rlbl.Caption := GetLangEntry('red'); |
||
775 | glbl.Caption := GetLangEntry('green'); |
||
776 | blbl.Caption := GetLangEntry('blue'); |
||
777 | GreyscaleBtn.caption := GetLangEntry('greyscale'); |
||
778 | InvertBtn.caption := GetLangEntry('invert'); |
||
779 | WebSafeBtn.caption := GetLangEntry('websafe'); |
||
780 | RandomBtn.caption := GetLangEntry('random'); |
||
781 | HLbl.caption := GetLangEntry('hue'); |
||
782 | SLbl.caption := GetLangEntry('sat'); |
||
783 | VLbl.caption := GetLangEntry('val'); |
||
784 | ColorcodeBox.caption := GetLangEntry('codes'); |
||
785 | htmllbl.caption := GetLangEntry('html'); |
||
786 | delphilbl.caption := GetLangEntry('delphi'); |
||
787 | VisualClbl.caption := GetLangEntry('cpp'); |
||
788 | visualbasiclbl.caption := GetLangEntry('visualbasic'); |
||
789 | javalbl.caption := GetLangEntry('java'); |
||
790 | photoshoplbl.caption := GetLangEntry('photoshop'); |
||
791 | longlbl.caption := GetLangEntry('long'); |
||
792 | currentlbl.caption := GetLangEntry('current'); |
||
793 | websafelbl.caption := GetLangEntry('websafelbl'); |
||
794 | komplementaercolor.Caption := GetLangEntry('invcolor'); |
||
795 | websafe2.Caption := GetLangEntry('invwebsafe'); |
||
796 | tabcontrol.tabs.clear; |
||
797 | tabcontrol.Tabs.add(GetLangEntry('tab1')); |
||
798 | tabcontrol.Tabs.add(GetLangEntry('tab2')); |
||
799 | tabcontrol.Tabs.add(GetLangEntry('tab3')); |
||
800 | tabcontrol.Tabs.add(GetLangEntry('tab4')); |
||
801 | colormixerbox.Caption := getlangentry('colormixer'); |
||
802 | color1.Caption := getlangentry('color') + ' 1'; |
||
803 | color2.Caption := getlangentry('color') + ' 2'; |
||
804 | mixedcolor.caption := getlangentry('mixedcolor'); |
||
805 | colorbox.caption := getlangentry('colors'); |
||
806 | pallbl.Caption := getlangentry('availablepals'); |
||
807 | delphiboxlbl.Caption := getlangentry('delphipal'); |
||
808 | webcolorlbl.Caption := getlangentry('css3'); |
||
809 | delphizutreffendlbl.Caption := getlangentry('zutr'); |
||
810 | webzutreffendlbl.Caption := getlangentry('zutr'); |
||
811 | qblbl.Caption := getlangentry('vgapal'); |
||
812 | windialog.Caption := getlangentry('windialog'); |
||
813 | favoritenlbl.Caption := getlangentry('favorites'); |
||
814 | pal.Items.add(getlangentry('windows')); |
||
815 | pal.Items.add(getlangentry('jasc')); |
||
816 | windowslbl.Caption := getlangentry('windows'); |
||
817 | PaintshopProlbl.Caption := getlangentry('jasc'); |
||
818 | colorpicker.Caption := getlangentry('colorpicker'); |
||
819 | averagelbl.Caption := getlangentry('averagepix'); |
||
820 | CoordsLbl2.Caption := getlangentry('coords'); |
||
821 | pickbtn.Caption := getlangentry('capture'); |
||
822 | info3.Caption := getlangentry('createdwith'); |
||
823 | info4.Caption := getlangentry('leader'); |
||
824 | info6.Caption := getlangentry('email'); |
||
825 | info8.Caption := getlangentry('website'); |
||
826 | info10.Caption := getlangentry('icq'); |
||
827 | info13.Caption := getlangentry('webportal'); |
||
828 | info14.Caption := getlangentry('viathinksoft'); |
||
829 | info15.Caption := getlangentry('projektseite'); |
||
830 | info5.Caption := getlangentry('contact'); |
||
831 | info12.Caption := getlangentry('links'); |
||
832 | komplementaercolor.Hint := getlangentry('thiscolor'); |
||
833 | websafe2.Hint := getlangentry('thiscolor'); |
||
834 | websafe1.Hint := getlangentry('thiscolor'); |
||
835 | websafelbl.Hint := getlangentry('thiscolor'); |
||
836 | sprolbl.Caption := getlangentry('per'); |
||
837 | vprolbl.Caption := getlangentry('per'); |
||
838 | rprolbl.Caption := getlangentry('per'); |
||
839 | gprolbl.Caption := getlangentry('per'); |
||
840 | bprolbl.Caption := getlangentry('per'); |
||
841 | popupmenu.Items.Items[0].Caption := getlangentry('PopupA'); |
||
842 | popupmenu.Items.Items[0].Items[0].Caption := getlangentry('PopupA1'); |
||
843 | popupmenu.Items.Items[0].Items[1].Caption := getlangentry('PopupA2'); |
||
844 | popupmenu.Items.Items[0].Items[2].Caption := getlangentry('PopupA3'); |
||
845 | popupmenu.Items.Items[0].Items[3].Caption := getlangentry('PopupA4'); |
||
846 | popupmenu.Items.Items[0].Items[4].Caption := getlangentry('PopupA5'); |
||
847 | popupmenu.Items.Items[1].Caption := getlangentry('PopupB'); |
||
848 | popupmenu.Items.Items[1].Items[0].Caption := getlangentry('PopupB1'); |
||
849 | popupmenu.Items.Items[1].Items[1].Caption := getlangentry('PopupB2'); |
||
850 | popupmenu.Items.Items[2].Caption := getlangentry('PopupC'); |
||
851 | |||
852 | // Favoriten-Farben und Einstellungen aus Registry holen |
||
853 | pal.ItemIndex := 0; |
||
854 | for i := 1 to 20 do |
||
855 | tpanel(mainform.FindComponent('favo'+inttostr(i))).Color := LeseInt('favo'+inttostr(i)); |
||
856 | pal.ItemIndex := LeseInt('Palette'); |
||
857 | AverageX.Text := inttostr(LeseInt('AverageX')); |
||
858 | AverageY.Text := inttostr(LeseInt('AverageY')); |
||
859 | |||
860 | ZeigeRichtigePalette; |
||
861 | end; |
||
862 | |||
863 | function WebSafeColor(inp: TColor): TColor; |
||
864 | |||
865 | function WebSafeVal(int: Byte): Byte; |
||
866 | begin |
||
867 | case int of |
||
868 | 0..26: Result := 0; |
||
869 | 27..76: Result := 51; |
||
870 | 77..127: Result := 102; |
||
871 | 128..178: Result := 153; |
||
872 | 179..229: Result := 209; |
||
873 | else Result := 255; |
||
874 | end; |
||
875 | end; |
||
876 | |||
877 | begin |
||
878 | result := rgb(WebSafeVal(GetRValue(inp)), WebSafeVal(GetGValue(inp)), WebSafeVal(GetBValue(inp))); |
||
879 | end; |
||
880 | |||
881 | function InvertString(inp: string): string; |
||
882 | var |
||
883 | i: integer; |
||
884 | begin |
||
885 | result := ''; |
||
886 | for i := length(inp) downto 1 do |
||
887 | result := result + inp[i]; |
||
888 | end; |
||
889 | |||
890 | procedure TMainForm.AktualisiereFarben(RGBAlsQuelle: boolean; Ignore: integer = 0); |
||
891 | var |
||
892 | hc: integer; |
||
893 | sc, lc: byte; |
||
894 | begin |
||
895 | if RGBAlsQuelle then |
||
896 | begin |
||
897 | RGBtoHSV(R.position, G.position, B.Position, hc, sc, lc); |
||
898 | ColorPanel.color := rgb(R.position, G.position, B.Position); |
||
899 | |||
900 | h.OnChange := nil; |
||
901 | h.position := hc; |
||
902 | AktualisiereWert(h); |
||
903 | h.OnChange := Change; |
||
904 | |||
905 | s.OnChange := nil; |
||
906 | s.position := sc; |
||
907 | AktualisiereWert(s); |
||
908 | s.OnChange := Change; |
||
909 | |||
910 | v.OnChange := nil; |
||
911 | v.position := lc; |
||
912 | AktualisiereWert(v); |
||
913 | v.OnChange := Change; |
||
914 | end |
||
915 | else |
||
916 | begin |
||
917 | ColorPanel.color := HSVtoRGB(h.Position, s.Position, v.Position); |
||
918 | |||
919 | // Die OnChange-Ereignisse werden kurzzeitig entfernt, |
||
920 | // um eine unendliche Rückkopplung durch AktualisiereFarben() zu verhindern |
||
921 | r.OnChange := nil; |
||
922 | g.OnChange := nil; |
||
923 | b.OnChange := nil; |
||
924 | |||
925 | Ladefarbe(colorpanel.Color); |
||
926 | |||
927 | AktualisiereWert(r); |
||
928 | AktualisiereWert(g); |
||
929 | AktualisiereWert(b); |
||
930 | |||
931 | r.OnChange := Change; |
||
932 | g.OnChange := Change; |
||
933 | b.OnChange := Change; |
||
934 | end; |
||
935 | |||
936 | VisualC.text := '0x00' + inttohex(GetRValue(ColorPanel.color), 2) + inttohex(GetGValue(ColorPanel.color), 2) + |
||
937 | inttohex(GetBValue(ColorPanel.color), 2); |
||
938 | HTML.text := '#' + inttohex(GetRValue(ColorPanel.color), 2) + inttohex(GetGValue(ColorPanel.color), 2) + |
||
939 | inttohex(GetBValue(ColorPanel.color), 2); |
||
940 | Delphi.text := '$00' + inttohex(GetBValue(ColorPanel.color), 2) + inttohex(GetGValue(ColorPanel.color), 2) + |
||
941 | inttohex(GetRValue(ColorPanel.color), 2); |
||
942 | VisualBasic.text := '&00' + inttohex(GetBValue(ColorPanel.color), 2) + inttohex(GetGValue(ColorPanel.color), 2) + |
||
943 | inttohex(GetRValue(ColorPanel.color), 2) + '&'; |
||
944 | Java.text := '0x' + InvertString(inttohex(GetBValue(ColorPanel.color), 2)) + InvertString(inttohex(GetGValue(ColorPanel.color), 2)) + |
||
945 | InvertString(inttohex(GetRValue(ColorPanel.color), 2)); |
||
946 | Photoshop.text := InvertString(inttohex(GetBValue(ColorPanel.color), 2)) + InvertString(inttohex(GetGValue(ColorPanel.color), 2)) + |
||
947 | InvertString(inttohex(GetRValue(ColorPanel.color), 2)); |
||
948 | Long.Text := inttostr(ColorToRGB(ColorPanel.color)); |
||
949 | |||
950 | if Ignore <> 1 then |
||
951 | CheckDelphiFarben; // Akzeptiert keine Systemfarben: DelphiBox.Selected := ColorPanel.color; |
||
952 | |||
953 | if Ignore <> 2 then |
||
954 | CheckWebfarben; |
||
955 | |||
956 | KomplementaerColor.Color := ColorPanel.Color xor $FFFFFF; |
||
957 | KomplementaerColor.Font.Color := BlackWhiteContrastColor(KomplementaerColor.Color); |
||
958 | |||
959 | websafe1.Color := WebSafeColor(colorpanel.color); |
||
960 | websafe1.Font.Color := BlackWhiteContrastColor(websafe1.Color); |
||
961 | websafe2.Color := websafe1.color xor $FFFFFF; |
||
962 | websafe2.Font.Color := BlackWhiteContrastColor(websafe2.Color); |
||
963 | |||
964 | CurrentLbl.Font.Color := BlackWhiteContrastColor(ColorPanel.Color); |
||
965 | WebsafeLbl.Font.Color := BlackWhiteContrastColor(websafe1.Color); |
||
966 | end; |
||
967 | |||
968 | function DeleteFirstSeros(str: string): string; |
||
969 | var |
||
970 | ende: boolean; |
||
971 | begin |
||
972 | ende := false; |
||
973 | while not ende do |
||
974 | if (copy(str, 0, 1) = '0') and (length(str) > 1) then |
||
975 | str := copy(str, 2, length(str)-1) |
||
976 | else |
||
977 | ende := true; |
||
978 | result := str; |
||
979 | end; |
||
980 | |||
981 | function HexToInt(hex: string; sender: tobject): integer; |
||
982 | var |
||
983 | i: integer; |
||
984 | begin |
||
985 | hex := DeleteFirstSeros(hex); |
||
986 | result := -1; |
||
987 | for i := $00 to $FF do |
||
988 | if uppercase(hex) = inttohex(i, 0) then |
||
989 | begin |
||
990 | result := i; |
||
991 | end; |
||
992 | end; |
||
993 | |||
994 | procedure TMainForm.EditKeyPress(Sender: TObject; var Key: Char); |
||
995 | begin |
||
996 | if (sender = HTML) then |
||
997 | begin |
||
998 | if not (Key in [#13, #08, '0'..'9', '#', 'a'..'f', 'A'..'F']) then Key := #0; |
||
999 | end |
||
1000 | else if (sender = Delphi) then |
||
1001 | begin |
||
1002 | if not (Key in [#13, #08, '0'..'9', '$', 'a'..'f', 'A'..'F']) then Key := #0; |
||
1003 | end |
||
1004 | else if (sender = VisualC) or (sender = Java) then |
||
1005 | begin |
||
1006 | if not (Key in [#13, #08, '0'..'9', 'x', 'a'..'f', 'A'..'F']) then Key := #0; |
||
1007 | end |
||
1008 | else if (sender = VisualBasic) then |
||
1009 | begin |
||
1010 | if not (Key in [#13, #08, '0'..'9', '&', 'a'..'f', 'A'..'F']) then Key := #0; |
||
1011 | end |
||
1012 | else if (sender = Photoshop) then |
||
1013 | begin |
||
1014 | if not (Key in [#13, #08, '0'..'9', 'a'..'f', 'A'..'F']) then Key := #0; |
||
1015 | end |
||
1016 | else if (sender = Long) or (sender = AverageX) or (sender = AverageY) or |
||
1017 | (sender = SPro) or (sender = VPro) or (sender = RPro) or (sender = GPro) or |
||
1018 | (sender = BPro) then |
||
1019 | begin |
||
1020 | if not (Key in [#13, #08, '0'..'9']) then Key := #0; |
||
1021 | end |
||
1022 | else if (sender = RHex) or (sender = GHex) or (sender = BHex) or |
||
1023 | (sender = HHex) or (sender = SHex) or (sender = VHex) then |
||
1024 | begin |
||
1025 | if not (Key in [#13, #08, '0'..'9', 'a'..'f', 'A'..'F']) then Key := #0; |
||
1026 | end |
||
1027 | else |
||
1028 | begin |
||
1029 | if not (Key in [#13, #08, '0'..'9']) then Key := #0; |
||
1030 | end; |
||
1031 | |||
1032 | if key = #13 then |
||
1033 | begin |
||
1034 | Key := #0; |
||
1035 | if sender = RHex then |
||
1036 | begin |
||
1037 | R.Position := hextoint(RHex.text, r); |
||
1038 | Change(r); |
||
1039 | end; |
||
1040 | if sender = RPro then |
||
1041 | begin |
||
1042 | if strtoint(tedit(sender).text) > 100 then |
||
1043 | tedit(sender).Text := inttostr(100); |
||
1044 | R.Position := round(strtoint(RPro.text) / rproc.max * 255); |
||
1045 | Change(r); |
||
1046 | end; |
||
1047 | if sender = GHex then |
||
1048 | begin |
||
1049 | G.Position := hextoint(GHex.text, g); |
||
1050 | Change(g); |
||
1051 | end; |
||
1052 | if sender = GPro then |
||
1053 | begin |
||
1054 | if strtoint(tedit(sender).text) > 100 then |
||
1055 | tedit(sender).Text := inttostr(100); |
||
1056 | G.Position := round(strtoint(GPro.text) / gproc.max * 255); |
||
1057 | Change(g); |
||
1058 | end; |
||
1059 | if sender = BHex then |
||
1060 | begin |
||
1061 | B.Position := hextoint(BHex.text, b); |
||
1062 | Change(b); |
||
1063 | end; |
||
1064 | if sender = BPro then |
||
1065 | begin |
||
1066 | if strtoint(tedit(sender).text) > 100 then |
||
1067 | tedit(sender).Text := inttostr(100); |
||
1068 | B.Position := round(strtoint(BPro.text) / bproc.max * 255); |
||
1069 | Change(b); |
||
1070 | end; |
||
1071 | if sender = HHex then |
||
1072 | begin |
||
1073 | H.Position := ceil(hextoint(HHex.text, h) / 255 * 359); |
||
1074 | Change(h); |
||
1075 | end; |
||
1076 | if sender = HGra then |
||
1077 | begin |
||
1078 | H.Position := strtoint(HGra.text); |
||
1079 | Change(h); |
||
1080 | end; |
||
1081 | if sender = SHex then |
||
1082 | begin |
||
1083 | S.Position := hextoint(SHex.text, s); |
||
1084 | Change(s); |
||
1085 | end; |
||
1086 | if sender = SPro then |
||
1087 | begin |
||
1088 | if strtoint(tedit(sender).text) > 100 then |
||
1089 | tedit(sender).Text := inttostr(100); |
||
1090 | S.Position := round(strtoint(SPro.text) / sproc.max * 255); |
||
1091 | Change(h); |
||
1092 | end; |
||
1093 | if sender = VHex then |
||
1094 | begin |
||
1095 | v.Position := hextoint(VHex.text, v); |
||
1096 | Change(v); |
||
1097 | end; |
||
1098 | if sender = VPro then |
||
1099 | begin |
||
1100 | if strtoint(tedit(sender).text) > 100 then |
||
1101 | tedit(sender).Text := inttostr(100); |
||
1102 | V.Position := round(strtoint(VPro.text) / vproc.max * 255); |
||
1103 | Change(h); |
||
1104 | end; |
||
1105 | if sender = RDec then |
||
1106 | begin |
||
1107 | if strtoint(RDec.Text) > RDecC.Max then RDec.Text := inttostr(RDecC.Max); |
||
1108 | if strtoint(RDec.Text) < RDecC.Min then RDec.Text := inttostr(RDecC.Min); |
||
1109 | R.Position := strtoint(RDec.text); |
||
1110 | Change(r); |
||
1111 | end; |
||
1112 | if sender = GDec then |
||
1113 | begin |
||
1114 | if strtoint(GDec.Text) > GDecC.Max then GDec.Text := inttostr(GDecC.Max); |
||
1115 | if strtoint(GDec.Text) < GDecC.Min then GDec.Text := inttostr(GDecC.Min); |
||
1116 | G.Position := strtoint(GDec.text); |
||
1117 | Change(g); |
||
1118 | end; |
||
1119 | if sender = BDec then |
||
1120 | begin |
||
1121 | if strtoint(BDec.Text) > BDecC.Max then BDec.Text := inttostr(BDecC.Max); |
||
1122 | if strtoint(BDec.Text) < BDecC.Min then BDec.Text := inttostr(BDecC.Min); |
||
1123 | B.Position := strtoint(BDec.text); |
||
1124 | Change(b); |
||
1125 | end; |
||
1126 | if sender = HDec then |
||
1127 | begin |
||
1128 | if strtoint(HDec.Text) > HDecC.Max then HDec.Text := inttostr(HDecC.Max); |
||
1129 | if strtoint(HDec.Text) < HDecC.Min then HDec.Text := inttostr(HDecC.Min); |
||
1130 | H.Position := ceil(strtoint(HDec.text) / 255 * 359); |
||
1131 | Change(H); |
||
1132 | end; |
||
1133 | if sender = SDec then |
||
1134 | begin |
||
1135 | if strtoint(SDec.Text) > SDecC.Max then SDec.Text := inttostr(SDecC.Max); |
||
1136 | if strtoint(SDec.Text) < SDecC.Min then SDec.Text := inttostr(SDecC.Min); |
||
1137 | S.Position := strtoint(SDec.text); |
||
1138 | Change(S); |
||
1139 | end; |
||
1140 | if sender = VDec then |
||
1141 | begin |
||
1142 | if strtoint(VDec.Text) > VDecC.Max then VDec.Text := inttostr(VDecC.Max); |
||
1143 | if strtoint(VDec.Text) < VDecC.Min then VDec.Text := inttostr(VDecC.Min); |
||
1144 | V.Position := strtoint(VDec.text); |
||
1145 | Change(V); |
||
1146 | end; |
||
1147 | if sender = Long then |
||
1148 | begin |
||
1149 | if strtoint(tedit(sender).text) > 16777215 then |
||
1150 | tedit(sender).Text := inttostr(16777215); |
||
1151 | |||
1152 | R.OnChange := nil; |
||
1153 | G.OnChange := nil; |
||
1154 | B.OnChange := nil; |
||
1155 | |||
1156 | R.Position := getrvalue(strtoint(long.text)); |
||
1157 | G.Position := getgvalue(strtoint(long.text)); |
||
1158 | B.Position := getbvalue(strtoint(long.text)); |
||
1159 | |||
1160 | R.OnChange := Change; |
||
1161 | G.OnChange := Change; |
||
1162 | B.OnChange := Change; |
||
1163 | |||
1164 | Change(r); |
||
1165 | Change(g); |
||
1166 | Change(b); |
||
1167 | end; |
||
1168 | if sender = Photoshop then |
||
1169 | begin |
||
1170 | R.OnChange := nil; |
||
1171 | G.OnChange := nil; |
||
1172 | B.OnChange := nil; |
||
1173 | |||
1174 | R.Position := hextoint(invertstring(copy(Photoshop.text, 5, 2)), r); |
||
1175 | G.Position := hextoint(invertstring(copy(Photoshop.text, 3, 2)), g); |
||
1176 | B.Position := hextoint(invertstring(copy(Photoshop.text, 1, 2)), b); |
||
1177 | |||
1178 | R.OnChange := Change; |
||
1179 | G.OnChange := Change; |
||
1180 | B.OnChange := Change; |
||
1181 | |||
1182 | Change(r); |
||
1183 | Change(g); |
||
1184 | Change(b); |
||
1185 | end; |
||
1186 | if sender = Java then |
||
1187 | begin |
||
1188 | R.OnChange := nil; |
||
1189 | G.OnChange := nil; |
||
1190 | B.OnChange := nil; |
||
1191 | |||
1192 | R.Position := hextoint(invertstring(copy(Java.text, 7, 2)), r); |
||
1193 | G.Position := hextoint(invertstring(copy(Java.text, 5, 2)), g); |
||
1194 | B.Position := hextoint(invertstring(copy(Java.text, 3, 2)), b); |
||
1195 | |||
1196 | R.OnChange := Change; |
||
1197 | G.OnChange := Change; |
||
1198 | B.OnChange := Change; |
||
1199 | |||
1200 | Change(r); |
||
1201 | Change(g); |
||
1202 | Change(b); |
||
1203 | end; |
||
1204 | if sender = VisualBasic then |
||
1205 | begin |
||
1206 | R.OnChange := nil; |
||
1207 | G.OnChange := nil; |
||
1208 | B.OnChange := nil; |
||
1209 | |||
1210 | R.Position := hextoint(copy(VisualBasic.text, 8, 2), r); |
||
1211 | G.Position := hextoint(copy(VisualBasic.text, 6, 2), g); |
||
1212 | B.Position := hextoint(copy(VisualBasic.text, 4, 2), b); |
||
1213 | |||
1214 | R.OnChange := Change; |
||
1215 | G.OnChange := Change; |
||
1216 | B.OnChange := Change; |
||
1217 | |||
1218 | Change(r); |
||
1219 | Change(g); |
||
1220 | Change(b); |
||
1221 | end; |
||
1222 | if sender = VisualC then |
||
1223 | begin |
||
1224 | R.OnChange := nil; |
||
1225 | G.OnChange := nil; |
||
1226 | B.OnChange := nil; |
||
1227 | |||
1228 | R.Position := hextoint(copy(VisualC.text, 9, 2), r); |
||
1229 | G.Position := hextoint(copy(VisualC.text, 7, 2), g); |
||
1230 | B.Position := hextoint(copy(VisualC.text, 5, 2), b); |
||
1231 | |||
1232 | R.OnChange := Change; |
||
1233 | G.OnChange := Change; |
||
1234 | B.OnChange := Change; |
||
1235 | |||
1236 | Change(r); |
||
1237 | Change(g); |
||
1238 | Change(b); |
||
1239 | end; |
||
1240 | if sender = Delphi then |
||
1241 | begin |
||
1242 | R.OnChange := nil; |
||
1243 | G.OnChange := nil; |
||
1244 | B.OnChange := nil; |
||
1245 | |||
1246 | R.Position := hextoint(copy(Delphi.text, 8, 2), r); |
||
1247 | G.Position := hextoint(copy(Delphi.text, 6, 2), g); |
||
1248 | B.Position := hextoint(copy(Delphi.text, 4, 2), b); |
||
1249 | |||
1250 | R.OnChange := Change; |
||
1251 | G.OnChange := Change; |
||
1252 | B.OnChange := Change; |
||
1253 | |||
1254 | Change(r); |
||
1255 | Change(g); |
||
1256 | Change(b); |
||
1257 | end; |
||
1258 | if sender = HTML then |
||
1259 | begin |
||
1260 | R.OnChange := nil; |
||
1261 | G.OnChange := nil; |
||
1262 | B.OnChange := nil; |
||
1263 | |||
1264 | R.Position := hextoint(copy(html.text, 2, 2), r); |
||
1265 | G.Position := hextoint(copy(html.text, 4, 2), g); |
||
1266 | B.Position := hextoint(copy(html.text, 6, 2), b); |
||
1267 | |||
1268 | R.OnChange := Change; |
||
1269 | G.OnChange := Change; |
||
1270 | B.OnChange := Change; |
||
1271 | |||
1272 | Change(r); |
||
1273 | Change(g); |
||
1274 | Change(b); |
||
1275 | end; |
||
1276 | end; |
||
1277 | end; |
||
1278 | |||
1279 | procedure TMainForm.UpDownClick(Sender: TObject; Button: TUDBtnType); |
||
1280 | begin |
||
1281 | if hgrac.Position = hgrac.Min then |
||
1282 | hgrac.Position := hgrac.Max-1; |
||
1283 | if hgrac.Position = hgrac.Max then |
||
1284 | hgrac.Position := hgrac.Min+1; |
||
1285 | if (sender = RHexC) or (sender = RDecC) then |
||
1286 | R.Position := TUpDown(sender).Position; |
||
1287 | if (sender = RProC) then |
||
1288 | R.Position := round(RProC.Position / 100 * 255); |
||
1289 | if (sender = GHexC) or (sender = GDecC) then |
||
1290 | G.Position := TUpDown(sender).Position; |
||
1291 | if (sender = GProC) then |
||
1292 | G.Position := round(GProC.Position / 100 * 255); |
||
1293 | if (sender = BHexC) or (sender = BDecC) then |
||
1294 | B.Position := TUpDown(sender).Position; |
||
1295 | if (sender = BProC) then |
||
1296 | B.Position := round(BProC.Position / 100 * 255); |
||
1297 | if (sender = HHexC) or (sender = HDecC) then |
||
1298 | H.Position := ceil(TUpDown(sender).Position / 255 * 359); |
||
1299 | if (sender = HGraC) then |
||
1300 | H.Position := TUpDown(sender).Position; |
||
1301 | if (sender = SHexC) or (sender = SDecC) then |
||
1302 | S.Position := TUpDown(sender).Position; |
||
1303 | if (sender = SProC) then |
||
1304 | S.Position := round(SProC.Position / 100 * 255); |
||
1305 | if (sender = VHexC) or (sender = VDecC) then |
||
1306 | V.Position := TUpDown(sender).Position; |
||
1307 | if sender = VProC then |
||
1308 | V.Position := round(VProC.Position / 100 * 255); |
||
1309 | if (sender = Color1Upd) then |
||
1310 | begin |
||
1311 | Color1Edt.Text := inttostr(Color1Upd.Position); |
||
1312 | Color2Upd.Position := Color1Upd.Max - Color1Upd.Position; |
||
1313 | Color2Edt.Text := inttostr(Color2Upd.Position); |
||
1314 | BerechneMixColor; |
||
1315 | end; |
||
1316 | if (sender = Color2Upd) then |
||
1317 | begin |
||
1318 | Color2Edt.Text := inttostr(Color2Upd.Position); |
||
1319 | Color1Upd.Position := Color2Upd.Max - Color2Upd.Position; |
||
1320 | Color1Edt.Text := inttostr(Color1Upd.Position); |
||
1321 | BerechneMixColor; |
||
1322 | end; |
||
1323 | end; |
||
1324 | |||
1325 | procedure TMainForm.AktualisiereWert(Sender: TObject); |
||
1326 | begin |
||
1327 | if sender = R then |
||
1328 | begin |
||
1329 | RHex.text := inttohex(R.position, 0); |
||
1330 | RHexC.Position := R.Position; |
||
1331 | RDec.text := inttostr(R.position); |
||
1332 | RDecC.Position := R.Position; |
||
1333 | RPro.Text := inttostr(round(R.position / 255 * 100)); |
||
1334 | RProC.Position := round(R.position / 255 * 100); |
||
1335 | end; |
||
1336 | if sender = G then |
||
1337 | begin |
||
1338 | GHex.text := inttohex(G.position, 0); |
||
1339 | GHexC.Position := G.Position; |
||
1340 | GDec.text := inttostr(G.position); |
||
1341 | GDecC.Position := G.Position; |
||
1342 | GPro.Text := inttostr(round(G.position / 255 * 100)); |
||
1343 | GProC.Position := round(G.position / 255 * 100); |
||
1344 | end; |
||
1345 | if sender = B then |
||
1346 | begin |
||
1347 | BHex.text := inttohex(B.position, 0); |
||
1348 | BHexC.Position := B.position; |
||
1349 | BDec.text := inttostr(B.position); |
||
1350 | BDecC.Position := B.position; |
||
1351 | BPro.Text := inttostr(round(B.position / 255 * 100)); |
||
1352 | BProC.Position := round(B.position / 255 * 100); |
||
1353 | end; |
||
1354 | if sender = H then |
||
1355 | begin |
||
1356 | HHex.text := inttohex(ceil(H.position / 359 * 255), 0); |
||
1357 | HHexC.Position := ceil(H.position / 359 * 255); |
||
1358 | HDec.text := inttostr(ceil(H.position / 359 * 255)); |
||
1359 | HDecC.Position := ceil(H.position / 359 * 255); |
||
1360 | HGra.text := inttostr(H.position); |
||
1361 | HGraC.Position := H.position; |
||
1362 | end; |
||
1363 | if sender = S then |
||
1364 | begin |
||
1365 | SHex.text := inttohex(S.position, 0); |
||
1366 | SHexC.Position := S.position; |
||
1367 | SDec.text := inttostr(S.position); |
||
1368 | SDecC.Position := S.position; |
||
1369 | SPro.Text := inttostr(round(S.position / 255 * 100)); |
||
1370 | SProC.Position := round(S.position / 255 * 100); |
||
1371 | end; |
||
1372 | if sender = V then |
||
1373 | begin |
||
1374 | VHex.text := inttohex(V.position, 0); |
||
1375 | VHexC.Position := V.position; |
||
1376 | VDec.text := inttostr(V.position); |
||
1377 | VDecC.Position := V.position; |
||
1378 | VPro.Text := inttostr(round(V.position / 255 * 100)); |
||
1379 | VProC.Position := round(V.position / 255 * 100); |
||
1380 | end; |
||
1381 | end; |
||
1382 | |||
1383 | procedure TMainForm.Ladefarbe(col: tcolor); |
||
1384 | begin |
||
1385 | r.Position := GetRValue(col); |
||
1386 | g.Position := GetGValue(col); |
||
1387 | b.Position := GetBValue(col); |
||
1388 | end; |
||
1389 | |||
1390 | procedure TMainForm.Change(Sender: TObject); |
||
1391 | begin |
||
1392 | if (sender = r) then |
||
1393 | begin |
||
1394 | DrawGrad(2); |
||
1395 | DrawGrad(3); |
||
1396 | DrawGrad(4); |
||
1397 | DrawGrad(5); |
||
1398 | DrawGrad(6); |
||
1399 | end; |
||
1400 | if (sender = g) then |
||
1401 | begin |
||
1402 | DrawGrad(1); |
||
1403 | DrawGrad(3); |
||
1404 | DrawGrad(4); |
||
1405 | DrawGrad(5); |
||
1406 | DrawGrad(6); |
||
1407 | end; |
||
1408 | if (sender = b) then |
||
1409 | begin |
||
1410 | DrawGrad(1); |
||
1411 | DrawGrad(2); |
||
1412 | DrawGrad(4); |
||
1413 | DrawGrad(5); |
||
1414 | DrawGrad(6); |
||
1415 | end; |
||
1416 | if (sender = h) then |
||
1417 | begin |
||
1418 | DrawGrad(1); |
||
1419 | DrawGrad(2); |
||
1420 | DrawGrad(3); |
||
1421 | DrawGrad(5); |
||
1422 | DrawGrad(6); |
||
1423 | end; |
||
1424 | if (sender = s) then |
||
1425 | begin |
||
1426 | DrawGrad(1); |
||
1427 | DrawGrad(2); |
||
1428 | DrawGrad(3); |
||
1429 | DrawGrad(4); |
||
1430 | DrawGrad(6); |
||
1431 | end; |
||
1432 | if (sender = v) then |
||
1433 | begin |
||
1434 | DrawGrad(1); |
||
1435 | DrawGrad(2); |
||
1436 | DrawGrad(3); |
||
1437 | DrawGrad(4); |
||
1438 | DrawGrad(5); |
||
1439 | end; |
||
1440 | |||
1441 | AktualisiereWert(sender); |
||
1442 | AktualisiereFarben((sender = R) or (sender = G) or (sender = B)); |
||
1443 | end; |
||
1444 | |||
1445 | procedure TMainForm.PickBtnClick(Sender: TObject); |
||
1446 | begin |
||
1447 | SetCapture(MainForm.Handle); |
||
1448 | PickBtn.Enabled := false; |
||
1449 | //PickTimer.Enabled := true; |
||
1450 | Caption := Application.Title + ' ['+getlangentry('capture')+']'; |
||
1451 | end; |
||
1452 | |||
1453 | procedure TMainForm.PickTimerTimer(Sender: TObject); |
||
1454 | var |
||
1455 | CursorPos: TPoint; |
||
1456 | PixelCol: TColor; |
||
1457 | AverageR, AverageG, AverageB: integer; |
||
1458 | x, y: shortint; |
||
1459 | begin |
||
1460 | GetCursorPos(CursorPos); |
||
1461 | CoordsLbl.Caption := Format('%d,' + #13 + '%d', [CursorPos.x, CursorPos.y]); |
||
1462 | |||
1463 | AverageR := 0; |
||
1464 | AverageG := 0; |
||
1465 | Averageb := 0; |
||
1466 | for y := -floor((strtoint(AverageY.text)-1)/2) to ceil((strtoint(AverageY.text)-1)/2) do |
||
1467 | for x := -floor((strtoint(AverageX.text)-1)/2) to ceil((strtoint(AverageX.text)-1)/2) do |
||
1468 | begin |
||
1469 | PixelCol := GetPixel(ScreenDC, CursorPos.x + x, CursorPos.y + y); |
||
1470 | AverageR := AverageR + GetRValue(PixelCol); |
||
1471 | AverageG := AverageG + GetGValue(PixelCol); |
||
1472 | AverageB := AverageB + GetBValue(PixelCol); |
||
1473 | end; |
||
1474 | if strtoint(AverageX.text)*strtoint(AverageY.text) > 0 then |
||
1475 | AverageR := AverageR div (strtoint(AverageX.text)*strtoint(AverageY.text)); |
||
1476 | if strtoint(AverageX.text)*strtoint(AverageY.text) > 0 then |
||
1477 | AverageG := AverageG div (strtoint(AverageX.text)*strtoint(AverageY.text)); |
||
1478 | if strtoint(AverageX.text)*strtoint(AverageY.text) > 0 then |
||
1479 | AverageB := AverageB div (strtoint(AverageX.text)*strtoint(AverageY.text)); |
||
1480 | |||
1481 | PixelCol := RGB(Lo(AverageR), Lo(AverageG), Lo(AverageB)); |
||
1482 | |||
1483 | BitBlt(MemPix.Canvas.Handle, |
||
1484 | 0, 0, |
||
1485 | strtoint(AverageX.text), strtoint(AverageY.text), |
||
1486 | ScreenDC, |
||
1487 | CursorPos.x - floor(strtoint(AverageX.text)/2), CursorPos.y - floor(strtoint(AverageY.text)/2), |
||
1488 | SRCCOPY); |
||
1489 | StretchBlt(MagBox.Canvas.Handle, |
||
1490 | 0, 0, |
||
1491 | MagBox.Width, MagBox.Height, |
||
1492 | MemPix.Canvas.Handle, |
||
1493 | 0, 0, |
||
1494 | strtoint(AverageX.text), strtoint(AverageY.text), |
||
1495 | SRCCOPY); |
||
1496 | |||
1497 | if not PickBtn.Enabled then |
||
1498 | Ladefarbe(PixelCol); |
||
1499 | end; |
||
1500 | |||
1501 | procedure TMainForm.RandomBtnClick(Sender: TObject); |
||
1502 | begin |
||
1503 | R.Position := Random(255); |
||
1504 | G.Position := Random(255); |
||
1505 | B.Position := Random(255); |
||
1506 | end; |
||
1507 | |||
1508 | procedure TMainForm.BerechneMixColor(); |
||
1509 | var |
||
1510 | r, g, b: integer; |
||
1511 | begin |
||
1512 | r := round(Color1Upd.Position / 100 * getrvalue(color1.Color) + Color2Upd.Position / 100 * getrvalue(color2.Color)); |
||
1513 | g := round(Color1Upd.Position / 100 * getgvalue(color1.Color) + Color2Upd.Position / 100 * getgvalue(color2.Color)); |
||
1514 | b := round(Color1Upd.Position / 100 * getbvalue(color1.Color) + Color2Upd.Position / 100 * getbvalue(color2.Color)); |
||
1515 | |||
1516 | mixedcolor.Color := rgb(r, g, b); |
||
1517 | mixedcolor.font.color := BlackWhiteContrastColor(mixedcolor.color); |
||
1518 | end; |
||
1519 | |||
1520 | procedure TMainForm.MenuClick(Sender: TObject); |
||
1521 | begin |
||
1522 | if sender = mAktuell then |
||
1523 | tpanel(PopupmenuSender).Color := colorpanel.Color; |
||
1524 | if sender = mKomplementaer then |
||
1525 | tpanel(PopupmenuSender).Color := komplementaercolor.Color; |
||
1526 | if sender = mWebsafe then |
||
1527 | tpanel(PopupmenuSender).Color := websafe1.Color; |
||
1528 | if sender = mWebsafeInv then |
||
1529 | tpanel(PopupmenuSender).Color := websafe2.Color; |
||
1530 | if sender = mMixColor then |
||
1531 | tpanel(PopupmenuSender).Color := mixedcolor.Color; |
||
1532 | if sender = mUmkehren then |
||
1533 | tpanel(PopupmenuSender).Color := tpanel(PopupmenuSender).Color xor $FFFFFF; |
||
1534 | tpanel(PopupmenuSender).Font.Color := BlackWhiteContrastColor(tpanel(PopupmenuSender).Color); |
||
1535 | BerechneMixColor; |
||
1536 | |||
1537 | if (PopupmenuSender = favo1) or (PopupmenuSender = favo2) or (PopupmenuSender = favo3) or |
||
1538 | (PopupmenuSender = favo4) or (PopupmenuSender = favo5) or (PopupmenuSender = favo6) or |
||
1539 | (PopupmenuSender = favo7) or (PopupmenuSender = favo8) or (PopupmenuSender = favo9) or |
||
1540 | (PopupmenuSender = favo10) or (PopupmenuSender = favo11) or (PopupmenuSender = favo12) or |
||
1541 | (PopupmenuSender = favo13) or (PopupmenuSender = favo14) or (PopupmenuSender = favo15) or |
||
1542 | (PopupmenuSender = favo16) or (PopupmenuSender = favo17) or (PopupmenuSender = favo18) or |
||
1543 | (PopupmenuSender = favo19) or (PopupmenuSender = favo20) then |
||
1544 | SchreibeInt(tpanel(PopupmenuSender).GetNamePath, colortorgb(tpanel(PopupmenuSender).color)); |
||
1545 | end; |
||
1546 | |||
1547 | procedure TMainForm.Menu2Click(Sender: TObject); |
||
1548 | begin |
||
1549 | if sender = mAktuell2 then |
||
1550 | Ladefarbe(tpanel(PopupmenuSender).Color); |
||
1551 | if sender = mKomplementaer2 then |
||
1552 | Ladefarbe(tpanel(PopupmenuSender).Color xor $FFFFFF); |
||
1553 | end; |
||
1554 | |||
1555 | procedure TMainForm.GreyscaleBtnClick(Sender: TObject); |
||
1556 | begin |
||
1557 | S.Position := 0; |
||
1558 | end; |
||
1559 | |||
1560 | procedure TMainForm.DefColorClick(Sender: TObject); |
||
1561 | begin |
||
1562 | LadeFarbe(tpanel(sender).Color); |
||
1563 | end; |
||
1564 | |||
1565 | procedure TMainForm.DelphiBoxClick(Sender: TObject); |
||
1566 | var |
||
1567 | tmp: string; |
||
1568 | begin |
||
1569 | tmp := inttohex(colortorgb(delphibox.Selected), 6); // Systemfarben umwandeln |
||
1570 | |||
1571 | R.OnChange := nil; |
||
1572 | G.OnChange := nil; |
||
1573 | B.OnChange := nil; |
||
1574 | |||
1575 | R.Position := hextoint(copy(tmp, 5, 2), r); |
||
1576 | G.Position := hextoint(copy(tmp, 3, 2), g); |
||
1577 | B.Position := hextoint(copy(tmp, 1, 2), b); |
||
1578 | |||
1579 | AktualisiereWert(r); |
||
1580 | AktualisiereWert(g); |
||
1581 | AktualisiereWert(b); |
||
1582 | |||
1583 | R.OnChange := Change; |
||
1584 | G.OnChange := Change; |
||
1585 | B.OnChange := Change; |
||
1586 | |||
1587 | // DelphiBox muss nicht mehr ignoriert werden, da wir nun "DelphiZustimmend" |
||
1588 | // verwenden und nichts mehr in der DelphiBox markieren |
||
1589 | // AktualisiereFarben(true, 1); |
||
1590 | AktualisiereFarben(true); |
||
1591 | end; |
||
1592 | |||
1593 | procedure TMainForm.TakeClick(Sender: TObject); |
||
1594 | begin |
||
1595 | Ladefarbe(tpanel(sender).color); |
||
1596 | end; |
||
1597 | |||
1598 | procedure TMainForm.InvertBtnClick(Sender: TObject); |
||
1599 | begin |
||
1600 | TakeClick(KomplementaerColor); |
||
1601 | end; |
||
1602 | |||
1603 | procedure TMainForm.TabControlChange(Sender: TObject); |
||
1604 | begin |
||
1605 | panel1.Visible := tabcontrol.TabIndex = 0; |
||
1606 | panel2.Visible := tabcontrol.TabIndex = 1; |
||
1607 | panel3.Visible := tabcontrol.TabIndex = 2; |
||
1608 | panel4.Visible := tabcontrol.TabIndex = 3; |
||
1609 | end; |
||
1610 | |||
1611 | procedure TMainForm.WebsafeLblClick(Sender: TObject); |
||
1612 | begin |
||
1613 | TakeClick(websafe1); |
||
1614 | end; |
||
1615 | |||
1616 | procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); |
||
1617 | begin |
||
1618 | ReleaseDC(0, ScreenDC); |
||
1619 | MemPix.Free; |
||
1620 | BoxBuf.Free; |
||
1621 | Box2Buf.Free; |
||
1622 | end; |
||
1623 | |||
1624 | procedure TMainForm.OutboxPaint(Sender: TObject); |
||
1625 | begin |
||
1626 | DrawGrad(TPaintbox(Sender).Tag); |
||
1627 | end; |
||
1628 | |||
1629 | procedure TMainForm.ZeigeRichtigePalette; |
||
1630 | begin |
||
1631 | WinPanel.Visible := Pal.ItemIndex = 0; |
||
1632 | JskPanel.Visible := Pal.ItemIndex = 1; |
||
1633 | end; |
||
1634 | |||
1635 | procedure TMainForm.PalClick(Sender: TObject); |
||
1636 | begin |
||
1637 | ZeigeRichtigePalette; |
||
1638 | SchreibeInt('Palette', Pal.ItemIndex); |
||
1639 | end; |
||
1640 | |||
1641 | procedure TMainForm.WinDialogClick(Sender: TObject); |
||
1642 | begin |
||
1643 | WinColorDialog.Color := ColorPanel.Color; |
||
1644 | if WinColorDialog.Execute then |
||
1645 | LadeFarbe(WinColorDialog.Color); |
||
1646 | end; |
||
1647 | |||
1648 | procedure TMainForm.WebcolorBoxClick(Sender: TObject); |
||
1649 | begin |
||
1650 | html.Text := webfarben[webcolorbox.ItemIndex]; |
||
1651 | |||
1652 | R.OnChange := nil; |
||
1653 | G.OnChange := nil; |
||
1654 | B.OnChange := nil; |
||
1655 | |||
1656 | R.Position := hextoint(copy(html.text, 2, 2), r); |
||
1657 | G.Position := hextoint(copy(html.text, 4, 2), g); |
||
1658 | B.Position := hextoint(copy(html.text, 6, 2), b); |
||
1659 | |||
1660 | R.OnChange := Change; |
||
1661 | G.OnChange := Change; |
||
1662 | B.OnChange := Change; |
||
1663 | |||
1664 | DrawGrad(1); |
||
1665 | DrawGrad(2); |
||
1666 | DrawGrad(3); |
||
1667 | DrawGrad(4); |
||
1668 | DrawGrad(5); |
||
1669 | DrawGrad(6); |
||
1670 | |||
1671 | AktualisiereWert(r); |
||
1672 | AktualisiereWert(g); |
||
1673 | AktualisiereWert(b); |
||
1674 | |||
1675 | // WebcolorBox muss nicht mehr ignoriert werden, da wir nun "WebZustimmend" |
||
1676 | // verwenden und nichts mehr in der WebcolorBox markieren |
||
1677 | // AktualisiereFarben(true, 2); |
||
1678 | AktualisiereFarben(true); |
||
1679 | end; |
||
1680 | |||
1681 | procedure TMainForm.CheckWebfarben; |
||
1682 | var |
||
1683 | i: integer; |
||
1684 | begin |
||
1685 | WebZutreffend.Clear; |
||
1686 | if webcolorbox.itemindex <> -1 then |
||
1687 | if html.text <> webfarben[webcolorbox.itemindex] then |
||
1688 | webcolorbox.itemindex := -1; |
||
1689 | for i := 0 to high(webfarben) do |
||
1690 | begin |
||
1691 | if html.text = webfarben[i] then |
||
1692 | WebZutreffend.Items.add(webcolorbox.Items.Strings[i]); // Geht nicht mit mehreren Übereinstimmungen: webcolorbox.ItemIndex := i; |
||
1693 | end; |
||
1694 | end; |
||
1695 | |||
1696 | procedure TMainForm.CheckDelphiFarben; |
||
1697 | var |
||
1698 | i: integer; |
||
1699 | begin |
||
1700 | DelphiZutreffend.Clear; |
||
1701 | if colortorgb(delphibox.selected) <> colortorgb(colorpanel.Color) then |
||
1702 | delphibox.ItemIndex := -1; |
||
1703 | for i := 0 to delphibox.Items.Count - 1 do |
||
1704 | begin |
||
1705 | if colortorgb(delphibox.Colors[i]) = colortorgb(colorpanel.Color) then |
||
1706 | DelphiZutreffend.Items.add(delphibox.ColorNames[i]); // Geht nicht mit mehreren Übereinstimmungen: delphibox.ItemIndex := i; |
||
1707 | end; |
||
1708 | end; |
||
1709 | |||
1710 | procedure TMainForm.DelphiZutreffendClick(Sender: TObject); |
||
1711 | begin |
||
1712 | if delphizutreffend.ItemIndex <> -1 then |
||
1713 | delphibox.ItemIndex := delphibox.Items.IndexOf(delphizutreffend.Items.Strings[delphizutreffend.ItemIndex]); |
||
1714 | end; |
||
1715 | |||
1716 | procedure TMainForm.WebZutreffendClick(Sender: TObject); |
||
1717 | begin |
||
1718 | if webzutreffend.ItemIndex <> -1 then |
||
1719 | webcolorbox.ItemIndex := webcolorbox.Items.IndexOf(webzutreffend.Items.Strings[webzutreffend.ItemIndex]); |
||
1720 | end; |
||
1721 | |||
1722 | procedure TMainForm.LinkClick(Sender: TObject); |
||
1723 | begin |
||
1724 | if sender = info7 then |
||
1725 | ShellExecute(Application.Handle, 'open', pchar('mailto:'+tlabel(sender).caption+'?subject=ColorManager 2.0'), nil, nil, SW_SHOW); |
||
1726 | if (sender = Info9) or (sender = Info13) then |
||
1727 | ShellExecute(Application.Handle, 'open', pchar(Info9.caption), nil, nil, SW_SHOW); |
||
1728 | if (sender = Info11) then |
||
1729 | ShellExecute(Application.Handle, 'open', 'http://www.icq.com/people/about_me.php?uin=160106169', nil, nil, SW_SHOW); |
||
1730 | if (sender = Info14) then |
||
1731 | ShellExecute(Application.Handle, 'open', 'http://www.viathinksoft.de/', nil, nil, SW_SHOW); |
||
1732 | if (sender = Info15) then |
||
1733 | ShellExecute(Application.Handle, 'open', 'http://www.viathinksoft.de/index.php?page=projektanzeige&seite=projekt-20', nil, nil, SW_SHOW); |
||
1734 | end; |
||
1735 | |||
1736 | var |
||
1737 | ColorTmrDurchlauf: integer; |
||
1738 | |||
1739 | procedure TMainForm.ColorTmrTimer(Sender: TObject); |
||
1740 | begin |
||
1741 | ColorTmrDurchlauf :=ColorTmrDurchlauf + 10; |
||
1742 | if ColorTmrDurchlauf >= 360 then |
||
1743 | ColorTmrDurchlauf := ColorTmrDurchlauf - 360; |
||
1744 | if panel4.Visible then |
||
1745 | Info1.Font.Color := hsvtorgb(ColorTmrDurchlauf, 255, 200); |
||
1746 | end; |
||
1747 | |||
1748 | procedure TMainForm.SchreibeInt(name: string; wert: integer); |
||
1749 | var |
||
1750 | reg: TRegistry; |
||
1751 | begin |
||
1752 | reg := tregistry.Create; |
||
1753 | try |
||
1754 | Reg.RootKey := HKEY_CURRENT_USER; |
||
1755 | Reg.OpenKey('SOFTWARE\ViaThinkSoft\ColorManager\', true); |
||
1756 | Reg.WriteInteger(name, wert); |
||
1757 | Reg.CloseKey; |
||
1758 | finally |
||
1759 | Reg.Free; |
||
1760 | end; |
||
1761 | end; |
||
1762 | |||
1763 | function TMainForm.LeseInt(name: string): integer; |
||
1764 | var |
||
1765 | reg: TRegistry; |
||
1766 | begin |
||
1767 | result := 0; |
||
1768 | reg := tregistry.Create; |
||
1769 | try |
||
1770 | Reg.RootKey := HKEY_CURRENT_USER; |
||
1771 | Reg.OpenKey('SOFTWARE\ViaThinkSoft\ColorManager\', true); |
||
1772 | if Reg.ValueExists(name) then |
||
1773 | result := Reg.ReadInteger(name); |
||
1774 | Reg.CloseKey; |
||
1775 | finally |
||
1776 | Reg.Free; |
||
1777 | end; |
||
1778 | end; |
||
1779 | |||
1780 | procedure TMainForm.SaveEditChange(Sender: TObject); |
||
1781 | begin |
||
1782 | SchreibeInt(tedit(sender).GetNamePath, strtoint(tedit(sender).text)); |
||
1783 | end; |
||
1784 | |||
1785 | procedure TMainForm.ColorClick(Sender: TObject; Button: TMouseButton; |
||
1786 | Shift: TShiftState; X, Y: Integer); |
||
1787 | var |
||
1788 | MausPos: TPoint; |
||
1789 | begin |
||
1790 | PopupMenuSender := sender; |
||
1791 | GetCursorPos(MausPos); |
||
1792 | Popupmenu.Items.Items[0].Enabled := sender <> MixedColor; |
||
1793 | Popupmenu.Items.Items[2].Enabled := sender <> MixedColor; |
||
1794 | popupmenu.Popup(MausPos.x, MausPos.y); |
||
1795 | end; |
||
1796 | |||
1797 | end. |
||
1798 |