Variable GadgetList und variable Events ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Variable GadgetList und variable Events ?

Beitrag von NicTheQuick »

Aber man kann natürlich jederzeit mit einem einfachen 'ProcedureReturn' vorzeitig aus einer Event-Procedure heraus springen.
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Variable GadgetList und variable Events ?

Beitrag von Vera »

Hi matbal,
super vielen Dank für die 3 Varianten :allright:
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 8)
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Variable GadgetList und variable Events ?

Beitrag 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.
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Variable GadgetList und variable Events ?

Beitrag 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.
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Variable GadgetList und variable Events ?

Beitrag 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".
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Variable GadgetList und variable Events ?

Beitrag 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.
Benutzeravatar
Sicro
Beiträge: 964
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Variable GadgetList und variable Events ?

Beitrag 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
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Variable GadgetList und variable Events ?

Beitrag 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: :freak:
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.
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Variable GadgetList und variable Events ?

Beitrag 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 :wink:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Variable GadgetList und variable Events ?

Beitrag 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.
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Antworten