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 ;)
Narses - Di 28.07.09 22:33
Moin!
Regan hat folgendes geschrieben : |
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"... ;)
Dein Code ist wie immer sehr lehrreich,
Luckie, aber dein Anwendungskonzept kann man wohl kaum mit dem von
Christian 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!
Luckie hat folgendes geschrieben : |
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!
Luckie hat folgendes geschrieben : |
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?
Luckie hat folgendes geschrieben : |
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!
Christian V. hat folgendes geschrieben : |
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. ;)
Christian V. hat folgendes geschrieben : |
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. ;)
Christian V. hat folgendes geschrieben : |
Luckie hat folgendes geschrieben : | Die Maus gleich beim Start an das Fenster zu binden, dürfte nur eine Kleinigkeit sein. | Wie meinst du das? |
Tja, das ist
Luckie, immer selbstsicher, selten konkret. :) Gewöhn dich dran. ;) (wobei ich klar stellen möchte, das
Luckie meiner Meinung nach der kompetenteste WinAPI-Programmierer hier in der EE ist!)
cu
Narses
jaenicke - Mi 29.07.09 12:34
Luckie hat folgendes geschrieben : |
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; 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.
Narses - Mi 29.07.09 12:44
Moin!
Luckie hat folgendes geschrieben : |
jaenicke hat folgendes geschrieben : | Luckie hat folgendes geschrieben : | 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 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
Narses hat folgendes geschrieben : |
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!
jaenicke hat folgendes geschrieben : |
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)
Luckie hat folgendes geschrieben : |
Die Maus gleich beim Start an das Fenster zu binden, dürfte nur eine Kleinigkeit sein. |
Luckie 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!