Seite 1 von 2

[gelöst] AddGadgetItem funktioniert nicht ab PB 6.03 unter Debian 12

Verfasst: 05.08.2024 23:15
von Borstensohn
Mit AddGadgetItem eine Zeile in einem EditorGadget hinzuzufügen, klappt seit PureBasic 6.03 64-bit unter Debian 12 Bookworm nicht mehr, unter Ubuntu möglicherweise auch nicht. Genauer gesagt, geht es zwar innerhalb Procedure Open_Main_Window(), aber nicht, wenn man das per ButtonGadget bewerkstelligen will. Das Programm bleibt einfach hängen.
Noch verrückter ist es, dass es dann klappt, wenn man zusätzlich einen MessageRequester einsetzt. Nur kann das ja nicht die Lösung sein. Bis PureBasic 6.02 läuft derselbe Code einwandfrei.

Unter Windows 10 übrigens wird die gewünschte Zeile zwar eingefügt – allerdings gleich drei Mal, manchmal vier Mal. In einem sehr abgespeckten Programm kann man das testen:

Code: Alles auswählen

EnableExplicit

;================
;– Programmbeginn
;================

Enumeration
	#Window_Haupt
	#btnText
	#edtAusgabe
	#cntContainer
EndEnumeration

;– Definitions
Global EventID

;– Declarations of procedures
Declare Open_Main_Window()

;– Constants
#version = "0.1"

