Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi MouseEnter (https://www.delphipraxis.net/101937-mouseenter.html)

taktaky 20. Okt 2007 23:54


MouseEnter
 
Hallo

der Funktioniert bei Panel wollte stattdessen Image verwenden, geht es leider nicht !


Delphi-Quellcode:

  private
  procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;


procedure TForm1.CMMouseEnter(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
//if WindowFromPoint(ptWork) = Image1.handle then // error !!!
  if WindowFromPoint(ptWork) = Panel1.Handle then // ok
  begin
       Showmessage('hello');;
  end;
end;
Warum funktioniert bei Image1 nicht aber bei Panel1 ja ?

Flocke 21. Okt 2007 00:29

Re: MouseEnter
 
Nur Nachfahren von TWinControl besitzen ein eigenes Fensterhandle, ansonsten verwaltet die VCL das Element selbst - TPanel stammt von TWinControl ab, TImage nur von TControl.

Du kannst deinen Code so abwandeln:
Delphi-Quellcode:
if Form1.ControlAtPos(Form1.ScreenToClient(ptWork), False, True, True) = Image1 then

bitsetter 21. Okt 2007 11:42

Re: MouseEnter
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ab Delphi 10 gibt es auch bei einem TImage das Ereignis onMouseEnter, ansonsten könnte man es auch selber machen. Das wäre imho die bessere Variante als es über das onMouseEnter des Formulars zu machen.

taktaky 21. Okt 2007 12:01

Re: MouseEnter
 
Hallo zusammen

der Code von @Flocke
Delphi-Quellcode:
if Form1.ControlAtPos(Form1.ScreenToClient(ptWork), False, True) = Image1 then ...
und auch der Code in Demo von Dir @bitsetter funktionieren sehr gut und genau was ich gerne wollte.

Besten Dank!

Muetze1 21. Okt 2007 12:35

Re: MouseEnter
 
Ich würde empfehlen das "Form1." in der IF Abfrage noch wegzulassen.

taktaky 21. Okt 2007 13:11

Re: MouseEnter
 
Zitat:

Zitat von Muetze1
Ich würde empfehlen das "Form1." in der IF Abfrage noch wegzulassen.

Das stimmt, "Form1" ist nicht nötig und es funktioniert ohne :thumb: :
Delphi-Quellcode:
if {Form1.}ControlAtPos(Form1.ScreenToClient(ptWork), False, True) = Image1 then ...

taktaky 21. Okt 2007 20:40

Re: MouseEnter
 
Nun habe ich ein kleines Problem

ich möchte den Cursor mit sleep() deactivieren solang er drauf bewegt

Ich möchte aber keine Zeit eingeben.

Ist das möglich ?
Delphi-Quellcode:
procedure TForm1.CMMouseEnter(var Message: TMessage);

var
  ptWork : TPoint;

begin
  GetCursorPos(ptWork);
  if ControlAtPos(Form1.ScreenToClient(ptWork), False, True) = Image1 then

  begin

    sleep(); // hier möchte ich keine Zeit eingeben
  end;
end;
Hat jemand eine Idee?

Konse 21. Okt 2007 20:49

Re: MouseEnter
 
hi

Zitat:

Zitat von taktaky
Nun habe ich ein kleines Problem

ich möchte den Cursor mit sleep() deactivieren solang er drauf bewegt

Ich möchte aber keine Zeit eingeben.

Ist das möglich ?
Hat jemand eine Idee?

nein das ist nicht möglich, damit legst du den ganzen thread schlafen.
Wenn der cursor nichts klicken soll musst du die mouseevents abfangen in diesem bereich,
sowas wie onmousemove oder onclick.
Wenn du lieber anstatt den cursor ne eieruhr haben möchtest, dann solltest du dort den cursor wechseln.


Gruß Konse

taktaky 21. Okt 2007 21:19

Re: MouseEnter
 
mouseevents schaft sowas nicht.
Ich habe fast alles erledigt, wieso ändere ich alles!

Blackheart 21. Okt 2007 21:34

Re: MouseEnter
 
Zitat:

Zitat von taktaky
Hallo zusammen

der Code von @Flocke
Delphi-Quellcode:
if Form1.ControlAtPos(Form1.ScreenToClient(ptWork), False, True) = Image1 then ...
und auch der Code in Demo von Dir @bitsetter funktionieren sehr gut und genau was ich gerne wollte.

Besten Dank!

Man beachte den Schluss vom Satz, funktionierender Code ist schon was feines :wink:
Ich konnts mir einfach nicht verkneifen - Sorry


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr.
Seite 1 von 2  1 2      

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