UnbindGadgetEvent
UnbindGadgetEvent
Hallo! Ich finde die neuen Eventfunktionen mit dem BindGadgetEvent sehr gut und erleichtert das verknüpfen von Events.
In der Hilfe habe ich eines nicht gefunden ob UnbindGadgetEvent erforderlich ist wenn man ein bestimmtes Fenster öffnen und schliessen möchte.
Ich habe eine Fenster Prozedur und verknüpfe ein Event mit BindGadgetEvent. Ich öffne das Fenster und schliesse es danach wieder. Wird die Verknüpfung zur Callback Prozedur automatisch beim schliessen freigegeben oder muss ich selber UnbindGadgetEvent benutzen wenn das Fenster geschlossen wird?
Ich mein wenn nicht automatisch UnbindGadgetEvent ausgeführt wird dann gibt es nach 10x öffnen 10 Callbacks die gleichzeitig laufen oder? Oder wird es bei jeden öffnen ersetzt? Ich weiss leider nicht wie PB das handhabt ob er automatisch unbindet wenn das Fenster geshlossen wird.
Weiss jemand wie man es richtig macht oder ob UnbindGadgetEvent() immer zwingend erforderlich beim schliessen ist?
In der Hilfe habe ich eines nicht gefunden ob UnbindGadgetEvent erforderlich ist wenn man ein bestimmtes Fenster öffnen und schliessen möchte.
Ich habe eine Fenster Prozedur und verknüpfe ein Event mit BindGadgetEvent. Ich öffne das Fenster und schliesse es danach wieder. Wird die Verknüpfung zur Callback Prozedur automatisch beim schliessen freigegeben oder muss ich selber UnbindGadgetEvent benutzen wenn das Fenster geschlossen wird?
Ich mein wenn nicht automatisch UnbindGadgetEvent ausgeführt wird dann gibt es nach 10x öffnen 10 Callbacks die gleichzeitig laufen oder? Oder wird es bei jeden öffnen ersetzt? Ich weiss leider nicht wie PB das handhabt ob er automatisch unbindet wenn das Fenster geshlossen wird.
Weiss jemand wie man es richtig macht oder ob UnbindGadgetEvent() immer zwingend erforderlich beim schliessen ist?
- 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: UnbindGadgetEvent
Ich würde in jedem Falle, beim schliessen des Fensters, auch die Event-Bindung aufheben, abgesehen davon verstehe ich
allerdings nicht, warum ein Fenster mehrmals erstellt werden sollte. HideWindow ist doch wesentlich sinnvoller
allerdings nicht, warum ein Fenster mehrmals erstellt werden sollte. HideWindow ist doch wesentlich sinnvoller

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: UnbindGadgetEvent
@Ameisen23
Du kannst das ganz leicht selber feststellen, ob das Problem tatsächlich auftritt:
Wie es aussieht, tritt das Problem auf und du musst auf jeden Fall UnbindGadgetEvent() verwenden, damit du keine mehrfachen Events bekommst.
Du kannst das ganz leicht selber feststellen, ob das Problem tatsächlich auftritt:
Code: Alles auswählen
EnableExplicit
Define EventID
Define CurrentWindow
Procedure ButtonHandler()
Debug "Klick"
EndProcedure
Procedure Window1()
If OpenWindow(1, 0, 0, 400, 300, "SubWindow", #PB_Window_SystemMenu | #PB_Window_WindowCentered, WindowID(0))
ButtonGadget(2, 10, 10, 100, 20, "Button", 0)
BindGadgetEvent(2, @ButtonHandler())
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(1, 10, 10, 100, 20, "SubWindow", 0)
Repeat
EventID = WaitWindowEvent()
CurrentWindow = EventWindow()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 1
Window1()
EndSelect
EndIf
If EventID = #PB_Event_CloseWindow
If CurrentWindow = 0
End
Else
CloseWindow(CurrentWindow)
Debug "--------------------------------------------------"
EndIf
EndIf
ForEver
EndIf
- 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: UnbindGadgetEvent
Wie es aussieht, tritt das Problem nach einem UnbindEvent immer noch auf, jedenfalls unter Linux 
// edit
sowie unter Win 7

// edit
sowie unter Win 7
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: UnbindGadgetEvent
Dann ist das wohl ein Bug.
Unter Windows gibt es immer nur eine Klick-Debugausgabe, wenn man vor dem Schließen UnbindGadgetEvent() benutzt.
\\Edit:
Bei mir funktioniert es unter Win7.
Vorausgesetzt man schließt das Unterfenster auch vorher.
Unter Windows gibt es immer nur eine Klick-Debugausgabe, wenn man vor dem Schließen UnbindGadgetEvent() benutzt.
\\Edit:
Bei mir funktioniert es unter Win7.

Vorausgesetzt man schließt das Unterfenster auch vorher.
- 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: UnbindGadgetEvent
Naja, wenn man vor dem erstellen des neuen Fensters, auf existenz prüft und unbind ausführt, funktioniert es.
Also kein Bug, aber ein Beweis mehr, besser das Fenster nur verstecken und nicht neu erstellen, was ich sowieso
als Unfug empfinde
Also kein Bug, aber ein Beweis mehr, besser das Fenster nur verstecken und nicht neu erstellen, was ich sowieso
als Unfug empfinde

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: UnbindGadgetEvent
Unter Linux funktioniert es hier auch korrekt.RSBasic hat geschrieben:Bei mir funktioniert es unter Win7.
Ja, wenn man zweimal das Unterfenster öffnet, ohne das vorherige zu schließen, wird zweimal "BindGadgetEvent(2, @ButtonHandler())" aufgerufen und beim späterem Schließem des Unterfensters nur einmal "UnbindGadgetEvent(2, @ButtonHandler())" ausgeführt. Gut zu wissen, dass beim erneutem Binden der vorherige Bind nicht überschrieben wird, sondern zur Event-Liste nochmal hinzugefügt wird.RSBasic hat geschrieben:Vorausgesetzt man schließt das Unterfenster auch vorher.

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
Re: UnbindGadgetEvent
Danke für die schnelle Antworten! Jetzt weiss ich wie das funktioniert und das man das nicht vergessen darf.
@tssoft: Das wäre auch eine Möglichkeit! Wie machst du das genau? Erstellst du alle Fenster schon beim start oder beim ersten aufruf?
Wenn ich zb. 20 Fenster mit vielen Gadgets beim start erstelle dann wird der Start stark verzögert. Aber wenn ich das Fenster beim ersten aufruf erstelle dann muss ich auch auf Existenz prüfen, entweder soll er wenn das Fenster noch nicht erstellt wurde erstellen andernfalls sichtbar machen. Wie machst du das genau?
@tssoft: Das wäre auch eine Möglichkeit! Wie machst du das genau? Erstellst du alle Fenster schon beim start oder beim ersten aufruf?
Wenn ich zb. 20 Fenster mit vielen Gadgets beim start erstelle dann wird der Start stark verzögert. Aber wenn ich das Fenster beim ersten aufruf erstelle dann muss ich auch auf Existenz prüfen, entweder soll er wenn das Fenster noch nicht erstellt wurde erstellen andernfalls sichtbar machen. Wie machst du das genau?
- 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: UnbindGadgetEvent
Je nach Situtation, normallerweise beim Start des Programmes, alle Fenster gleich erstellen, mit dem FlagAmeisen23 hat geschrieben:@tssoft: Das wäre auch eine Möglichkeit! Wie machst du das genau? Erstellst du alle Fenster schon beim start oder beim ersten aufruf?
#PB_Window_Invisible (ein Programm mit 20 Fenstern und vielen Gadgets ist etwas merkwürdig, da liegt dann
eher ein Planungsfehler vor

Dann brauchste nur noch Anzeigen oder Verstecken, je nachdem, was Du benötigst. UnbindEvent wird überflüssig, auf
den Button eines versteckten Fensters drückt keine

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: UnbindGadgetEvent
Danke für deine information! Warum meinst du es läge ein Planungsfehler vor wenn man 20 Fenster hat? Darf man mit Purebasic keine grössere Programmen schreiben?
Und meine Aussage "viele Gadgets" ist eh relativ. Es können auch nur 20 Gadgets pro Fenster sein aber wenn man für sein Program viele Fenster hat die dann alle aufeinmal beim start erstellt werden müssen muss ich dann zusätzlich ein Splashscreen erstellen.
Wenn ich all meine Fenster ein und ausblende dann muss ich zusätzlich alle Gadgets zurücksetzen wenn es Eingabe Sachen sind. Wie zb. Hinzufügen Fenster muss ich alle Eingabefelder leeren usw. Ich empfinde das umständlicher. UnbindEvent wird zwar überflüssig aber dafür Zurücksetzfunks für die Gadgets wenn es Eingabefelder sind. Hmmmm ich weiss nicht... ich lese deine Methode zum ersten Mal und habe kein Windoof Program gefunden das diese Methode mit dem verstecken und anzeigen nutzt. Du fragst dich bestimmt woher ich das weiss. In einen anderen Thread wurde ein Tool für externe Fenster vorgestellt um das Handle eines Fensters herauszufinden und alle Programme die ich getestet habe schliessen seine Fenster wenn man auf X klickt.

Wenn ich all meine Fenster ein und ausblende dann muss ich zusätzlich alle Gadgets zurücksetzen wenn es Eingabe Sachen sind. Wie zb. Hinzufügen Fenster muss ich alle Eingabefelder leeren usw. Ich empfinde das umständlicher. UnbindEvent wird zwar überflüssig aber dafür Zurücksetzfunks für die Gadgets wenn es Eingabefelder sind. Hmmmm ich weiss nicht... ich lese deine Methode zum ersten Mal und habe kein Windoof Program gefunden das diese Methode mit dem verstecken und anzeigen nutzt. Du fragst dich bestimmt woher ich das weiss. In einen anderen Thread wurde ein Tool für externe Fenster vorgestellt um das Handle eines Fensters herauszufinden und alle Programme die ich getestet habe schliessen seine Fenster wenn man auf X klickt.