Procedure Open_Main_Window()
	If OpenWindow(#Window_Haupt, #PB_Ignore, #PB_Ignore, 480, 540, "AGI " + #version, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
		;– Create GadgetList
		ContainerGadget(#cntContainer, 0, 0, 480, 515, #PB_Container_Raised)
		ButtonGadget(#btnText, 10,  470, 95, 20, "Text hinzufügen")
		EditorGadget(#edtAusgabe, 10, 165, 458, 295, #PB_Editor_WordWrap)
		CloseGadgetList()
			
		AddGadgetItem(#edtAusgabe, -1, "PureBasic soll sehr gut sein, habe ich mir sagen lassen.")
	EndIf ;OpenWindow
EndProcedure
			

;===========
;- Hauptteil
;===========

Open_Main_Window()

Repeat
	;– Ereignisse
	EventID = WindowEvent()
		
	;– Fenster
	If EventID = #PB_Event_CloseWindow
		If WindowID(#Window_Haupt)
			CloseWindow(#Window_Haupt)
			End
		EndIf
	Else
		Delay(1) ;Verhindert unnötige CPU-Auslastung
	EndIf
	
	If EventGadget() = #btnText
		AddGadgetItem(#edtAusgabe, -1, "PureBasic ist sehr gut, wie ich aus eigener Erfahrung weiß.")
		
; 		If AddGadgetItem(#edtAusgabe, -1, "PureBasic ist sehr gut, wie ich aus eigener Erfahrung weiß.")
; 			MessageRequester("Information", "Das hat geklappt!", #PB_MessageRequester_Info)
; 		Else
; 			MessageRequester("Information", "Das war nichts!", #PB_MessageRequester_Info)
; 		EndIf
	EndIf
Until EventID = #PB_Event_CloseWindow


;==============
;- Programmende
;==============

End
Ist jemand anderem dieses Verhalten auch schon mal aufgefallen? Und gibt es irgendeine Erklärung dafür?

Re: AddGadgetItem funktioniert nicht ab PB 6.03 unter Debian 12

Verfasst: 06.08.2024 00:38
von Macros
Interessant, mir war nie die Idee gekommen AddGadgetItem mit dem Editorgadget zu nutzen. Aber tatsächlich, es steht so in der Hilfe.
Somit tatsächlich ein Bug.

Ich kann unter Kubuntu 24.04 bestätigen. Auch die Sache mit dem Messagerequester. Verwendet man das qt Subsystem funktioniert übrigens alles einwandfrei.

Edit: Doch kein Bug, siehe nächster Beitrag.

Re: AddGadgetItem funktioniert nicht ab PB 6.03 unter Debian 12

Verfasst: 06.08.2024 01:14
von mk-soft
Kein Bug ...
Funktioniert

Die Event abfrage war falsch. EventGadget ist nur gültig nach einem Event #PB_Event_Gadget

Code: Alles auswählen

EnableExplicit

;================
;– Programmbeginn
;================

Enumeration
  #Window_Haupt
  #btnText
  #edtAusgabe
  #cntContainer
EndEnumeration

;– Declarations of procedures
Declare Open_Main_Window()

;– Constants
#version = "0.1"

Procedure Open_Main_Window()
  If OpenWindow(#Window_Haupt, #PB_Ignore, #PB_Ignore, 480, 540, "AGI " + #version, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
    ;– Create GadgetList
    ContainerGadget(#cntContainer, 0, 0, 480, 515, #PB_Container_Raised)
    ButtonGadget(#btnText, 10,  470, 95, 25, "Text hinzufügen")
    EditorGadget(#edtAusgabe, 10, 10, 460, 450, #PB_Editor_WordWrap)
    CloseGadgetList()
    
    AddGadgetItem(#edtAusgabe, -1, "PureBasic soll sehr gut sein, habe ich mir sagen lassen.")
  EndIf ;OpenWindow
EndProcedure


;===========
;- Hauptteil
;===========

Open_Main_Window()

Repeat
  ;– Ereignisse
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_Haupt
          Break
      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #btnText
          AddGadgetItem(#edtAusgabe, -1, "PureBasic ist sehr gut, wie ich aus eigener Erfahrung weiß.")
      EndSelect
      
  EndSelect
  
ForEver

;==============
;- Programmende
;==============

End

Re: AddGadgetItem funktioniert nicht ab PB 6.03 unter Debian 12

Verfasst: 06.08.2024 01:33
von Macros
Äh ja,da hast du natürlich vollkommen recht. Hätte mir auch auffallen sollen.

Ich rede mich mal mit dem 1 Monat alten kleinen Strampler neben mir raus der fleißig Schlaf klaut ;)

Re: AddGadgetItem funktioniert nicht ab PB 6.03 unter Debian 12

Verfasst: 06.08.2024 11:49
von mk-soft
@Borstensohn

Um mal schnell etwas zu testen oder machen habe ich diverse Templates angelegt.

Code: Alles auswählen

;-TOP

#ProgramTitle = "Main Window"
#ProgramVersion = "v1.01.2"

Enumeration Windows
  #Main
EndEnumeration

Enumeration MenuBar
  #MainMenu
EndEnumeration

Enumeration MenuItems
  #MainMenuAbout
  #MainMenuExit
EndEnumeration

Enumeration Gadgets
  #MainEdit
  #MainButtonOk
  #MainButtonCancel
EndEnumeration

Enumeration StatusBar
  #MainStatusBar
EndEnumeration

Procedure UpdateWindow()
  Protected dx, dy
  dx = WindowWidth(#Main)
  dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
  ; Resize gadgets
  ResizeGadget(#MainEdit, 5, 5, dx - 10, dy - 45)
  ResizeGadget(#MainButtonok, 10, dy - 35, 120, 30)
  ResizeGadget(#MainButtonCancel, dx - 130, dy - 35, 120, 30)
EndProcedure

Procedure Main()
  Protected dx, dy
  
  #MainStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, #ProgramTitle , #MainStyle)
    ; Menu
    CreateMenu(#MainMenu, WindowID(#Main))
    MenuTitle("&File")
    CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
      MenuItem(#PB_Menu_About, "")
    CompilerElse
      MenuItem(#MainMenuAbout, "About")
    CompilerEndIf
    ; Menu File Items
    
    CompilerIf Not #PB_Compiler_OS = #PB_OS_MacOS
      MenuBar()
      MenuItem(#MainMenuExit, "E&xit")
    CompilerEndIf
    
    ; StatusBar
    CreateStatusBar(#MainStatusBar, WindowID(#Main))
    AddStatusBarField(#PB_Ignore)
    
    ; Gadgets
    dx = WindowWidth(#Main)
    dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
    EditorGadget(#MainEdit, 5, 5, dx -10, dy - 45)
    ButtonGadget(#MainButtonok, 10, dy - 35, 120, 30, "Ok")
    ButtonGadget(#MainButtonCancel, dx - 130, dy - 35, 120, 30, "Abbruch")
    
    ; Bind Events
    BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), #Main)
    
    ; Event Loop
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Select EventWindow()
            Case #Main
              Break
              
          EndSelect
          
        Case #PB_Event_Menu
          Select EventMenu()
            CompilerIf #PB_Compiler_OS = #PB_OS_MacOS   
              Case #PB_Menu_About
                PostEvent(#PB_Event_Menu, #Main, #MainMenuAbout)
                
              Case #PB_Menu_Preferences
                
              Case #PB_Menu_Quit
                PostEvent(#PB_Event_CloseWindow, #Main, #Null)
                
            CompilerEndIf
            
          Case #MainMenuAbout
            MessageRequester("About", #ProgramTitle + #LF$ + #ProgramVersion, #PB_MessageRequester_Info)
              
          Case #MainMenuExit
            PostEvent(#PB_Event_CloseWindow, #Main, #Null)
            
          EndSelect
          
        Case #PB_Event_Gadget
          Select EventGadget()
            Case #MainEdit
              Select EventType()
                Case #PB_EventType_Change
                  ;
                  
              EndSelect
              
            Case #MainButtonOk
              ;
            Case #MainButtonCancel
              ;
              
          EndSelect
          
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()

Re: AddGadgetItem funktioniert nicht ab PB 6.03 unter Debian 12

Verfasst: 06.08.2024 19:07
von Borstensohn
mk-soft hat geschrieben: 06.08.2024 01:14 Kein Bug ...
Funktioniert

Die Event abfrage war falsch. EventGadget ist nur gültig nach einem Event #PB_Event_Gadget
Ja, dein Code funktioniert, vielen Dank! :D
Puh, klingt eigentlich logisch, aber da wäre ich von allein wohl nicht drauf gekommen, da mit den alten PB-6er-Versionen ja alles funktionierte.

Ich habe das statt mit Select allerdings mit If umgesetzt:

Code: Alles auswählen

Repeat
	EventID = WindowEvent()
		
	If EventID = #PB_Event_CloseWindow
		If WindowID(#Window_Haupt)
			CloseWindow(#Window_Haupt)
			End
		EndIf
	Else
		Delay(1) ;Verhindert unnötige CPU-Auslastung
	EndIf
	
	If EventID = #PB_Event_Gadget
    		If EventGadget() = #btnText
    			AddGadgetItem(#edtAusgabe, -1, "PureBasic ist sehr gut, wie ich aus eigener Erfahrung weiß.")
    		EndIf
	EndIf
  
Until EventID = #PB_Event_CloseWindow
Danke an alle, die sich für mein Problem interessiert haben! <)

Re: AddGadgetItem funktioniert nicht ab PB 6.03 unter Debian 12

Verfasst: 06.08.2024 19:12
von Borstensohn
Kann ich die Frage eigentlich als gelöst markieren und den Thread in eine passendere Kategorie verschieben, da es ja nun mal kein Bug ist? Ich finde das alles nicht, vielleicht kann es ja auch nur ein Admin machen.

Re: AddGadgetItem funktioniert nicht ab PB 6.03 unter Debian 12

Verfasst: 06.08.2024 22:37
von HeX0R
Die Bugs hier im deutschen Forum sind eh keine offizielle Bugmeldung, von daher mach Dir keinen Kopf.
Wenn's Dir ein persönliches Anliegen ist, kannst Du dem Thread-Titel ja ein [gelöst] vorne dran stellen (ersten Beitrag editieren und den Titel verändern).
Wenn hier echte Bugs auftauchen, stellt das i.d.R. jemand ins offizielle englische Bug-Forum.

Re: AddGadgetItem funktioniert nicht ab PB 6.03 unter Debian 12

Verfasst: 06.08.2024 22:45
von Borstensohn
HeX0R hat geschrieben: 06.08.2024 22:37 Die Bugs hier im deutschen Forum sind eh keine offizielle Bugmeldung, von daher mach Dir keinen Kopf.
Wenn's Dir ein persönliches Anliegen ist, kannst Du dem Thread-Titel ja ein [gelöst] vorne dran stellen (ersten Beitrag editieren und den Titel verändern).
Wenn hier echte Bugs auftauchen, stellt das i.d.R. jemand ins offizielle englische Bug-Forum.
Ah, alles klar. Ich habe jetzt [gelöst] vor den Titel gesetzt. Danke für den Tipp!

Re: [gelöst] AddGadgetItem funktioniert nicht ab PB 6.03 unter Debian 12

Verfasst: 06.08.2024 22:48
von HeX0R
[OT]
Ich finde es ja interessant, dass Du fast so lange dabei bist wie ich, und es auf gerade mal 9 Beiträge gebracht hast.
Was war denn da los, etwa 20 Jahre im Koma gelegen?
Falls ja, welcome back!
Die Fernseher können jetzt sogar Farben! :mrgreen:
[/OT]