Subversion Repositories colormanager

Rev

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