Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Gegenteil von OnMouseMove? (https://www.delphipraxis.net/139147-gegenteil-von-onmousemove.html)

AlexII 24. Aug 2009 17:39


Gegenteil von OnMouseMove?
 
Hallo,

mit dem Ereignis OnMouseMove lasse ich ein Label sichtbar machen wenn der Mauszeiger über ein bestimmtes Icon fährt. Was ist das Gegenteil von OnMouseMove, welches dann auftritt wenn der Mauszeiger sich über diesen Icon nicht befindet?

Bist jetzt hab ich das so gemacht:

Delphi-Quellcode:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Label1.Visible:=True;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Label1.Visible:=False;
end;
Also wenn der Mauszeiger wieder auf dem Formular war wurde Label wieder versteckt.



Wie mache ich das aber anders, also professionell? Weil mein Weg scheint mich irgendwie unprofessionell zu sein.

Danke!

Matze 24. Aug 2009 17:42

Re: Gegenteil von OnMouseMove?
 
Gibt es bei der Komponente kein Delphi-Referenz durchsuchenOnMouseEnter und Delphi-Referenz durchsuchenOnMouseLeave?

Grüße, Matze

SirThornberry 24. Aug 2009 17:42

Re: Gegenteil von OnMouseMove?
 
Ein Gegenteil von OnMouseMove gibt es nicht. Es wird immer aufgerufen wenn sich die Maus bewegt und hat nichts damit zu tun ob die Maus den Bereich über einer Komponente betritt oder verlässt.
Was für dich interessant sein müsste wären die Ereignisse OnMouseEnter und OnMouseLeave. Wenn diese nicht vorhanden sind kann man diese durch abfangen der entsprechenden Messages auch nachrüsten.

Aphton 24. Aug 2009 17:42

Re: Gegenteil von OnMouseMove?
 
Schau dir mal OnMouseLeave von TLabel an

MfG

mkinzler 24. Aug 2009 17:43

Re: Gegenteil von OnMouseMove?
 
Gibt es nicht. Du könntest aber MouseEnter und MousLeave verwenden

Aphton 24. Aug 2009 17:47

Re: Gegenteil von OnMouseMove?
 
mkinzler - :wiejetzt:

Also in meiner TDE-Version gibts dieses Ereignis 8)

MfG

AlexII 24. Aug 2009 17:47

Re: Gegenteil von OnMouseMove?
 
Zitat:

Zitat von mkinzler
Gibt es nicht. Du könntest aber MouseEnter und MousLeave verwenden

Die habe ich aber nicht. Hab Delphi 7 PE

Lässt sich das Problem vllt irgendwie anders lösen? :gruebel:

AlexII 24. Aug 2009 17:48

Re: Gegenteil von OnMouseMove?
 
Zitat:

Zitat von SirThornberry
Wenn diese nicht vorhanden sind kann man diese durch abfangen der entsprechenden Messages auch nachrüsten.

Und wie geht das?

Helmi 24. Aug 2009 17:50

Re: Gegenteil von OnMouseMove?
 
Und wenn du es einfach so lässt wie du es schon hast?
Was spricht dagegen? - solange es funktioniert...

AlexII 24. Aug 2009 17:51

Re: Gegenteil von OnMouseMove?
 
Zitat:

Zitat von Helmi
Und wenn du es einfach so lässt wie du es schon hast?
Was spricht dagegen? - solange es funktioniert...

Na ja ich dachte vllt gibt es was cleveres. :roteyes:

Matze 24. Aug 2009 17:52

Re: Gegenteil von OnMouseMove?
 
Zitat:

Zitat von AlexII
Und wie geht das?

Schaue mal, ob du fündig wirst: Hier im Forum suchenCM_MOUSELEAVE. Weitere Infos gibt's im MSDN.

Grüße, Matze

Edit: Es heißt "CM_" und nicht "WM_" wie Deddy unter mir korrekt schreibt. Ein Beispiel
Edit 2: Wobei im MSDN steht "WM_". Naja irgendwas + "_MOUSELEAVE" eben. :stupid:

DeddyH 24. Aug 2009 17:54

Re: Gegenteil von OnMouseMove?
 
Leite doch eine Klasse von TImage ab und reagiere darin auf CM_MOUSEENTER und CM_MOUSELEAVE (nur so eine Idee).

AlexII 24. Aug 2009 17:56

Re: Gegenteil von OnMouseMove?
 
Zitat:

Zitat von DeddyH
Leite doch eine Klasse von TImage ab und reagiere darin auf CM_MOUSEENTER und CM_MOUSELEAVE (nur so eine Idee).

Oeehh... :roteyes:

Ich bleibe lieber bei meiner Lösung. :thumb:

mkinzler 24. Aug 2009 17:57

Re: Gegenteil von OnMouseMove?
 
