Announcement

Collapse
No announcement yet.

Feststellen, wann die Maus das eigene Fenster verlässt?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Feststellen, wann die Maus das eigene Fenster verlässt?

    Hallo,

    ich möchte gerne, dass das (einzige) Fenster meiner Anwendung verkleinert wird, wenn die Maus dieses Fenster verlässt. Kann mir da jemand helfen. Im Buch Delphi WIN32-Lösungen von Herrn Kosch (allererste Klasse übrigens!!) habe ich zwar einen Weg über einen Hook gefunden, aber das scheint mir unnötig kompliziert zu sein.

    Vielen Dank im Voraus

    Uli Becker

  • #2
    Hallo Uli,

    Du könntest vielleicht den Mauscapture mit SetCapture auf dein Fenster setzen. Somit kommen alle Mausnachrichten zu deinem Fenster.

    Im MouseMove Event müsstest Du dann aber abfragen, über welchen Fenster die Maus gerade ist (mit GetWindowFromPoint). Ist der Handle den die Funktion zurückgibt gleich deinem Handle, mache nichts, ist er über einem anderen Fenster, also außerhalb Deiner Anwendung, setze den MouseCapture mit ReleaseCapture wieder zurück und schließe oder verkleinere das Fenster.

    Achtung: Wird der Mausfang nicht wieder zurückgesetzt, erhalten alle weiteren Fenster keine Mausnachrichten mehr, bis man das Fenster explizit anklickt.

    Ich hoffe das hilft Dir ein bischen weiter.
    Gruß, Marti

    Comment


    • #3
      Hallo Martin,

      vielen Dank für deine Hilfe; ich werde es morgen gleich ausprobieren. Andreas Kosch hat mir in einer anderen Diskussion auch schon eine Lösung per GetCursorPos und einem Timer angeboten, vielleicht auch für dich interessant.

      Danke nochmals..

      Comment


      • #4
        Hallo Martin,

        ich habe deinen Vorschlag im Buch von Andreas Kosch wiedergefunden: Leider funktioniert es nicht. Zitat aus dem Beispielprojekt:

        { ************************************************** ****************
        Source File Name : mousefrm.PAS
        Autor : Andreas Kosch
        Erstellt am : 28.05.1996
        Compiler : Delphi 3.0
        Betriebssystem : Windows 95
        Bemerkungen : Formular-Unit zu »mousecap.dpr«
        Beschreibung : Demonstriert den SetCapture-Sonderfall
        unter Win32. Ein aktivierter Mausfang
        bleibt nur solange global gültig, wie
        die linke Maustaste gedrückt bleibt.
        Sobald die linke Maustaste außerhalb des
        eigenen Fensters losgelassen wird, setzt
        Windows automatisch den Mausfang zurück.
        Revisionen : 13.04.97 Delphi 3.0
        ************************************************** **************** }

        Gruß Ul

        Comment


        • #5
          Hallo,

          was verbirgt sich hinter "Leider funktioniert es nicht"? Welche Windows-Version wird verwendet

          Comment


          • #6
            Hallo Herr Kosch,

            "Leider funktioniert es nicht" bezog sich auf den Vorschlag, SetCapture zu verwenden, um festzustellen, wann die Maus das eigene Fenster verlässt.
            Wenn ich Sie im Buch nun nicht völlig missverstanden habe, gilt doch:
            "Ein aktivierter Mausfang bleibt nur solange global gültig, wie die linke Maustaste gedrückt bleibt."

            Ich lasse mich aber gerne korrigieren. Ihre an anderer Stelle empfohlene Timer-Lösung funktioniert übrigens gut.

            Danke..

            Comment


            • #7
              Hallo,

              die Einschränkung der ständig gedrückten linken Maustaste gilt nur für den Win32-Weg für SetCapture. Allerdings gibt es da noch die Option, via <b>SetWindowsHookEx</b> auf das "alte" Verhalten von <b>SetCapture</b> zurückzuschalten (siehe das Beispiel unter 15.1.2 auf Seite 592ff). Diese Option steht jedoch nur unter Windows 9x zur Verfügung

              Comment


              • #8
                Hallo,

                Danke für die Meldung, da muss ich gleich meine Applikation überprüfen, da funktioniert's zwar aber vielleicht treten Probleme auf.

                Gruß, Marti

                Comment


                • #9
                  Hallo,

                  heute habe ich erst was neues gelesen. Das konnte auch für euch interessant sein. Borland hat für das verlassen des Fensters und auch für den Eintritt in das Fenster zwei Nachrichten definiert: CM_MOUSELEAVE und CM_MOUSEENTER. Vielleicht hilft euch das weiter...

                  Gruß, Marti

                  Comment


                  • #10
                    Hallo Martin

                    Wo hast Du das gelesen mit den Events CM_MOUSExxx? In Help von D5 finde ich keine Angaben dazu.

                    Gruss Christop
                    Schneider Infosystems AG, Schweiz

                    http://www.schneider-infosys.ch

                    Comment


                    • #11
                      Hallo,

                      hehe ;-) das ist wohl war. Ich habe es auch von einer Newsgroup gelesen und weiß nicht, warum Borland nichtmal einen Funken Text darüber verliert. Wenn Du aber wenigstens die Professional Version von Delphi besitzt, kannst Du in die Datei Controls.pas schauen, dort findest Du die zwei Messages.

                      Gruß, Marti

                      Comment

                      Working...
                      X