Autor Beitrag
Prinzz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mi 21.04.04 15:15 
Hallo,

ich habe versucht eine einfache Leiste im Windows-Startleistenstyle zu bauen, die immer am oberen Bildschirmrand hängt und verschwindet, wenn man mit der Maus weggeht und wieder erscheint, wenn man mit der Maus wieder hingeht.
Ich habe die Idee verdrängt, es mit einem Timer zu prüfen, ob die Maus drüber ist oder nicht, weil mir schon klar ist, dass diese Lösung nicht sehr elegant ist.
Dann habe ich hier im Forum Beiträge zum Thema cm_mouseleave gefunden und hab dann

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  public
    { Public declarations }
    Procedure MouseEnter(Var Msg: TCMMOUSEENTER); message CM_MOUSEENTER;
    Procedure MouseLeave(Var Msg: TCMMOUSELEAVE); message CM_MOUSELEAVE;
  end;


in den Public--Teil des Formulars geschrieben und

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Procedure TForm1.MouseEnter(Var Msg: TCMMOUSEENTER);
Begin
  If ((Msg.Sender) is TForm1) Then
 begin
   //Code
 end;       
end;

Procedure TForm1.MouseLeave(Var Msg: TCMMOUSELEAVE);
Begin
  If ((Msg.Sender) is TForm1) Then
  begin
    //Code
  end;
end;


Mein Problem ist, dass ich die MouseLeave-Nachricht nicht immer empfange, wenn ich mit der Maus vom Formular runter gehe, sondern manchmal nur, wenn ich dann in ein fremdes Fenster klicke, manchmal aber noch nicht einmal das!?

Kann mir irgendjemand weiterhelfen und mir sagen, wie ich das mache, das jedesmal, wenn meine Maus das Formular verlässt eine bestimmte Procedure aufgerufen wird?

Ich brauche dringend eure Hilfe, schon mal danke für Antworten...

Viele Grüße Tobi

Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconTino: Topic aus VCL (Visual Component Library) verschoben am Sa 07.05.2005 um 08:42
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Mi 21.04.04 17:52 
die aktion wird ja auch nur dann ausgelöst wenn du das Tform1 verlässt.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Procedure TForm1.MouseLeave(Var Msg: TCMMOUSELEAVE); 
Begin 
  If ((Msg.Sender) is TForm1) Then 
  begin 
    //Code 
  end
end

ersetze mal tform1 durch die komponente bei der die aktion ausgeführt werden soll

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
Prinzz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mi 21.04.04 22:23 
Naja, es soll ja schon ausgelöst werden, wenn ich das Formular verlasse, selbst wenn ich das Formular leer lasse und nur diese Routinen schreibe wird die Meldung nicht aufgerufen... ist doch irgendwie komisch, oder?
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 22.04.04 13:11 
Die CM_* Messages sind Messages der VCL und funktionieren daher auch nur innerhalb der VCL. Sobald du aber mit der Maus dein Formular verlässt befindest du dich nicht mehr im Gebiet der VCL..!

Was du benötigst sind die Messages Suche in: Delphi-Forum, Delphi-Library WM_MOUSEHOVER und Suche in: Delphi-Forum, Delphi-Library WM_MOUSELEAVE... Wichtig: diese funktionieren nur in Verbindung mit TrackMouseEvent..!

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 22.04.04 16:12 
Prinzz hat folgendes geschrieben:
Hallo,

ich habe versucht eine einfache Leiste im Windows-Startleistenstyle zu bauen, die immer am oberen Bildschirmrand hängt und verschwindet, wenn man mit der Maus weggeht und wieder erscheint, wenn man mit der Maus wieder hingeht.

Kuck mal hier im Forum nach Suche in: Delphi-Forum, Delphi-Library TAPPBAR, das ist, was du suchst.
Prinzz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Do 22.04.04 21:59 
Das mit der Komponente gefällt mir nicht so, will das lieber selber programmieren...
Hab das jetzt auch soweit hinbekommen, das das mit cm_mouseleave und TrachMouseEvent hinhaut, der führt die Procedure jetzt aber jedesmal aus, wenn ich einen von den Panels verlasse auch innerhalb meines Formulars, eigentlich soll er aber nur reagieren, wenn wirklich das Formular verlassen wird.
Außerdem löst er das cm_MouseLeave-Ereignis nicht aus, wenn mein Formular nicht den Focus hat, das sollte er aber schon für das was ich will!? Gibt es da vielleicht noch etwas, was ich bisher noch nicht gefunden habe, was mir da weiterhelfen kann?
Vielen Dank übrigens noch für die bisherigen Antworten...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 22.04.04 22:43 
Trotzdem der falsche Weg. Kuck dich im PSDK oder MSDN mal nach SHAppBarMessage und Konsorten um.