Oder wechsel auf eine neuere Delphiversion

BAMatze 24. Aug 2009 17:59

Re: Gegenteil von OnMouseMove?
 
Schau dir hier mal den ersten Beitrag an, dort findest du die Deklaration für die Messages und wie du sie verwendest. Wenn du diese in Events umwandeln willst, dann schau dir das noch zusätzlich an, da wird eine korrekte Implementierung (etwa im letzten Drittel des Threats) von TheReaper gepostet, zumindest funktioniert das so bei mir jetzt relativ gut.

MfG
BAMatze

AlexII 24. Aug 2009 18:03

Re: Gegenteil von OnMouseMove?
 
Zitat:

Zitat von mkinzler
Oder wechsel auf eine neuere Delphiversion

Sofort nach dem ich im LOTTO gewinne. :-D

AlexII 24. Aug 2009 18:04

Re: Gegenteil von OnMouseMove?
 
Zitat:

Zitat von BAMatze
Schau dir hier mal den ersten Beitrag an, dort findest du die Deklaration für die Messages und wie du sie verwendest. Wenn du diese in Events umwandeln willst, dann schau dir das noch zusätzlich an, da wird eine korrekte Implementierung (etwa im letzten Drittel des Threats) von TheReaper gepostet, zumindest funktioniert das so bei mir jetzt relativ gut.

MfG
BAMatze

Danke!

DeddyH 24. Aug 2009 18:04

Re: Gegenteil von OnMouseMove?
 
Wieso, TDE ist kostenlos und Du darfst als Einzelperson sogar kommerzielle Programme damit schreiben. Das einzige Manko ist, dass Du keine Fremdkomponenten in der IDE installieren kannst, nutzen kannst Du sie per Code aber trotzdem.

AlexII 24. Aug 2009 18:10

Re: Gegenteil von OnMouseMove?
 
Zitat:

Zitat von DeddyH
Wieso, TDE ist kostenlos und Du darfst als Einzelperson sogar kommerzielle Programme damit schreiben. Das einzige Manko ist, dass Du keine Fremdkomponenten in der IDE installieren kannst, nutzen kannst Du sie per Code aber trotzdem.

Genau das brauche ich, also Fremdkomponenten.

BAMatze 24. Aug 2009 18:13

Re: Gegenteil von OnMouseMove?
 
Zitat:

Zitat von AlexII
Genau das brauche ich, also Fremdkomponenten.

Wie DeddyH schon sagte, kannst du die auch in TDE verwenden, nur nicht direkt installieren. Habe es zwar noch nicht so häufig gemacht, aber sollte durch einbinden der Unit in der Usesklausel und danach dynamischer Erstellung genauso funktionieren.

mkinzler 24. Aug 2009 18:14

Re: Gegenteil von OnMouseMove?
 
Diese kannst du, wie erwähnt verwenden, wenn du diese manuell instantiierst. Oder Z.B. Delphi 7 als Formualeditor verwendest ( mit Experte "Components To Code" der GEXperts kannst du dann das Formular in Code wandeln, welchen du in FormCreate einfügen kannst).

AlexII 24. Aug 2009 18:16

Re: Gegenteil von OnMouseMove?
 
Zitat:

Zitat von mkinzler
Diese kannst du, wie erwähnt verwenden, wenn du diese manuell instantiierst. Oder Z.B. Delphi 7 als Formualeditor verwendest ( mit Experte "Components To Code" der GEXperts kannst du dann das Formular in Code wandeln, welchen du in FormCreate einfügen kannst).

Ist viel zu kompliziert :roteyes:

mkinzler 24. Aug 2009 18:18

Re: Gegenteil von OnMouseMove?
 
Warum, dort hast du die ganze VCL ( im Gegensatz zu den PEs) und die neuen Feature der VCL/IDE/Sprache.

Sprint 25. Aug 2009 06:43

Re: Gegenteil von OnMouseMove?
 
Zitat:

Zitat von AlexII
Wie mache ich das aber anders, also professionell? Weil mein Weg scheint mich irgendwie unprofessionell zu sein.

Mit MSDN-Library durchsuchenSetCapture und MSDN-Library durchsuchenReleaseCapture. Dafür benötigst du aber ein Control mit Handle. Und das hat
TImage nun mal ja nicht. Kannst aber das TImage auf ein TPanel packen.

Delphi-Quellcode:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if (X < 0) or (Y < 0) or (X > TPanel(Sender).Width) or (Y > TPanel(Sender).Height) then
  begin
    ReleaseCapture;
    TPanel(Sender).Caption := 'OnMouseLeave';
  end else
  begin
    SetCapture(TPanel(Sender).Handle);
    TPanel(Sender).Caption := 'OnMouseEnter';
  end;
  TPanel(Sender).SetFocus;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 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