focus auf stringgadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Maurizio555
Beiträge: 53
Registriert: 03.10.2004 10:00
Wohnort: BW

focus auf stringgadget

Beitrag 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 ?
Mit fernem Wasser läßt sich nicht ein nahes Feuer löschen.
Tsue Hung (525 n.Chr.).
Benutzeravatar
wichtel
Beiträge: 150
Registriert: 09.09.2004 08:35
Wohnort: Hattersheim

Beitrag 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
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Im WindowCallback #WM_SETFOCUS abfragen, in wParam steht das handle des Fensters (Stringgaddet) das den Focus verloren hat.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
wichtel
Beiträge: 150
Registriert: 09.09.2004 08:35
Wohnort: Hattersheim

Beitrag 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.
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
Benutzeravatar
Maurizio555
Beiträge: 53
Registriert: 03.10.2004 10:00
Wohnort: BW

Beitrag 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.
Mit fernem Wasser läßt sich nicht ein nahes Feuer löschen.
Tsue Hung (525 n.Chr.).
Benutzeravatar
wichtel
Beiträge: 150
Registriert: 09.09.2004 08:35
Wohnort: Hattersheim

Beitrag 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.
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten