Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Auf Cursorveränderung reagieren (https://www.delphipraxis.net/135715-auf-cursorveraenderung-reagieren.html)

Phil125 16. Jun 2009 14:39


Auf Cursorveränderung reagieren
 
Hallo,

Mein Programm soll wenn der Cursor von crDefault auf crHandpoint wechselt
einen Linkscklick durschführen
So habe ich es bisher probiert:
Delphi-Quellcode:
if Screen.Cursor = crHandPoint then
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Jedoch wird so der Mausklick nie ausgeführt egal welcher cursor gerade zu sehen ist.
Ich denke dass dies daran liegt das er nur den aktuellen Standard Cursor überprüft,
nicht den aktuell angezeigten.

Denn wenn ich den Code so umändere:
Delphi-Quellcode:
if Screen.Cursor = crDefault then
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
wird der Klick sofort ausgeführ auch wenn nicht der crDefault Cursor
gerade angezeigt wird.

Ich hoffe mir kann jemand helfen !

SimStar001 16. Jun 2009 14:41

Re: Auf Cursorveränderung reagieren
 
du kontrollierst ja mit deinem code nur zur ausführeung den cursor status...
du musst z.b. mit nem timer ständig überprüfen...

quendolineDD 16. Jun 2009 14:51

Re: Auf Cursorveränderung reagieren
 
Das sind alle relevanten Funktionen zum Cursor: klick mich.
Weiß nicht, ob es eine Nachricht gibt, wenn der Cursor gewechselt wird. Jedenfalls kann man mit WM_SETCURSOR den Cursor wechseln.

freak4fun 16. Jun 2009 14:52

Re: Auf Cursorveränderung reagieren
 
Delphi-Quellcode:
if Screen.Cursor = crDefault then
begin
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;
:wink:

Phil125 16. Jun 2009 15:21

Re: Auf Cursorveränderung reagieren
 
Zitat:

Zitat von SimStar001
du kontrollierst ja mit deinem code nur zur ausführeung den cursor status...
du musst z.b. mit nem timer ständig überprüfen...

Ist bereits in einem Timer

Reinhard Kern 16. Jun 2009 15:34

Re: Auf Cursorveränderung reagieren
 
Zitat:

Zitat von quendolineDD
Das sind alle relevanten Funktionen zum Cursor: klick mich.
Weiß nicht, ob es eine Nachricht gibt, wenn der Cursor gewechselt wird. Jedenfalls kann man mit WM_SETCURSOR den Cursor wechseln.

Hallo,

nach Beschreibung GetCursorInfo. Habs aber nicht getestet.

Gruss Reinhard

Phil125 16. Jun 2009 15:49

Re: Auf Cursorveränderung reagieren
 
Zitat:

Zitat von Reinhard Kern
Zitat:

Zitat von quendolineDD
Das sind alle relevanten Funktionen zum Cursor: klick mich.
Weiß nicht, ob es eine Nachricht gibt, wenn der Cursor gewechselt wird. Jedenfalls kann man mit WM_SETCURSOR den Cursor wechseln.

Hallo,

nach Beschreibung GetCursorInfo. Habs aber nicht getestet.

Gruss Reinhard

Wäre verdammt nett wenn mir jemand den Code dazu gleich sagen könnte,
steige da leider nicht ganz durch...

Phil125 17. Jun 2009 21:05

Re: Auf Cursorveränderung reagieren
 
keiner ?

Hybrid666 17. Jun 2009 21:14

Re: Auf Cursorveränderung reagieren
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  bla : TCursorInfo;
begin
  bla.cbSize := sizeof (bla);
  GetCursorInfo (bla);
end;
Damit wird die genannte funktion ausgeführt. In bla stehen dann deine Cursor infos...

toms 18. Jun 2009 03:46

Re: Auf Cursorveränderung reagieren
 
Zitat:

Zitat von Phil125
Wäre verdammt nett wenn mir jemand den Code dazu gleich sagen könnte,
steige da leider nicht ganz durch...

Ich hoffe aber, dass du weisst wie die Forumsuche funktioniert?
Hier im Forum suchenGetCursorInfo
oder Bei Google suchenGetCursorInfo Delphi

Phil125 18. Jun 2009 08:46

Re: Auf Cursorveränderung reagieren
 
Zitat:

Zitat von Hybrid666
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  bla : TCursorInfo;
begin
  bla.cbSize := sizeof (bla);
  GetCursorInfo (bla);
end;
Damit wird die genannte funktion ausgeführt. In bla stehen dann deine Cursor infos...

Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
var
  bla : TCursorInfo;
begin
  bla.cbsize := sizeof (bla);
  GetCursorInfo (bla);
if bla.cbsize =crHandpoint then
begin
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Timer2.Enabled:=false;
end;
end;.
Der Klick wird nach wie vor nicht ausgeführt, außer ich ändere es auf crDefault.
Wieso überprüft es nur den eingestellten Cursor und nicht den angezeigten ??

Reinhard Kern 18. Jun 2009 22:21

Re: Auf Cursorveränderung reagieren
 
Zitat:

Zitat von Phil125
Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
var
  bla : TCursorInfo;
begin
  bla.cbsize := sizeof (bla);
  GetCursorInfo (bla);
if bla.cbsize =crHandpoint then

Das ist völliger Unsinn. Du hast dich wohl garnicht erst informiert, wie bla aufgebaut ist? Programmieren besteht nicht einfach aus Aneinanderfügen von kopierten Textbausteinen.

Gruss Reinhard

quendolineDD 18. Jun 2009 22:28

Re: Auf Cursorveränderung reagieren
 
Zumal du immer noch nicht den Teil mit der IF-Abfrage mit begin und end eingeschlossen hast.

Phil125 19. Jun 2009 12:59

Re: Auf Cursorveränderung reagieren
 
Zitat:

Zitat von Reinhard Kern
Zitat:

Zitat von Phil125
Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
var
  bla : TCursorInfo;
begin
  bla.cbsize := sizeof (bla);
  GetCursorInfo (bla);
if bla.cbsize =crHandpoint then

Das ist völliger Unsinn. Du hast dich wohl garnicht erst informiert, wie bla aufgebaut ist? Programmieren besteht nicht einfach aus Aneinanderfügen von kopierten Textbausteinen.

Gruss Reinhard

Ja ich habe keinen Plan aber du kannst mirs ja erklären wenn du willst wäre echt nett ich bruach diesen code bitte.

Reinhard Kern 19. Jun 2009 13:20

Re: Auf Cursorveränderung reagieren
 
Zitat:

Zitat von Phil125
Hallo,

Mein Programm soll wenn der Cursor von crDefault auf crHandpoint wechselt
einen Linkscklick durschführen
...

Hallo,

meines Wissens kann man nicht feststellen, wie der aktuelle Cursor aussieht - man bekommt nur ein Handle zum Cursor, und man könnte höchstens für die bekannten Cursortypen ein Handle anfordern und mit diesem vergleichen, aber ohne Erfolgsgarantie: der Cursor kann genausogut von einem fremden Programm geladen worden sein. Auch bei den Standardhandles bin ich mir nicht sicher, ob verschiedene Programme für den gleichen Cursor auch das gleiche Handle bekommen, ist aber wahrscheinlich.

Da du aber nicht einmal Records kennst, liegt das weit ausserhalb deiner Möglichkeiten.

Im konkreten Fall wird es eh nicht funktionieren, weil:

// Comments from CC Chong:
// "Yes IDC_HAND is the hidden resource of Windows. On Win98 and above (or since
// ActiveDesktop Update in IE4, if I'm not mistaken) Windows has the IDC_HAND
// cursor built in to the system."

// "But it is not the same as Delphi's crHandPoint. Delphi doesn't use Windows'
// IDC_HAND. crHandPoint is Delphi's own inclusion in it's Controls.res (found
// in your Delphi\lib)."

crHandpoint entspricht also NICHT dem IDC_HAND Cursor anderer Software!!!

Gruss Reinhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.

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