Seite 1 von 1

Fensterfocus bei Mouseover

Verfasst: 24.11.2004 19:33
von Lukaso
Hallo,

ich bräuchte Hilfe, ich möchte, dass wenn ich auf ein Fenster mit der Maus fahr, dass nicht Aktiviert ist, dieses dann fokusiert wird. Wenn die Maus wieder aus dem Fenster herausfährt (OnMouseOut), dass alte Fenster wieder seinen Fokus zurückbekommt!

Danke für Hilfe, Tips, Codeschnippsel :allright:

MFG Lukaso

Verfasst: 24.11.2004 20:25
von NicTheQuick
Den ersten Teil deiner Frage kann ich direkt beantworten mit folgendem Code.

Code: Alles auswählen

Procedure IsMouseOverGadget(Gadget) ; Gibt #True zurück, wenn die Maus über dem Gadget ist
  Protected Mouse.POINT, GadgetRect.RECT
  GetWindowRect_(GadgetID(Gadget), GadgetRect)
  GetCursorPos_(Mouse.POINT)
  If Mouse\x >= GadgetRect\left And Mouse\x <= GadgetRect\right And Mouse\y >= GadgetRect\top And Mouse\y <= GadgetRect\bottom
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure
Mit dieser Funktion kannst ja dann den Rest alleine machen. :wink:

Verfasst: 24.11.2004 20:56
von pLuSmaN

Code: Alles auswählen

hWnd = OpenWindow (0, 0, 0, 100, 100, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Test")

Repeat
  EventID = WaitWindowEvent ()

  Select EventID
    Case #WM_MOUSEMOVE ; Die Maus hat sich bewegt, Fenster MUSS keinen Focus haben
      Debug "Maus bewegt sich über das Fenster"
      ; If fCapture <> #True
      ;   AltesFenster = GetFocus_ ()
      ;   SetCapture_ (hWnd)
      ;   fCapture = #True
      ; Else
      ;   If IsMouseOverGadget (hWnd) <> #True
      ;     SetFocus_ (AltesFenster)
      ;     fCapture = #False
      ;     ReleaseCapture_ ()
      ;   EndIf
      ; EndIf
  EndSelect
Until EventID = #PB_Event_CloseWindow

End
Sobald die Maus über das Fenster fährt wird eine Nachricht des Typs #WM_MOUSEMOVE gesendet. Auch wenn das Fenster keinen Focus hat.
In dem Abschnitt kannst du also den Focus auf dein Fenster setzen.
Habe leider schon lange kein PB mehr gemacht, kann man daher auch vllt. anders effizienter lösen, aber es sollte auf jeden Fall funktionieren.

Der auskommentierte Teil wurde grade hier zusammen geklatscht und kann daher Fehler aufweisen. Ich regel dort nur, dass wenn die Maus nicht mehr im Fenster ist, das Alte wieder den Focus bekommt.

Ist evtl. etwas schlampig programmiert, aber man sollte doch grob erkennen, wie es läuft.

MfG pLuSmaN

Verfasst: 24.11.2004 22:45
von Lukaso
Hallo,

Danke für eure Hilfe! :allright:
Habe es jetzt hinbekommen, aber ich habe jetzt nen neues Problem:

Wenn ich beim Aktivierten Window, jetzt einen FileRequester auf mache, wird diese Minimiert ...

Hier nen Sourceschnippsel:

Code: Alles auswählen

      If fCapture = #False And MouseOverWindow(#Player_Window) = #True
        oldWindow = GetForegroundWindow_()
        ForceFore(WindowID(#Player_Window))
        fCapture = #True
      ElseIf fCapture = #True And MouseOverWindow(#Player_Window) = #False
        ForceFore(oldWindow)
        fCapture = #False
      EndIf
MFG Lukaso