Seite 1 von 1
WaitWindowEvent() und WindowCallback
Verfasst: 15.03.2010 15:42
von dysti
Hallo,
normalweise sollte die Abfrage des WindowCallback vor WaitWindowEvent() kommen.
Wenn nun z.B. ein Stringgadget sein Fokus verliert, weil man ein Buttongadget angeklickt hat,
so steht das Ereignis des Stringgadgets vor dem Ereignis des Buttongadgets.
Code: Alles auswählen
SetWindowCallback(@MyWindowCallback())
Event = WaitWindowEvent()
Wie kann man es hinbekommen, das der Buttongadget den Fokus erhält?
Re: WaitWindowEvent() und WindowCallback
Verfasst: 15.03.2010 16:11
von ts-soft
Irgendwie verstehe ich Deine Aussage nicht.
Code: Alles auswählen
OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "", #PB_Window_SystemMenu)
StringGadget(0, 10, 10, 620, 30, "")
EditorGadget(1, 10, 50, 620, 420)
ButtonGadget(2, 10, 450, 620, 30, "")
SetActiveGadget(0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow : Break
Case #PB_Event_Gadget
Select EventGadget()
Case 0
Select EventType()
Case #PB_EventType_LostFocus
Debug "LostFocus"
EndSelect
Case 2
Select EventType()
Case #PB_EventType_LeftClick
Debug "ButtonClick"
EndSelect
EndSelect
EndSelect
ForEver
Wenn ich jetzt den Button clicke kommt erst lost_focus, auch ohne Callback
Und der Button hat anschließend automatisch den focus.
Gruß
Thomas
PS: Dein Beispielcode ist mal wieder ein Witz

naja, die Frage ist genauso unklar.
Re: WaitWindowEvent() und WindowCallback
Verfasst: 15.03.2010 16:18
von Kaeru Gaman
das Setzen des Callbacks muss natürlich vor der Aktualisierung des Events kommen,
weil es vor der Schleife erfolgen muss, in der es präsent sein soll,
die Abfrage des WindowEvents erfolgt hingegen in der Schleife,
weil es ein Schritt ist der wiederholt ausgeführt werden muss.
... klärt das dein Verständnisproblem mit der Reihenfolge?
Re: WaitWindowEvent() und WindowCallback
Verfasst: 15.03.2010 17:17
von dysti
Danke für die schnelle Antwort.
Das Problem tritt ja bei TS-Soft-Code deutlich hervor:
Die Anzeige "Debug ButtonClick erscheint nicht.
Re: WaitWindowEvent() und WindowCallback
Verfasst: 15.03.2010 17:24
von ts-soft
dysti hat geschrieben:Danke für die schnelle Antwort.
Das Problem tritt ja bei TS-Soft-Code deutlich hervor:
Die Anzeige "Debug ButtonClick erscheint nicht.
Ich weiß ja nicht was bei Dir kaputt ist:
Debugger hat geschrieben:LostFocus
ButtonClick
Vielleicht bringst auch was mit Profan durcheinander. Focus <> Buttonclick,
also Focus setzen erzeugt keinen Click.
Re: WaitWindowEvent() und WindowCallback
Verfasst: 15.03.2010 18:33
von Kaeru Gaman
dysti hat geschrieben:Das Problem tritt ja bei TS-Soft-Code deutlich hervor:
Die Anzeige "Debug ButtonClick erscheint nicht.
click doch mal auf den Button, dann erscheint auch die Anzeige "ButtonClick" im Debugger...
Wie kann man es hinbekommen, das der Buttongadget den Fokus erhält?
indem man draufklickt,
indem man mit [Tab] draufgeht (im Falle von ts' Beispiel
rückwärts (shift-Tab),
oder indem man Zeile 5 von ts' Beispiel auf
ändert.
... was das Alles jetzt aber mit nem Callback zu tun hat, bleibt mir schleierhaft...
Re: WaitWindowEvent() und WindowCallback
Verfasst: 15.03.2010 18:36
von ts-soft
Es fehlt immer noch sein Beispiel! Dieses Ratespiel kotzt mich an. Wir sind zwar im Anfängerforum,
aber Dysti klebt ja keine Eierschale mehr an den Ohren.
Re: WaitWindowEvent() und WindowCallback
Verfasst: 15.03.2010 18:45
von Kaeru Gaman
ja bleibens doch kul, nehmens an Keks!

Re: WaitWindowEvent() und WindowCallback
Verfasst: 15.03.2010 18:54
von ts-soft
lecker

Re: WaitWindowEvent() und WindowCallback
Verfasst: 15.03.2010 20:37
von dysti
..OK, bekomme keinen

Bitte um Entschuldigung
Also, ich hatte gedacht, das der Callback mehr Gewicht hat.
Wenn der Button "Schließen" angekickt wird, soll trotz der Abfrage von Lastfocus sich das Fenster schließen.
Ich bekomme es nicht gebacken.
Code: Alles auswählen
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Button_Close
#String_0
#String_1
EndEnumeration
Procedure ueberpruefen()
; Achtung hier Ermittlung der richtigen Zifferanzahl
Protected aFeld, iFeld$, n
If (EventType() = #PB_EventType_LostFocus)
aFeld = EventGadget()
iFeld$ = GetGadgetText(aFeld)
If (Len(iFeld$) > 0) And (Len(iFeld$) < 5)
MessageRequester("Fehler", "Zahl zu klein")
SetActiveGadget(aFeld)
ElseIf (Len(iFeld$) > 7)
MessageRequester("Fehler", "Zahl zu groß")
SetGadgetText(aFeld, "")
SetActiveGadget(aFeld)
EndIf
Else
SetGadgetColor(#string_0, #PB_Gadget_BackColor, -1)
SetGadgetColor(#string_1, #PB_Gadget_BackColor, -1)
EndIf
EndProcedure
Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_COMMAND
Select (wParam&$FFFF)
Case #BUTTON_CLOSE
Debug "BUTTON_CLOSE"
EndSelect
Case #WM_LBUTTONUP
Debug "Hallo Mouse hier bin ich"
EndSelect
Select wParam
Case GadgetID(#BUTTON_CLOSE)
;MessageRequester("Button","Hallo hier bin ich")
EndSelect
ProcedureReturn Result
EndProcedure
If OpenWindow(#Window_0, 248, 16, 600, 150, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_TitleBar )
ButtonGadget(#Button_Close, 450, 50, 100, 50, "Schließen")
StringGadget(#String_0, 40, 50, 160, 60, "22")
StringGadget(#String_1, 240, 50, 160, 60, "")
SetActiveGadget(#String_0)
SetWindowCallback(@MyWindowCallback())
Repeat
Event = WaitWindowEvent()
Select Event
Case #WM_LBUTTONUP
Debug "Maus"
Case #PB_Event_Gadget
Select EventGadget()
Case #String_0
ueberpruefen()
Case #String_1
ueberpruefen()
Case #BUTTON_CLOSE
Quit = #True
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow Or Quit = #True
EndIf
End