BindEvent / BindMenuEvent - Problem

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

BindEvent / BindMenuEvent - Problem

Beitrag von alter Mann »

Wenn man bei folgendem Code die Esc-Taste drückt, wird merkwürdigerweise die Funktion LeftClickEvent() aufgerufen

Code: Alles auswählen

Procedure LeftClickEvent()
  ; tue irgend etwas
  UnbindEvent(#PB_Event_LeftClick,@LeftClickEvent())  
  Debug "Klick"
  Debug Str(EventType())
  Debug Str(EventMenu())
  Debug Str(EventGadget())
  Debug Str(EventData())
  Debug Str(EventWindow())

EndProcedure

Procedure MenuEvent()
  Debug "Menü"
  UnbindEvent(#PB_Event_LeftClick,@LeftClickEvent())  
  UnbindMenuEvent(100,1200,@MenuEvent())
EndProcedure

If OpenWindow(111, 0, 0, 100, 100, "UnbindEvent", #PB_Window_SystemMenu )
  BindEvent(#PB_Event_LeftClick,@LeftClickEvent())
  
  CreatePopupMenu(100)
  AddKeyboardShortcut(111, #PB_Shortcut_Escape     , 1200)
  BindMenuEvent(100,1200,@MenuEvent())

  Repeat
    Event = WaitWindowEvent()
  Until  Event = #PB_Event_CloseWindow

EndIf
[Debugger]
Menü
Klick
0
1200
1200
0
111
weiß jemand, ob das so sein soll?

[heute mal auf WinXP PB5.21LTS(x86)]
Win11 64Bit / PB 6.0
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: BindEvent / BindMenuEvent - Problem

Beitrag von STARGÅTE »

Bei mir stürtzt das Programm ab (ohne Debugger-Fehlermeldung) sobald ich irgendein Event auf dem Window auslöse.

Ich vermute mal es liegt an UnbindEvent das du im Event selbst ausführst.
Damit tötet sich ja der Callback selbst, und löst damit einen Speicherzugrifffehler aus.
---------------------------
UnbindEvent: PureBasic_Compilation0.exe - Fehler in Anwendung
---------------------------
Die Anweisung in 0x01eb3d10 verweist auf Speicher 0x01eb3d10. Der Vorgang written konnte nicht im Speicher durchgeführt werden.


Klicken Sie auf "OK", um das Programm zu beenden.
---------------------------
OK
---------------------------
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
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: BindEvent / BindMenuEvent - Problem

Beitrag von NicTheQuick »

Das ist ein Bug, der mittlerweile schon behoben wurde, und soweit ich weiß sogar schon in PB V5.22.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: BindEvent / BindMenuEvent - Problem

Beitrag von STARGÅTE »

Na scheinbar nicht, denn ich habs hier mit der neusten Beta getestet, und bekomme diesen Absturz.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: BindEvent / BindMenuEvent - Problem

Beitrag von Kiffi »

Das ist aber auch ein gemeiner Fehler!

* Copy & Paste des Codes in ein neues PB-Fenster. Ausführen. ESC drücken -> Absturz (wie von STARGÅTE beschrieben)

* Auskommentieren der Zeile 'Debug "Menü"'. Ausführen. ESC drücken -> Kein Absturz

* Wieder einkommentieren der Zeile 'Debug "Menü"'. Ausführen. ESC drücken -> Kein Absturz

getestet mit PB5.3B6 32bit
a²+b²=mc²
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: BindEvent / BindMenuEvent - Problem

Beitrag von SBond »

Bei mir stürzt es nur ab, wenn ich in das Fenster klicke.
Wenn ich ESC drücke, dann kommt nur das Debugfenster mit dem Text "Menü"


Abstürze bei PB5.30 B6 x64:
PB stürzt mit debugger ab.



PB 5.22 x86:
Debugger fängt den Fehler ab.
In der Prozedur LeftClickEvent() wird die letzte Zeile (EndProcedure) rot markiert.
Console: [ERROR] Ungültiger Speicherzugriff. (Schreibfehler an der Adresse 12)


viele Grüße,
SBond
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

Re: BindEvent / BindMenuEvent - Problem

Beitrag von alter Mann »

Kann das mal bitte jemand im englischen Bugforum melden, ich bin da nur Besucher...

ein etwas aufwändiger Workaround:

Code: Alles auswählen

Procedure LeftClickEvent()
  Debug "Klick"
  Debug Str(EventType())
  Debug Str(EventMenu())
  Debug Str(EventGadget())
  Debug Str(EventData())
  Debug Str(EventWindow())
  PostEvent(#PB_Event_Gadget,111,11)
EndProcedure

Procedure MenuEvent()
  Debug "Menü"
  Debug Str(EventType())
  Debug Str(EventMenu())
  Debug Str(EventGadget())
  Debug Str(EventData())
  Debug Str(EventWindow())
  PostEvent(#PB_Event_Gadget,111,11)
EndProcedure

Procedure FreeEvents()
  UnbindEvent(#PB_Event_LeftClick,@LeftClickEvent())  
  UnbindMenuEvent(100,1200,@MenuEvent())  
  Debug "Free"
EndProcedure

If OpenWindow(111, 0, 0, 100, 100, "UnbindEvent", #PB_Window_SystemMenu )
  BindEvent(#PB_Event_LeftClick,@LeftClickEvent())
  
  CreatePopupMenu(100)
  AddKeyboardShortcut(111, #PB_Shortcut_Escape     , 1200)
  BindMenuEvent(100,1200,@MenuEvent())
  
  TextGadget(11,0,0,0,0,"")
  BindGadgetEvent(11,@FreeEvents())

  Repeat
    Event = WaitWindowEvent()
  Until  Event = #PB_Event_CloseWindow

EndIf
Win11 64Bit / PB 6.0
Antworten