Focus



  • Hallo,
    habe eine Form mit einer Frame.
    Frage: wie kann ich feststellen, wenn die Maus die Frame verlassen hat?
    Gruß Siegfried



  • Deine Frage hat aber nichts mit dem Fokus zu tun.
    Schließlich verliert ein Oberflächenobjekt nicht den Fokus, wenn man mir der Maus auf ein anderes zeigt...

    Mußt Du Dir selbst schreiben. Schau Dir mal TScreen und TMouse an.



  • Oder du machst unetr das Frame ein Label das genau 1px hervorschaut.

    Dann vereinbarst du eine Bool Veriable

    bool framemaus;
    

    Dann fügst du folgendes bei der MouseMove Methode vom Frame ein:

    void __fastcall TForm1::Frame21MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y)
    {
    framemaus = true;
    }
    //---------------------------------------------------------------------------
    

    Und folgendes dei der MouseMove Methode des Labels;

    void __fastcall TForm1::Label1MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y)
    {
    framemaus = false;
    }
    //---------------------------------------------------------------------------
    

    MfG kevka



  • Das funktioniert aber nur, wenn Du die Maus im Zeitlupentempo bewegst.



  • Dann muss das Label halt etwas mehr rausstehen.



  • Selbst dann funktioniert das nicht sicher, weil Windows bei mehr als Zeitlupenbewegungen eine Menge Bewegungsdaten der Maus wegfallen läßt.



  • Ich hab schonmal nen Programm mit MouseOverButton so geschrieben und es funktioniert immer nur wenn du grade mal SpeedyGonzales Konkurenz machen wilst flackert es ein bischen.



  • Und was machst Du, wenn man zu einer anderen Anwendung tabt dort irgendetwas macht und wieder zurücktabt. Diese Lösungvariante kannst Du auch mit random gleichsetzen - purer Zufall ob Dein Ereignis eintritt oder nicht.

    Gruss



  • @Rostfrei[]: So weit hatte ich schon gar nicht gedacht, muß an der Hitze liegen...
    Aber davon abgesehen:
    Vielleicht bin ich ja vom Ego-Shooter zocken geschädigt, aber selbst mit einem 50 Pixel breiten Rahmen und - für mich - normaler Geschwindigkeit der Maus, funktioniert das die Hälfte der Zeit nicht.



  • Könnte man hier nicht MouseEnter/MouseLeave nutzen?
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-98829.html



  • Hallo,
    vielen Dank für eure Hilfe und den vielen Links. Habe die Beispiele durchgearbeitet, und eins in abgeänderten Form übernommen. Funktioniert prima.
    Gruß Siegfried 🙂 🙂 🙂 👍 👍 👍



  • unde wie hast du es jetzt gelöst?



  • Hallo,
    also, welche Quelle ich genutzt habe, ???
    in der Form.h

    class TmyFormNewGleisbild : public TForm
    {
    //
    protected: 
      void __fastcall CMMouseEnter(TMessage *Message); 
      void __fastcall CMMouseLeave(TMessage *Message);   
    //...
    public:		// Anwender-Deklarationen
      BEGIN_MESSAGE_MAP 
        MESSAGE_HANDLER(CM_MOUSEENTER, TMessage *, CMMouseEnter); 
        MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage *, CMMouseLeave); 
      END_MESSAGE_MAP(TForm);
    //...
    };
    //---------------------------------------------------------------------------
    

    in der Form.cpp

    void __fastcall TForm1::CMMouseEnter(TMessage* Message) 
    { 
    //
    } 
    //--------------------------------------------------------------------------- 
    void __fastcall TForm1::CMMouseLeave(TMessage* Message) 
    { 
    if (boActivate)
      {   //  boActivate
        if (FrameImageBar1->boImageFocus == true)
          {   //  FrameImageBar1->boImageFocus == true
          FrameImageBar1->DeleteFocusImage();
          FrameImageBar1->boImageFocus = false;
          }   //  FrameImageBar1->boImageFocus == true
        }   //  boActivate
    boActivate = true;
    } 
    //---------------------------------------------------------------------------
    

    in der Frame wird beim überfahren einer Image mit der Maus " boImageFocus " auf true gesetzt. Ist die Maus auserhalb der Frame, wird " TForm1::CMMouseLeave " abgearbeitet. Diese steuert in " FrameImageBar1->DeleteFocusImage(); " die deaktivierung der zuletzt aktiven Image auf der Frame.
    es funktioniert.
    Gruß Siegfried 🙂 🙂 🙂


Anmelden zum Antworten