Seite 2 von 4
Re: Variable GadgetList und variable Events ?
Verfasst: 13.11.2014 18:19
von NicTheQuick
Aber man kann natürlich jederzeit mit einem einfachen 'ProcedureReturn' vorzeitig aus einer Event-Procedure heraus springen.
Re: Variable GadgetList und variable Events ?
Verfasst: 14.11.2014 18:01
von Vera
Hi matbal,
super vielen Dank für die 3 Varianten
Eine prima Basis diese drei Speichermethoden im Vergleich zu verstehen.
matbal hat geschrieben:mußt du die Nummern der mit PBAny erstellten Buttons irgendwo zwischenspeichern.
Der entscheidende Zwischenschritt auf den ich so schnell nicht gekommen wär.
Hallo Thomas,
das ist wirklich gut zu wissen, das jedwede EventProcedure
(außer bei WIN-Callback) keinen vorzeitigen Abbruch der Procedure erlaubt.
Dann brauche ich auch nicht weiter zu versuchen das auszuknobeln.
Habe auch die Hilfe nochmals gründlich danach durchsucht, jedoch nirgends einen einzigen Hinweis dazu finden können. Vielleicht ist er irgendwo impliziet versteckt.
Ich halte die Augen offen.
NicTheQuick hat geschrieben:Aber man kann natürlich jederzeit mit einem einfachen 'ProcedureReturn' vorzeitig aus einer Event-Procedure heraus springen.
Ja, das hatte ich auch gehofft, aber keine Variation in meinem zweiten Code
(von Kiffi) hat die Procedure abgebrochen und sie also immer komplett durchlaufen.
Dank auch für den zweiten Video-Link
Ich hatte schon erkannt, dass die Playlist angesteuert war, aber YT läuft schon fast ein Jahr nicht mehr bei mir und alle meine Scripts der letzten Jahre, mit denen ich das umgehen konnte, sind zur Zeit noch im Datennirvana meines vor Wochen kaputt gegangenen Rechners. Mit den direkten Links kann ich die Vids behelfsmäßig runterladen.
btw: wer Lust auf ein paar Lacher hat, kann ja mal dieses variable Schätzchen von 2007 durchlesen 
Re: Variable GadgetList und variable Events ?
Verfasst: 14.11.2014 18:41
von matbal
Vera hat geschrieben:Ja, das hatte ich auch gehofft, aber keine Variation in meinem zweiten Code (von Kiffi) hat die Procedure abgebrochen und sie also immer komplett durchlaufen.
Woraus schließt du das?
Schreibe einfach eine Debug-Anweisung vor jedem "Ausgang" der Procedure - das heißt, vor den beiden ProcedureReturns und vor EndProcedure. Die Prozedure erreicht nie das Ende, sondern wird immer vorzeitig verlassen.
Re: Variable GadgetList und variable Events ?
Verfasst: 15.11.2014 02:22
von Vera
matbal hat geschrieben:Schreibe einfach eine Debug-Anweisung vor jedem "Ausgang" der Procedure - das heißt, vor den beiden ProcedureReturns und vor EndProcedure. Die Prozedure erreicht nie das Ende, sondern wird immer vorzeitig verlassen.
Jau - genau das habe ich ja auch schon gemacht, nachdem der erste Versuch mittels:
Code: Alles auswählen
...
If GadgetData = 0 : ProcedureReturn : EndIf
ProcedureReturn GadgetData
EndProcedure
erfolglos war.
... und den Testcode dazu hatte ich
hier oben gepostet.
Re: Variable GadgetList und variable Events ?
Verfasst: 15.11.2014 04:28
von matbal
Welchen Wert soll die Prozedure denn zurückgegeben werden, wenn du keinen Rückgabewert angibst?
Es wird einfach NULL zurückgegeben.
Wo die Procedure verlassen wird, kannst du in der Procedure besser sehen:
Code: Alles auswählen
Procedure ButtonEvent()
Protected EventGadget = EventGadget()
Protected GadgetData = GetGadgetData(EventGadget)
;Debug "Event: Button " + Str(GadgetData)
If GadgetData = 0
Debug "GD = "+ Str(GadgetData) ; obwohl 0 eindeutig erkannt wird, wird die Procedure hier nicht abgebrochen
Debug "A"
ProcedureReturn ; #False
;EndIf ;
ElseIf GadgetData > 0
GadgetDati = GadgetData
Debug "B"
ProcedureReturn GadgetDati
EndIf
Debug "Ende"
EndProcedure
Im Debugger erscheint entweder "A" oder "B", aber nie "Ende".
Re: Variable GadgetList und variable Events ?
Verfasst: 15.11.2014 15:14
von NicTheQuick
Ihr wisst aber schon noch, dass wir gerade über Event-Procedures reden, oder? Da gibt es keine Rückgabewerte. Aber kann sehr wohl die Funktion vorzeitig verlassen.
Re: Variable GadgetList und variable Events ?
Verfasst: 15.11.2014 19:07
von Sicro
NicTheQuick hat geschrieben:Aber kann sehr wohl die Funktion vorzeitig verlassen.
Dem füge ich noch ein Beispiel-Code hinzu, damit es nun für alle klar wird:
Code: Alles auswählen
Procedure ButtonHandler()
Debug "Button click event on gadget #" + EventGadget()
ProcedureReturn
Debug "Das wird nie ausgegeben"
EndProcedure
OpenWindow(0, 100, 100, 200, 50, "Click test", #PB_Window_SystemMenu)
ButtonGadget(0, 10, 10, 180, 30, "Click me")
BindGadgetEvent(0, @ButtonHandler())
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Re: Variable GadgetList und variable Events ?
Verfasst: 15.11.2014 21:05
von Vera
NicTheQuick hat geschrieben:Ihr wisst aber schon noch, dass wir gerade über Event-Procedures reden, oder? Da gibt es keine Rückgabewerte.
Wenn eine Event-Procedure keine Rückgabewerte hat, wieso hoffe ich dann überhaupt darauf, dass eine EventCallback-Anfrage mir ein Ergebnis liefert?
Wieso bekomme ich trotzdem Ergebnisse?
Und woher kommen die her? Wer oder was schickt die wann?
Ich sehe doch an den ganzen Debugs, das egal was ich mache die Anfrage ein Ergebnis erhält. Woher kommt das, wenn nicht aus der Procedure? Und warum kann ich dann darin nicht sagen, welche Ergebnisse ich zurück bekommen möchte und welche nicht?
Wenn doch die Procedure vorzeitig abgebrochen wird, WARUM wird dann, die erst danach folgende Rückgabe ausgeführt?
Es kann doch nicht beides gleichzeitig gültig sein:
es gibt keinen Rückgabewert = die Procedure gibt ein Ergebnis zurück
die Procedure kann teminiert werden = eine danach folgende Rückgabe wird trotzdem ausgeführt
Mein Beispiel oben zeigt das deutlich, der ScrollareaEvent wird unter allen Umständen zurück geliefert, und läßt sich weder abfangen noch ausfiltern.
Ich kann kein Video von einem Live-Debugging drehen, aber ihr müßtet doch via Debugger das Gleiche sehen wie ich.
Re: Variable GadgetList und variable Events ?
Verfasst: 15.11.2014 21:20
von ts-soft
Code: Alles auswählen
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case 1
a = WhatEver()
EndSelect
EndSelect
ForEver
Dies ist ein normaler EventLoop, für andere Varianten gilt es aber genauso.
Hier kann nirgends ein Wert zurückgegeben werden. Zwar gibt WhatEver() was
an a zurück, aber nicht ans EventLoop! Ausserdem gehört WhatEver() auch nicht
unmittelbar zum EventLoop. Der Wert kann also auch nur innerhalb des Case Zweigs
ausgewertet werden, aber ist keine rückgabe des EventLoops.
Ist vielleicht schwer zu erklären, aber garantiert nicht schwer zu verstehen
Gruß
Thomas
Re: Variable GadgetList und variable Events ?
Verfasst: 15.11.2014 21:39
von Vera
Es ist zum Verzweifeln - falls die Anwort an mich gehen soll Thomas.
Hier geht es doch, um die Rückgabe von der Procedure an die Anfrage aus dem EventLoop.
Ebenso ist ja der CASE im meinem Beispiel unbekannt - es geht ja genau darum, diesen via Procedure zu indentifizieren UND auszufiltern.