Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mauszeiger Fadenkreuz auch ausserhalb des eigenen Fensters (https://www.delphipraxis.net/154428-mauszeiger-fadenkreuz-auch-ausserhalb-des-eigenen-fensters.html)

Sherlock 10. Sep 2010 09:28

Delphi-Version: 2007

Mauszeiger Fadenkreuz auch ausserhalb des eigenen Fensters
 
Hi,
ich habe mir ein kleine Programm zusammengestrickt, daß mir erlaubt Farben auszuwählen. Ganz so wie mit der Pipette in einem Grafikprogramm. Das funktioniert auch ausserhalb des eigenen Fensters. Allerdings nutze ich zwecks Genauigkeit der Auswahl
Delphi-Quellcode:
Screen.Cursor := crCross;
. Das bleibt verständlicherweise nur im eigenen Fenster gültig. Sobald ich das Fenster verlasse, wird der Mauszeiger wieder zum
Delphi-Quellcode:
crDefault
.

Meine Suche brachte mich zu Delphi-Referenz durchsuchencontrols.SetCaptureControl. Das scheint aber keine Auswirkungen zu haben. Weiss einer von Euch, wie man den Mauspfeil auch über die Grenzen des eigenen Fensters ändern kann?

Grüßle,
Sherlock

himitsu 10. Sep 2010 09:33

AW: Mauszeiger Fadenkreuz auch ausserhalb des eigenen Fensters
 
Du könntest ein transparentes Fenster über den Desktop legen (es darf nur nicht durchklickbar sein), dann bekommst du auch noch die OnClick mit, wen du z.B. das gewünschte Pixel anklicken würdest.

Wenn du z.B. die Auswahl anders löst, quasi über Drag&Drop, dann sollte sich der Curseor auch nicht ändern.
> in das Farbauswahlfeld klicken, dabei den Cursor setzen
> dann mit "gedrückter" Maustaste die gewünschte Farbe, bzw. das Pixel suchen und die Maustaste loslassen

Sherlock 10. Sep 2010 09:43

AW: Mauszeiger Fadenkreuz auch ausserhalb des eigenen Fensters
 
Transparentes, nicht durchklickbares Fenster...hab ich irgendwo mal gesehen. Das hört sich spannend an, dann kann ich ja sogar auch das MouseClick-Event nutzen. Danke!

Sherlock

blackfin 10. Sep 2010 09:43

AW: Mauszeiger Fadenkreuz auch ausserhalb des eigenen Fensters
 
Ich werf hier mal kurz SetSystemCursor in den Raum :)

Das hat halt den Nachteil, dass, wenn deine Anwendung z.B. abraucht, der Cursor bestehen bleibt...

Sherlock 10. Sep 2010 11:13

AW: Mauszeiger Fadenkreuz auch ausserhalb des eigenen Fensters
 
Naja, gerade deswegen würde ich auf SetSystemCursor verzichten wollen.

Ich habe es fast hinbekommen. Ein zweites (weisses) Fenster erzeuge ich, dessen AlphaBlendValue := 5 ist. Es hat fsStayOnTop und im OnClick dieses Forms wird es wieder versteckt und der Cursor in seinen Urzustand versetzt. Das klappt fast. Nur "fast" weil ich erst dieses Fenster durch Click aktivieren muss. Ich versuch durch SetFocus es zu aktivieren, aber das reicht scheinbar nicht.
Schnpisel aus dem auslösenden ButtonClick dazu:
Delphi-Quellcode:
  Screen.Cursor := crCross;
  SetCaptureControl(Self);
  Application.ProcessMessages;
  Form2.Left :=0;
  Form2.Top := 0;
  Form2.Width := Screen.Width;
  Form2.Height := Screen.Height;
  Form2.Show;
  Form2.SetFocus;
  Timer1.Enabled := True;
Sherlock

himitsu 10. Sep 2010 11:27

AW: Mauszeiger Fadenkreuz auch ausserhalb des eigenen Fensters
 
Vielleicht in einer anderen Reihenfolge?
Delphi-Quellcode:
  Form2.SetBounds(0, 0, Screen.Width, Screen.Height);
  Form2.Show;
  Form2.SetFocus;
  Application.ProcessMessages;
  Screen.Cursor := crCross;
  SetCaptureControl(Self);
  Timer1.Enabled := True;

Sherlock 10. Sep 2010 11:41

AW: Mauszeiger Fadenkreuz auch ausserhalb des eigenen Fensters
 
Leider nein.

Ich schau jetzt mal wie ein "normales" Form sich verhalten würde...

Sherlock
PS: Mit den Fensterboundaries bin ich noch am experiementieren, weil ich Späße wie Googletoolbar und mehrere Monitore habe, deswegen sit es etwas unaufgeräumt an der Stelle. ;)

Sherlock 10. Sep 2010 12:54

AW: Mauszeiger Fadenkreuz auch ausserhalb des eigenen Fensters
 
OK, nach der Mittagspause fiel es mir dann wie Schuppen von den Haaren: SetCaptureControl, das lässt die Maus nur die Events des zugewiesenen Controls bekommen...Da muss halt erst ein Click her, daß das wieder gerade biegt.

In diesem Sinne, das korrekte Control zugewiesen und nun gehts:
Delphi-Quellcode:
  Form2.SetBounds(0, 0, Screen.DesktopWidth, Screen.DesktopHeight);
  Form2.Show;
  Screen.Cursor := crCross;
  SetCaptureControl(Form2);
Danke!

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz