Hallo,
Vielleicht hat sich schon der ein oder andere gefragt, wie so eine Farbauswahl-Pipette für den kompletten Desktop funktioniert. Viele Bildbearbeitungs-Programme bieten so eine Funktion ja auch.
Folgender Tipp ist nun also dafür da, um eine Farbauswahl-Pipette zu erstellen, mit der eine Farbe irgendwo vom Desktop oder aus einem laufenden Programm gewählt werden kann.
Es werden benötigt:
1 Button zum Auswählen der Pipette (im Beispiel 'Button1')
1 Panel zum Anzeigen der Farbe (im Beispiel 'Panel1')
2 Variablen (private):
Immer die aktuelle Farbe unter dem Mauscursor
PipetteColor: TColor;
Aktivität der Pipette
PipetteActive: Boolean;
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57:
| procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin SetCursor(LoadCursor(0, IDC_HAND)); SetCapture(Button1.Handle); PipetteActive:=TRUE; end;
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PipetteActive:=FALSE; SetCursor(LoadCursor(0, IDC_ARROW)); ReleaseCapture; Panel1.Color:=PipetteColor; end;
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var P: TPoint; DC: HDC; Col: TColorRef; begin if (PipetteActive=TRUE) then begin GetCursorPos(P);
DC:=CreateDC('DISPLAY', nil, nil, nil);
try Col:=GetPixel(DC, P.X, P.Y); PipetteColor:=Col; Panel1.Color:=Col; finally DeleteDC(DC); end; end; end; |