Entwickler-Ecke

Open Source Projekte - DesktopColorPicker


Narses - Di 28.07.09 02:27
Titel: DesktopColorPicker
Moin!

Das Programm zeigt einen vergrößerten Ausschnitt des Desktops um die Maus herum an. Die Farbe des Pixels kann mit Strg+Win+C in einem frei definierbaren Format in die Zwischenablage gelegt werden. Mit Strg+Win+X kann auf das nächste Format in der Formatliste umgeschaltet werden. Die Anzeige der aktuellen Farbe hat ein Kontextmenü (Rechtsklick drauf machen), in dem die letzen 10 kopierten Farben erneut abrufbar sind.

Angeregt von der Idee in diesem Thread [http://www.delphi-forum.de/topic_FastColors+v12_93835.html] hier mein Vorschlag für eine Umsetzung. ;)

cu
Narses


Regan - Di 28.07.09 22:15

Vielleicht wäre ein Screenshot zur besseren Werbung noch besser ;)


Delete - Di 28.07.09 22:22

Dazu braucht man keinen Timer: http://www.michael-puff.de/Developer/Delphi/Programme/WhatClr2_2.zip


Narses - Di 28.07.09 22:33

Moin!

user profile iconRegan hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht wäre ein Screenshot zur besseren Werbung noch besser ;)
Das ist nur ein Fun-Projekt, ich hatte gerade Lust drauf und kurz Zeit dafür, das muss man nicht "bewerben"... ;)


user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Dazu braucht man keinen Timer: http://www.michael-puff.de/Developer/Delphi/Programme/WhatClr2_2.zip
Dein Code ist wie immer sehr lehrreich, user profile iconLuckie, aber dein Anwendungskonzept kann man wohl kaum mit dem von user profile iconChristian V. vergleichen - das benutzt sich einfach besser. ;)

cu
Narses


Delete - Di 28.07.09 22:39

Die Maus gleich beim Start an das Fenster zu binden, dürfte nur eine Kleinigkeit sein.


Narses - Di 28.07.09 22:41

Moin!

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Die Maus gleich beim Start an das Fenster zu binden, dürfte nur eine Kleinigkeit sein.
Da du das sicher auch noch halb im Schlaf kannst, bin ich schon auf dein Demo-Projekt dazu gespannt. ;)

cu
Narses


Delete - Mi 29.07.09 10:49

Hach, hast du aber auch ein Pech. Gerade vorgestern habe ich den Support und die Weiterentwicklung für das Programm eingestellt. ;)


Narses - Mi 29.07.09 11:13

Moin!

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Hach, hast du aber auch ein Pech. Gerade vorgestern habe ich den Support und die Weiterentwicklung für das Programm eingestellt. ;)
Ich hab schon damit gerechnet... :|

cu :wave:
Narses


Christian V. - Mi 29.07.09 11:40

Hey, das mit dem selbst definierbaren Format is ja cool!


Delphi-Quelltext
1:
GetBValue(AColor)*0.11 +GetGValue(AColor)*0.59 +GetRValue(AColor)*0.3                    

Hat das damit zutun, dass das menschliche Auge nicht alle Farben gleich hell wahrnimmt?

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Die Maus gleich beim Start an das Fenster zu binden, dürfte nur eine Kleinigkeit sein.

Wie meinst du das?

Man sollte vielleicht noch anmerken, dass man die History per Rechtsklick auf die Farbausgabe anzeigen kann.


Narses - Mi 29.07.09 11:49

Moin!

user profile iconChristian V. hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
GetBValue(AColor)*0.11 +GetGValue(AColor)*0.59 +GetRValue(AColor)*0.3                    
Hat das damit zutun, dass das menschliche Auge nicht alle Farben gleich hell wahrnimmt?
Ja, genau. ;)

user profile iconChristian V. hat folgendes geschrieben Zum zitierten Posting springen:
Man sollte vielleicht noch anmerken, dass man die History per Rechtsklick auf die Farbausgabe anzeigen kann.
Das "verrät" einem der Hint, wenn man die Maus auf das Feld stellt. ;)

user profile iconChristian V. hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Die Maus gleich beim Start an das Fenster zu binden, dürfte nur eine Kleinigkeit sein.
Wie meinst du das?
Tja, das ist user profile iconLuckie, immer selbstsicher, selten konkret. :) Gewöhn dich dran. ;) (wobei ich klar stellen möchte, das user profile iconLuckie meiner Meinung nach der kompetenteste WinAPI-Programmierer hier in der EE ist!)

