![]() |
MouseEnter
Hallo
der Funktioniert bei Panel wollte stattdessen Image verwenden, geht es leider nicht !
Delphi-Quellcode:
Warum funktioniert bei Image1 nicht aber bei Panel1 ja ?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; |
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
|
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. |
Re: MouseEnter
Hallo zusammen
der Code von @Flocke
Delphi-Quellcode:
und auch der Code in Demo von Dir @bitsetter funktionieren sehr gut und genau was ich gerne wollte.
if Form1.ControlAtPos(Form1.ScreenToClient(ptWork), False, True) = Image1 then ...
Besten Dank! |
Re: MouseEnter
Ich würde empfehlen das "Form1." in der IF Abfrage noch wegzulassen.
|
Re: MouseEnter
Zitat:
Delphi-Quellcode:
if {Form1.}ControlAtPos(Form1.ScreenToClient(ptWork), False, True) = Image1 then ...
|
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:
Hat jemand eine Idee?
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; |
Re: MouseEnter
hi
Zitat:
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 |
Re: MouseEnter
mouseevents schaft sowas nicht.
Ich habe fast alles erledigt, wieso ändere ich alles! |
Re: MouseEnter
Zitat:
Ich konnts mir einfach nicht verkneifen - Sorry |
Re: MouseEnter
ich filtere alle mouseevents die noch vorhanden sind, die von den einzelnen kontrolls beinhalten meist nicht alle.
in der msdnn sind die restlichen für die mouse beschrieben, die du filtern musst. wie gesagt ist nur ein vorschlag Gruß Konse PS: Dachte du wolltest verhindern dass mit der mouse während des disabled zustandes etwas gemacht wird. |
Re: MouseEnter
Zitat:
Delphi-Quellcode:
Nun kommt der Teil 2 und zwar der Teil "then"
if ControlAtPos(Form1.ScreenToClient(ptWork), False, True) = Image1 then ...
Ich möchte damit den Cursor tot machen ohne ihn ausblenden zu müssen. Den Cursor kann man ausblenden aber der Cursor macht immer was in Hintergrund :mrgreen: Deswegen möchte ich die sleep() verwenden |
Re: MouseEnter
@Blackheart
weiss nicht ob du es gelesen hast, aber es kam noch ein requirement hinzu... @taktaky also wenn du wirklich mit sleep deinen thread für die controlls schlafen legen willst, wie sollen generell die messages von deiner form abgearbeitet werden? meiner meinung nach bleibt dir nichts übrig ausser die mouseevents für diese region zu filtern, bzw die region zu disablen (was auch nur die nachrichtenbehandlung für ein paar messages ausschaltet) Falls du es mit sleep schaffst, sag mir bescheid :D Beste Grüße Konse |
Re: MouseEnter
wie kann mit den mouseevents für diese Region (image1) filtern?
Ich möchte den Cursor nicht ausblenden sondern nur seine Wirkung tot machen. |
Re: MouseEnter
hi, also nochmal
wenn du die funktionalität der maus in dieser region verhindern willst, so musst du meiner meinung nach, buttons+buttonwheel deiner maus deaktivieren. diese messages werden einem windowsfenster zugeordnet. Denke in diesem fall wird die form dein window sein, wo du dein image draufhast. D.h. du filterst deine mousemessages von der form. In dieser filterprozedur überprüfst du ob sich dein cursor innerhalb dieser region befindet, wenn ja dann eliminierst du diese nachricht (oft mit #0, kommt aber darauf an), ansonsten nicht. Damit kannst du mit deiner maus in deiner form alles bedienen, nur die region von deinem bild eben nicht. Hoffe das war etwas verständlicher, ich schreibe meist etwas umständlich ;-) Beste Grüße Konse ps:falls jemandem eine bessere möglichkeit bekannt ist, währe neugierig diese zu erfahren ;-) |
Re: MouseEnter
Du kannst mit
![]() oder Du arbeitest mit TApplicationevents. Speziell dann mit dem Ereignis onMessage. Dort gehen alle Messages an dein Programm durch und du kannst die Mousemessages abfangen, wenn dir danach ist:
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); begin if stopMouseMessages then handled:= ((msg.message>= WM_MouseFirst) and (msg.message<= WM_MouseLast)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz