PB6.03, 6.04 - window parameters generate an error

Just starting out? Need help? Post your questions and find answers here.
User avatar
ar-s
Enthusiast
Enthusiast
Posts: 344
Joined: Sat Oct 06, 2007 11:20 pm
Location: France

PB6.03, 6.04 - window parameters generate an error

Post by ar-s »

Hey
When manipulating several windows, I have a memory access bug if I use #PB_Window_MinimizeGadget | #PB_Window_MinimizeGadget as a parameters, whereas if I only use #PB_Window_SystemMenu it works.

Code: Select all

; -----------------------------------
;         - INITIALISATION - 
; -----------------------------------
Enumeration Fenetres
    #Fenetre1
    #Fenetre2
EndEnumeration

Enumeration Gadgets
    #BTouvrirFen1
    #BTouvrirFen2
    #BTfermerFen1
    #BTfermerFen2
EndEnumeration

Declare OuvrirFenetre1()
Declare OuvrirFenetre2()

Global.b Fenetre1Ouverte = #False, Fenetre2Ouverte = #False , exit = 0

; -----------------------------------
;            - PROCEDURES - 
; -----------------------------------

#PARAM = #PB_Window_MinimizeGadget | #PB_Window_MinimizeGadget ; <- BUG
#PARAM2 = #PB_Window_SystemMenu