cu
Narses


jaenicke - Mi 29.07.09 12:34

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Die Maus gleich beim Start an das Fenster zu binden, dürfte nur eine Kleinigkeit sein.
Das Problem ist ja, dass man ohne Hook das nur machen kann, wenn der Benutzer die Maus drückt und zieht. (Aus Sicherheitsgründen eben)

Also ist eine zweistufige Lösung sinnvoll. Der Benutzer kann klicken und ziehen, dann kann man direkt auf OnMouseMove reagieren, sonst eben der Timer. Das sieht dann so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TfrmMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  TimeSource.Enabled := False;
  SetCapture(Handle);
end;

procedure TfrmMain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  TimeSourceTimer(Self);
end;

procedure TfrmMain.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  TimeSource.Enabled := TRUE; // wenn gerade kein capture, ausweichen auf Timer
end;
Im Anhang nen kleines Demoprojekt (das originale leicht verändert).

Ggf. muss man auch noch auf die Veränderung des Capturing reagieren (WM_CAPTURECHANGED), also dort auch den Timer aktivieren, aber das habe ich hier einmal außer Acht gelassen.


Delete - Mi 29.07.09 12:35

user profile iconChristian V. hat folgendes geschrieben Zum zitierten Posting springen:

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Die Maus gleich beim Start an das Fenster zu binden, dürfte nur eine Kleinigkeit sein.

Wie meinst du das?

Ich bezog mich auf mein Programm, da muss man erst die Maus "ergreifen" und den linken Mausbutton gedrückt halten, weil ich Suche im MSDN SETCAPTURE benutze.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Die Maus gleich beim Start an das Fenster zu binden, dürfte nur eine Kleinigkeit sein.
Das Problem ist ja, dass man ohne Hook das nur machen kann, wenn der Benutzer die Maus drückt und zieht. (Aus Sicherheitsgründen eben)

Jupp, siehe Suche im MSDN SETCAPTURE.


Narses - Mi 29.07.09 12:44

Moin!

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Die Maus gleich beim Start an das Fenster zu binden, dürfte nur eine Kleinigkeit sein.
Das Problem ist ja, dass man ohne Hook das nur machen kann, wenn der Benutzer die Maus drückt und zieht. (Aus Sicherheitsgründen eben)

Jupp, siehe Suche im MSDN SETCAPTURE.
Nur leider steht in dem Artikel nicht drin, wie man das ohne vorher die Maustaste zu drücken aktivieren kann - ohne Hook. Genau hier hatte ich auf einen hilfreichen Tipp von dir gehofft. :nixweiss: Mit Klicken ist das ja nicht das gleiche Bedienkonzept. ;)

cu
Narses


jaenicke - Mi 29.07.09 12:50

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Nur leider steht in dem Artikel nicht drin, wie man das ohne vorher die Maustaste zu drücken aktivieren kann - ohne Hook.
Ganz einfach: gar nicht (glaube ich). ;-)
Das geht aus Sicherheitsgründen nicht. Denn sonst könnte ja jedes Programm einfach so überall Mausbewegungen usw. abgreifen ohne dass man da viel dagegen tun kann. Bei entsprechenden Hooks hingegen sollte eine gute Firewall warnen (tut z.B. ZoneAlarm AFAIK).

Wobei es natürlich via Timer + GetMousePos trotzdem geht (was die Position angeht).


Narses - Mi 29.07.09 13:01

Moin!

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ganz einfach: gar nicht (glaube ich). ;-)
[...]
Wobei es natürlich via Timer + GetMousePos trotzdem geht (was die Position angeht).
Wir kommen der Sache schon näher... 8)
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Dazu braucht man keinen Timer: http://www.michael-puff.de/Developer/Delphi/Programme/WhatClr2_2.zip
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Die Maus gleich beim Start an das Fenster zu binden, dürfte nur eine Kleinigkeit sein.
user profile iconLuckie sagt hier aber was anderes - und das hätte ich gerne mal in Code-Form gesehen. ;)

cu
Narses


Delete - Mi 29.07.09 13:13

Da war dieser komische Luckie, wer auch immer das sein mag, etwas vorschnell. Nach einen Blick in die Hilfe wurde ihm aber klar, dass es mit SetCapture wohl doch nicht so einfach möglich ist.


MDX - So 02.08.09 00:22

Endlich sowas such ich schon ewig!!!

THX