nicht initialisiertes Gadget bei eventgadget() Ereignis
nicht initialisiertes Gadget bei eventgadget() Ereignis
Ich erhalte in der waitwindowevents() Routine eine Fehlermeldung beim eventgadget() Ereignis, dass das betreffende Gadget
nicht initialisiert ist.
Aber wie kann das überhaupt sein?
Wenn ein Gadget nicht initialisiert ist, und damit auch nicht existiert, wie kann dann durch das Gadget ein Event ausgelöst werden?
Oder ist so etwas wie "Ghost-Gadgets" möglich, die nach dem Löschen irgendwo noch rumhängen?
Die Gadget Id gehört zu einem Gadget, das durch freegadget() freigegeben wurde und eindeutig nicht mehr existiert.
Ich weiß mir da keinen Rat mehr.
nicht initialisiert ist.
Aber wie kann das überhaupt sein?
Wenn ein Gadget nicht initialisiert ist, und damit auch nicht existiert, wie kann dann durch das Gadget ein Event ausgelöst werden?
Oder ist so etwas wie "Ghost-Gadgets" möglich, die nach dem Löschen irgendwo noch rumhängen?
Die Gadget Id gehört zu einem Gadget, das durch freegadget() freigegeben wurde und eindeutig nicht mehr existiert.
Ich weiß mir da keinen Rat mehr.
Re: nicht initialisiertes Gadget bei eventgadget() Ereignis
Hier ist eine Möglichkeit wie sowas auftreten kann, zumindest hier auf Linux.
Ins StringGadget klicken gibt Focus-Event. Dann Tab drücken gibt LostFocus-Event und der GadgetText wird ausgegeben.
Wenn man aber FreeGadget einkommentiert und ins StringGadget klickt, dann erhält man trotzdem noch ein LostFocus für das bereits ungültige Gadget.
Ins StringGadget klicken gibt Focus-Event. Dann Tab drücken gibt LostFocus-Event und der GadgetText wird ausgegeben.
Wenn man aber FreeGadget einkommentiert und ins StringGadget klickt, dann erhält man trotzdem noch ein LostFocus für das bereits ungültige Gadget.
Code: Alles auswählen
win = OpenWindow(#PB_Any, 50, 100, 100, 100, "..")
str = StringGadget(#PB_Any, 0, 0, 80, 10, "str")
btn = ButtonGadget(#PB_Any, 0, 50, 80, 10, "btn")
AddKeyboardShortcut(win, #PB_Shortcut_Escape, 10)
Repeat
WaitWindowEvent()
Select Event()
Case #PB_Event_Gadget
Select EventGadget()
Case str
Select EventType()
Case #PB_EventType_Focus
Debug "str event focus"
;FreeGadget(str)
Case #PB_EventType_LostFocus
Debug "str event lostfocus"
Debug IsGadget(str)
Debug GetGadgetText(str)
EndSelect
EndSelect
EndSelect
Until Event() = #PB_Event_CloseWindow Or Event() = #PB_Event_Menu
Re: nicht initialisiertes Gadget bei eventgadget() Ereignis
Was sagt IsGadget() in dem Fall?
Re: nicht initialisiertes Gadget bei eventgadget() Ereignis
IsGadget sagt 0 bei LostFocus des ungültigen Gadgets.
Re: nicht initialisiertes Gadget bei eventgadget() Ereignis
Das geht wohl in genau diese Richtung.
Ich habe es jetzt so gelöst, dass ich am Anfang von waitwindowsevent() abfrage, ob das Eventgadget initialisiert ist oder nicht und verweise, wenn nicht, auf 'ne Sprungmarke am Ende der Eventschleife ..., ich "umgehe" es also einfach.
. Gefällt mir selber nicht, aber so läuft's problemlos.
Gibts vielleicht eine elegante Lösung?
Ich habe es jetzt so gelöst, dass ich am Anfang von waitwindowsevent() abfrage, ob das Eventgadget initialisiert ist oder nicht und verweise, wenn nicht, auf 'ne Sprungmarke am Ende der Eventschleife ..., ich "umgehe" es also einfach.

Gibts vielleicht eine elegante Lösung?
Re: nicht initialisiertes Gadget bei eventgadget() Ereignis
Einfach die Bearbeitung der Gadget-Events in einen Check von IsGadget klammern
Code: Alles auswählen
Select Event()
Case #PB_Event_Gadget
If IsGadget(EventGadget())
Select EventGadget()
Case str
Select EventType()
...
EndSelect
EndIf
EndSelect
Re: nicht initialisiertes Gadget bei eventgadget() Ereignis
oder so, ... das ist galanter als mit Sprungmarke und läuft tadellos.
Es würde mich nur interessieren, was da ursächlich geschieht.
So komme ich mir ein wenig vor wie "was nicht passt - wird passend gemacht" ..

Es würde mich nur interessieren, was da ursächlich geschieht.
So komme ich mir ein wenig vor wie "was nicht passt - wird passend gemacht" ..


- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: nicht initialisiertes Gadget bei eventgadget() Ereignis
Ich würde mal behaupten der Fehler steckt in Deinem Code, das Beispiel von #NULL ist schon sehr speziell (ich würde das sogar als PB Bug einordnen) und ausserdem passiert dieser Effekt unter Windows z.B. nicht!kmais hat geschrieben:Es würde mich nur interessieren, was da ursächlich geschieht.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: nicht initialisiertes Gadget bei eventgadget() Ereignis
folgendes gehört zwar nicht unbedingt zum Thema
aber da von Ghost-Gadgets die Rede war hier ein Beispiel mit Geistern
Man kann durchaus nicht existierende Gadgets und Windows benutzen um Nachrichten auszutauschen.
aber da von Ghost-Gadgets die Rede war hier ein Beispiel mit Geistern
Man kann durchaus nicht existierende Gadgets und Windows benutzen um Nachrichten auszutauschen.
Code: Alles auswählen
win = OpenWindow(#PB_Any, 50, 100, 100, 100, "..")
btn = ButtonGadget(#PB_Any, 10, 50, 80, 25, "btn")
Repeat
event = WaitWindowEvent()
window = EventWindow()
If window = win
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case btn
PostEvent(#PB_Event_Gadget, win, 333, #PB_EventType_KeyDown, 13)
PostEvent(#PB_Event_Gadget, 100, 444, #PB_EventType_KeyDown, 113)
Case 333
Select EventType()
Case #PB_EventType_KeyDown
Debug "das nicht existierende Gadget hat eine Nachricht bekommen " + EventData()
EndSelect
EndSelect
EndSelect
ElseIf window = 100
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case 444
Debug "das nicht existierende Gadget im GeisterWindow hat eine Nachricht bekommen " + EventData()
EndSelect
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer