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
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.

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!

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