Hallo!
Wie kann ich herrausfinden, ob ein bestimmtes StringGadget gearade das Focus besitzt und vor allem, ob es gerade das Focus verloren hat ?
focus auf stringgadget
- Maurizio555
- Beiträge: 53
- Registriert: 03.10.2004 10:00
- Wohnort: BW
focus auf stringgadget
Mit fernem Wasser läßt sich nicht ein nahes Feuer löschen.
Tsue Hung (525 n.Chr.).
Tsue Hung (525 n.Chr.).
irgendwie so, aber lostfocus geht nicht, da das gadget da keinen event sendet.
Code: Alles auswählen
OpenWindow(0,0,0,320,240,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"test")
CreateGadgetList(WindowID())
AdvancedGadgetEvents(#True)
StringGadget(1,10,10,200,20,"bla")
StringGadget(2,10,40,200,20,"blub")
ButtonGadget(3,10,70,40,40,"Knopf")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow: End
Case #PB_Event_Gadget
Select EventGadgetID()
Case 1
Select EventType()
Case #PB_EventType_Focus
SetGadgetText(1,"FOKUS!")
Case #PB_EventType_LostFocus
SetGadgetText(1,"lost FOKUS!")
EndSelect
Case 2
Select EventType()
Case #PB_EventType_Focus
SetGadgetText(2,"FOKUS!")
Case #PB_EventType_LostFocus
SetGadgetText(2,"lost FOKUS!")
EndSelect
EndSelect
EndSelect
ForEver
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
Bei mir kommt da nie ein #WM_SETFOCUS an....
EDIT:
Aber so geht es...
Man kann auch in der Eventloop auf SetFocus_() fragen.
Was am besten ist weis ich nicht.
Code: Alles auswählen
OpenWindow(0,0,0,320,240,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"test")
CreateGadgetList(WindowID())
;AdvancedGadgetEvents(#True)
StringGadget(1,10,10,200,20,"bla")
StringGadget(2,10,40,200,20,"blub")
ButtonGadget(3,10,70,40,40,"Knopf")
Debug #WM_SETFOCUS
Procedure myCallback(WindowID, message, wParam, lParam)
GUIResult = #PB_ProcessPureBasicEvents
If IsWindow(0) And WindowID=WindowID(0)
Select message
Case #WM_SETFOCUS
Debug wParam
Debug lParam
EndSelect
EndIf
ProcedureReturn GUIResult
EndProcedure
SetWindowCallback(@myCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow: End
Case #PB_Event_Gadget
Select EventGadgetID()
Case 1
Debug "1"
Case 2
Debug "2"
EndSelect
EndSelect
ForEver
EDIT:
Aber so geht es...
Code: Alles auswählen
OpenWindow(0,0,0,320,240,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"test")
CreateGadgetList(WindowID())
;AdvancedGadgetEvents(#True)
StringGadget(1,10,10,200,20,"bla")
StringGadget(2,10,40,200,20,"blub")
ButtonGadget(3,10,70,40,40,"Knopf")
Procedure myCallback(WindowID, message, wParam, lParam)
GUIResult = #PB_ProcessPureBasicEvents
If IsWindow(0) And WindowID=WindowID(0)
Select message
Case #WM_COMMAND
For i=1 To 3
If GadgetID(i)=lParam
Break
EndIf
Next
Select wParam>>16
Case #EN_SETFOCUS
Debug Str(i)+" got focus"
Case #EN_KILLFOCUS
Debug Str(i)+" lost focus"
EndSelect
EndSelect
EndIf
ProcedureReturn GUIResult
EndProcedure
SetWindowCallback(@myCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow: End
Case #PB_Event_Gadget
Select EventGadgetID()
Case 1
Case 2
EndSelect
EndSelect
ForEver
Was am besten ist weis ich nicht.
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
- Maurizio555
- Beiträge: 53
- Registriert: 03.10.2004 10:00
- Wohnort: BW
Vielen Dank,
ich habe dein Beispiel an menen Fall anpassen können, es funktioniert einwandfrei!
Da habe ich noche eine Frage:
wenn man mit
SetWindowCallback(@myCallback())
die Ereignisbehandlung auf eine eigene Callbackfunktion umleitet, wird nach dem Aufruf der Funktion die Ereignisbehandlung beim nächsten Ereignis automatisch auf die Windowsroutine wieder umgeleitet, oder wird bei jedem Ereignis wieder auf die eigene Funktion verwiesen?
Wenn es so ist, wie kann man die Behandlung wieder umleiten?
Danke.
ich habe dein Beispiel an menen Fall anpassen können, es funktioniert einwandfrei!
Da habe ich noche eine Frage:
wenn man mit
SetWindowCallback(@myCallback())
die Ereignisbehandlung auf eine eigene Callbackfunktion umleitet, wird nach dem Aufruf der Funktion die Ereignisbehandlung beim nächsten Ereignis automatisch auf die Windowsroutine wieder umgeleitet, oder wird bei jedem Ereignis wieder auf die eigene Funktion verwiesen?
Wenn es so ist, wie kann man die Behandlung wieder umleiten?
Danke.
Mit fernem Wasser läßt sich nicht ein nahes Feuer löschen.
Tsue Hung (525 n.Chr.).
Tsue Hung (525 n.Chr.).
Wenn ein eigener Callback gesetzt ist, dann wird dieser aufgerufen.Maurizio555 hat geschrieben:wenn man mit SetWindowCallback(@myCallback()) die Ereignisbehandlung
auf eine eigene Callbackfunktion umleitet, wird nach dem Aufruf der Funktion
die Ereignisbehandlung beim nächsten Ereignis automatisch auf die Windowsroutine
wieder umgeleitet, oder wird bei jedem Ereignis wieder auf die eigene Funktion verwiesen?
Gibst Du die entsprechende Konstante (siehe Hilfe) zurück, dann wird
danach noch der PB-Interne Event-Handler abgearbeitet.
Gibst Du etwas anderes zurück, wird dieser Wert direkt ans
OS zurückgegeben.
SetWindowCallback(0)Maurizio555 hat geschrieben:Wenn es so ist, wie kann man die Behandlung wieder umleiten?
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck