Seite 1 von 1
focus auf stringgadget
Verfasst: 22.11.2004 20:59
von Maurizio555
Hallo!
Wie kann ich herrausfinden, ob ein bestimmtes StringGadget gearade das Focus besitzt und vor allem, ob es gerade das Focus verloren hat ?
Verfasst: 22.11.2004 22:10
von wichtel
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
Verfasst: 22.11.2004 22:24
von PBZecke
Im WindowCallback #WM_SETFOCUS abfragen, in wParam steht das handle des Fensters (Stringgaddet) das den Focus verloren hat.
Verfasst: 23.11.2004 10:48
von wichtel
Bei mir kommt da nie ein #WM_SETFOCUS an....
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
Man kann auch in der Eventloop auf SetFocus_() fragen.
Was am besten ist weis ich nicht.
Verfasst: 23.11.2004 20:33
von Maurizio555
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.
Verfasst: 23.11.2004 21:39
von wichtel
setwindowcallback() bleibt bis du dein Programm beendest.
Schau mal unter purearea.net in den Beispielen mit den farbigen gadgets nach. Da kann man gut den Umgang mit dem callback lernen.
Verfasst: 24.11.2004 08:19
von Danilo
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?
Wenn ein eigener Callback gesetzt ist, dann wird dieser aufgerufen.
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.
Maurizio555 hat geschrieben:Wenn es so ist, wie kann man die Behandlung wieder umleiten?
SetWindowCallback(0)