Procedure OuvrirFenetre1()
    If OpenWindow(#Fenetre1, 300, 10, 300, 600, "Fenetre 1", #PARAM2) ; <- Try #PARAM here instead of #PARAM2
        ButtonGadget(#BTouvrirFen2, 10,10,100,30, "Ouvrir fen2")
        ButtonGadget(#BTfermerFen1, 10,40,100,30, "Fermer moi")
        Fenetre1Ouverte = #True
        Debug "Fen ouverte 1 : " + Fenetre1Ouverte
        ProcedureReturn Fenetre1Ouverte
    EndIf
EndProcedure

Procedure OuvrirFenetre2()
    If OpenWindow(#Fenetre2, WindowX(#Fenetre1)+302, WindowY(#Fenetre1), 300, 600, "Fenetre 2", #PARAM2) ; <- Try #PARAM here instead of #PARAM2
        ButtonGadget(#BTouvrirFen1, 10,10,100,30, "Ouvrir fen1")
        ButtonGadget(#BTfermerFen2, 10,40,100,30, "Ferme moi")
        Fenetre2Ouverte = #True
        Debug "Fen ouverte 2 : " + Fenetre2Ouverte
        If Fenetre1Ouverte = #True
            DisableGadget(#BTouvrirFen1,1)
        EndIf
        ProcedureReturn Fenetre2Ouverte  
    EndIf
EndProcedure


; -----------------------------------
;            - PROGRAMME - 
; -----------------------------------

OuvrirFenetre1()

Repeat
    
    Event = WaitWindowEvent(20) 
    Fenetre = EventWindow()     
    Gadget =  EventGadget()     
    TypeEvent = EventType()     
    
    Select Event
            
        ;Gestion des actions sur les gadgets    
        Case #PB_Event_Gadget
            Select Gadget
                Case #BTouvrirFen1
                    If Fenetre1Ouverte = #False
                        OuvrirFenetre1()
                        DisableGadget(#BTouvrirFen1,1)
                    Else
                        Debug "Fenêtre 1 déjà ouverte"
                    EndIf
                    
                Case #BTouvrirFen2
                    If Fenetre2Ouverte = #False
                        OuvrirFenetre2()
                        DisableGadget(#BTouvrirFen2,1)
                        Else
                        Debug "Fenêtre 2 déjà ouverte"
                    EndIf
                    
                Case #BTfermerFen1
                    Fenetre1Ouverte = #False 
                    CloseWindow(#Fenetre1)
                    Debug "Fen ouverte 1 : " + Fenetre1Ouverte
                    
                    If Fenetre2Ouverte = #False
                        exit = 1
                    Else
                        DisableGadget(#BTouvrirFen1,0)
                    EndIf
                    
                    
                Case #BTfermerFen2
                    Fenetre2Ouverte = #False 
                    CloseWindow(#Fenetre2)
                    Debug "Fen ouverte 2 : " + Fenetre2Ouverte
      
                    If Fenetre1Ouverte = #False
                        exit = 1
                        Else
                        DisableGadget(#BTouvrirFen2,0)
                    EndIf
                    
            EndSelect
            
        ;Gestion des actions si fermeture des fenêtres    
        Case #PB_Event_CloseWindow 
            Select Fenetre
                Case #Fenetre1
                    Fenetre1Ouverte = #False
                    CloseWindow(#Fenetre1)
                    If Fenetre2Ouverte = #False
                        exit = 1    
                    EndIf
                    
                    
                Case #Fenetre2
                    Fenetre2Ouverte = #False
                    CloseWindow(#Fenetre2)
                    If Fenetre1Ouverte = #False
                        exit = 1    
                    EndIf
            EndSelect
            
    EndSelect
Until exit = 1

End

// Moved from "Bugs - Windows" to "Coding Questions" (Kiffi)
~Ar-S~
My Image Hoster for PB users
My webSite (french) with PB apps : LDVMULTIMEDIA
PB - 3.x / 5.7x / 6 - W11 x64 - Ryzen 7 3700x / #Rpi4

Code: Select all

r3p347 : 7ry : un71l d0n3 = 1
User avatar
Mindphazer
Enthusiast
Enthusiast
Posts: 456
Joined: Mon Sep 10, 2012 10:41 am
Location: Savoie

Re: PB6.03, 6.04 - window parameters generate an error

Post by Mindphazer »

Tested on MacOS and Windows (PB 6.03 and 6.04)
No problem...
MacBook Pro 16" M4 Pro - 24 Gb - MacOS 15.4.1 - Iphone 15 Pro Max - iPad at home
...and unfortunately... Windows at work...
User avatar
Caronte3D
Addict
Addict
Posts: 1355
Joined: Fri Jan 22, 2016 5:33 pm
Location: Some Universe

Re: PB6.03, 6.04 - window parameters generate an error

Post by Caronte3D »

What's the sense of the same constant with the "|" (Or) logic? :?
User avatar
ChrisR
Addict
Addict
Posts: 1466
Joined: Sun Jan 08, 2017 10:27 pm
Location: France

Re: PB6.03, 6.04 - window parameters generate an error

Post by ChrisR »

It works well here, without memory access bug. Even if #PB_Window_MinimizeGadget = #PB_Window_MinimizeGadget | #PB_Window_MinimizeGadget :!:
You can possibly avoid the 2 global variables Fenetre1Ouverte and Fenetre2Ouverte by replacing them with If (Not) IsWindow(#Fenetre1(2))
User avatar
ar-s
Enthusiast
Enthusiast
Posts: 344
Joined: Sat Oct 06, 2007 11:20 pm
Location: France

Re: PB6.03, 6.04 - window parameters generate an error

Post by ar-s »

You're right Caronte3D 8)
i removed "param" wich is nonsense.

With that one, i still have random crash when à try "openF2,closeF1, openF1 etc... " after 3 to 10 clics

Code: Select all

; -----------------------------------
;         - INITIALISATION - 
; -----------------------------------

Enumeration Fenetres
    #Fenetre1
    #Fenetre2
EndEnumeration

Enumeration Gadgets
    #BTouvrirFen1
    #BTouvrirFen2
    #BTfermerFen1
    #BTfermerFen2
EndEnumeration

Declare OuvrirFenetre1()
Declare OuvrirFenetre2()

Global.b Fenetre1Ouverte = #False, Fenetre2Ouverte = #False , exit = 0

; -----------------------------------
;            - PROCEDURES - 
; -----------------------------------

Procedure OuvrirFenetre1()
    If OpenWindow(#Fenetre1, 300, 150, 300, 600, "Fenetre 1", #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget) 
        ButtonGadget(#BTouvrirFen2, 10,10,100,30, "Ouvrir fen2")
        ButtonGadget(#BTfermerFen1, 10,40,100,30, "Fermer moi")
        Fenetre1Ouverte = #True
        Debug "Fen ouverte 1 : " + Fenetre1Ouverte
        If Fenetre2Ouverte = #True
             DisableGadget(#BTouvrirFen2,1)
        EndIf
        ProcedureReturn Fenetre1Ouverte
    EndIf
EndProcedure

Procedure OuvrirFenetre2()
    If OpenWindow(#Fenetre2, WindowX(#Fenetre1)+302, WindowY(#Fenetre1), 300, 600, "Fenetre 2", #PB_Window_MaximizeGadget| #PB_Window_MinimizeGadget) 
        ButtonGadget(#BTouvrirFen1, 10,10,100,30, "Ouvrir fen1")
        ButtonGadget(#BTfermerFen2, 10,40,100,30, "Ferme moi")
        Fenetre2Ouverte = #True
        Debug "Fen ouverte 2 : " + Fenetre2Ouverte
        If Fenetre1Ouverte = #True
             DisableGadget(#BTouvrirFen1,1)
        EndIf
        ProcedureReturn Fenetre2Ouverte  
    EndIf
EndProcedure


; -----------------------------------
;            - PROGRAMME - 
; -----------------------------------

OuvrirFenetre1()


Repeat
    
    Event = WaitWindowEvent(20) 
    Fenetre = EventWindow()     
    Gadget =  EventGadget()     
    TypeEvent = EventType()     
    
    Select Event
            
        ;Gestion des actions sur les gadgets    
        Case #PB_Event_Gadget
            Select Gadget
                Case #BTouvrirFen1
                    If Fenetre1Ouverte = #False
                        OuvrirFenetre1()
                        DisableGadget(#BTouvrirFen1,1)
                    Else
                        Debug "Fenêtre 1 déjà ouverte"
                    EndIf
                    
                Case #BTouvrirFen2
                    If Fenetre2Ouverte = #False
                        OuvrirFenetre2()
                        DisableGadget(#BTouvrirFen2,1)
                        Else
                        Debug "Fenêtre 2 déjà ouverte"
                    EndIf
                    
                Case #BTfermerFen1
                    Fenetre1Ouverte = #False 
                    CloseWindow(#Fenetre1)
                    Debug "Fen ouverte 1 : " + Fenetre1Ouverte
                    
                    If Fenetre2Ouverte = #False
                        exit = 1
                    Else
                        DisableGadget(#BTouvrirFen1,0)
                    EndIf
                    
                    
                Case #BTfermerFen2
                    Fenetre2Ouverte = #False 
                    CloseWindow(#Fenetre2)
                    Debug "Fen ouverte 2 : " + Fenetre2Ouverte
      
                    If Fenetre1Ouverte = #False
                        exit = 1
                        Else
                        DisableGadget(#BTouvrirFen2,0)
                    EndIf
                    
            EndSelect
            
        ;Gestion des actions si fermeture des fenêtres    
        Case #PB_Event_CloseWindow 
            Select Fenetre
                Case #Fenetre1
                    Fenetre1Ouverte = #False
                    CloseWindow(#Fenetre1)
                    If Fenetre2Ouverte = #False
                        exit = 1    
                    EndIf
                    
                    
                Case #Fenetre2
                    Fenetre2Ouverte = #False
                    CloseWindow(#Fenetre2)
                    If Fenetre1Ouverte = #False
                        exit = 1    
                    EndIf
            EndSelect
            
    EndSelect
Until exit = 1

End
~Ar-S~
My Image Hoster for PB users
My webSite (french) with PB apps : LDVMULTIMEDIA
PB - 3.x / 5.7x / 6 - W11 x64 - Ryzen 7 3700x / #Rpi4

Code: Select all

r3p347 : 7ry : un71l d0n3 = 1
User avatar
ChrisR
Addict
Addict
Posts: 1466
Joined: Sun Jan 08, 2017 10:27 pm
Location: France

Re: PB6.03, 6.04 - window parameters generate an error

Post by ChrisR »

Still no crash here after more than 50 clicks and looking through the code, it looks good
It's just missing DisableGadget(#BTouvrirFen1(2),0) also for the #PB_Event_CloseWindow event

Code: Select all

        Case #PB_Event_CloseWindow 
            Select Fenetre
                Case #Fenetre1
                    ..........
                    If Fenetre2Ouverte = #False
                      exit = 1
                    Else
                      DisableGadget(#BTouvrirFen1,0)   ; <==
                    EndIf
                Case #Fenetre2
                    ..........
                    If Fenetre1Ouverte = #False
                      exit = 1
                    Else
                      DisableGadget(#BTouvrirFen2,0)   ; <==
                    EndIf
            EndSelect
User avatar
ChrisR
Addict
Addict
Posts: 1466
Joined: Sun Jan 08, 2017 10:27 pm
Location: France

Re: PB6.03, 6.04 - window parameters generate an error

Post by ChrisR »

Tested also with a thread to emulate button clicks, no worries either, no idea why it crashes for you :?:

Code: Select all

Procedure ThreadOuvrirFenetre(*Delay)
  For i = 1 To 50
    PostEvent(#PB_Event_Gadget, #Fenetre1, #BTouvrirFen2, #PB_EventType_LeftClick) : Delay(*Delay)
    PostEvent(#PB_Event_Gadget, #Fenetre1, #BTfermerFen1, #PB_EventType_LeftClick) : Delay(*Delay)
    PostEvent(#PB_Event_Gadget, #Fenetre2, #BTouvrirFen1, #PB_EventType_LeftClick) : Delay(*Delay)
    PostEvent(#PB_Event_Gadget, #Fenetre2, #BTfermerFen2, #PB_EventType_LeftClick) : Delay(*Delay)
  Next
EndProcedure

; -----------------------------------
;            - PROGRAMME - 
; -----------------------------------

OuvrirFenetre1()
CreateThread(@ThreadOuvrirFenetre(), 200)
User avatar
ar-s
Enthusiast
Enthusiast
Posts: 344
Joined: Sat Oct 06, 2007 11:20 pm
Location: France

Re: PB6.03, 6.04 - window parameters generate an error

Post by ar-s »

Hum... that's amazing..
I'll try with a proper install of PB 6.10
~Ar-S~
My Image Hoster for PB users
My webSite (french) with PB apps : LDVMULTIMEDIA
PB - 3.x / 5.7x / 6 - W11 x64 - Ryzen 7 3700x / #Rpi4

Code: Select all

r3p347 : 7ry : un71l d0n3 = 1
Post Reply