ouverture et comment fermer une fenetre...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

ouverture et comment fermer une fenetre...

Message par YvesRossignol »

Bonjour, je ne comprend pas comment fermer ma fenetre, j'ai essayer de toute sorte de façon mais j'ai toujours une erreur.

Merci de votre aide..

Yves :?

mon programme avance à pas de tortue vous avez seulement la partie pour le preview d'impression

J'UTILISE LA LIBRAIRIE printer_lib.pb

Code : Tout sélectionner

;-----------------------
#PrinterLib_Include=1
XIncludeFile "Printer_Lib.pb"



UseJPEGImageDecoder()
Print_SetUnits(#PRINT_inches)

OPT$="Orientation=" + Str(#DMORIENT_PORTRAIT) + ","
OPT$+"Papersize="   + Str(#DMPAPER_LETTER)

Define imagenr,Jobname$,err$

; imagenr  = LoadImage(#PB_Any,"W.jpg")
; imagenr1 = LoadImage(#PB_Any,"image1p.jpg") 
; ---------------
Global Max.l
Global idx.l
Global Zoom.l, lw.d, text1$, Text$, ajout.d, unites$, valeur$, pre$, d.d, b.d
Global cible.i, bb$, Electrod.d, Method$, Sunit$, lg = 14
Global distC.d, c1.d, c2.d, cb.d, ct.d, cc.d, cr.d, ix.d, sx.d, j.d, fluxx.d, fluxy.d, fluxz.d, fluxt.d, wrequis.d, advice$ ,iy.d, sy.d, sxt.d, sxb.d, syl.d, syr.d,ny.d, nx.d
Global Fx.d, Fy.d, Fz.d, Mx.d, My.d, Mz.d, xa.i, ya.i


d = 12.12345
b = 34.43224
Electrod = 480.123 
Method$ = "welds treated as line"
Sunit$ = "US"
lg = 14
distC = 56.3457
c1 = 257.332
c2 = 357.246
cb = 26585.3434
ct = 123.678
cc = 1278.345
cr =2345.56
ix = 32453.34
sx = 137.44
j = 1286.55
fluxx = 324.43
fluxy = 1256.34
fluxz = 344.323
fluxt = 345.234
wrequis = 4.56
advice$ = "aucun"
iy = 974.256
sy = 345.456
sxt = 8954.233
sxb = 3478.34
syl = 126.34
syr = 234.64
ny = 34.67
nx = 238.45
Fx = 100.234
Fy = 200.456
Fz = 300.345
Mx = 400.567
My = 500.567
Mz = 600.890

;- Global Variables and Constants
Global BubbleTipStyle=0
Define EventID,MenuID,GadgetID,WindowID

;- Window Constants
Enumeration 1
  #Window_test
  #Window_choix
EndEnumeration
#WindowIndex=#PB_Compiler_EnumerationValue


;- Gadget Constants
Enumeration 1
  ;Window_test
  #Gadget_test_Imprime


  ;Window_choix
  #Gadget_choix_sendtopreview
  #Gadget_choix_sendtoprint


EndEnumeration
#GadgetIndex=#PB_Compiler_EnumerationValue

Procedure.i Window_test()
  If OpenWindow(#Window_test,480,213,400,300,"imprimatur",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
      ButtonGadget(#Gadget_test_Imprime,150,70,120,20,"choix")
      HideWindow(#Window_test,0)
    ProcedureReturn WindowID(#Window_test)
  EndIf
EndProcedure

Procedure.i Window_choix()
  If OpenWindow(#Window_choix,553,196,400,300,"Select option",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
      ButtonGadget(#Gadget_choix_sendtopreview,140,65,120,20,"Preview")
      ButtonGadget(#Gadget_choix_sendtoprint,140,145,120,20,"Send to printer")
      HideWindow(#Window_choix,0)
    ProcedureReturn WindowID(#Window_choix)
  EndIf
EndProcedure

;-----------------------------------------
Procedure Showimage()
  Protected img
  img=Print_GetPreviewImage(idx)
  If img
    SetGadgetState(1,ImageID(img))
  EndIf
EndProcedure

Procedure Print_Preview(Preview)
  Protected pw,xa,ya,Text$,textw,texta,textd,texth
  Print_OpenPrinter("","PAPERSIZE="+Str(#DMPAPER_LETTER)+",ORIENTATION="+Str(#DMORIENT_PORTRAIT))
  
  If Preview=#True
    pw=(450*Zoom)/100
    Print_StartPreview(pw)
    xa=Print_GetDeviceCaps(#HORZRES)+20
    ya=Print_GetDeviceCaps(#VERTRES)+20
    SetGadgetAttribute(0,#PB_ScrollArea_InnerWidth,xa)
    SetGadgetAttribute(0,#PB_ScrollArea_InnerHeight,ya)
  Else
    Print_StartPrinting("TEST")
  EndIf
  
  ; Start preview
    Print_SetTextColor(#Black)
    Print_Font("Arial",48)
    textw=Print_TextWidth(text$)
    texta=Print_GetTextMetrics(#TM_ASCENT)
    textd=Print_GetTextMetrics(#TM_DESCENT)
    texth=Print_GetTextMetrics(#TM_HEIGHT)
    
    ;-------------------
    
 ;   Print_SetTextColor(#Blue)
    Print_Font("Arial",48,#PB_Font_Bold )
    Text$="Weld Design"                      ; c'est ici que ca se passe
    Print_Text(32,10,Text$)
    Print_Font("Arial",18)
    Text$="Registred version of : "
    Print_Text(21,20,Text$)
    Print_Font("Arial",18,#PB_Font_Underline)
    Text$ = "UNREGISTRED VERSION"
    Print_Text(50,20,text$)
    Print_Font("Arial",18)
    
    Text$ = "Data Section, geometry, loads and material"
    Print_Text(35,28,text$)
    Print_Font("Arial",12)
    

    unites$ = "   mm"
    pre$ = "  d       = "
    valeur$ = StrD(d,6)
    bb$ = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,33,text$)

    unites$ = "   mm"
    pre$ = "  b       = "
    valeur$ = StrD(b,6)
    bb$ = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,35,text$)
    
    unites$ = "   N"
    pre$ = "  Fx      = "
    valeur$ = StrD(Fx,6)
    bb$ = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,41,text$)

    unites$ = "   N"
    pre$ = "  Fy      = "
    valeur$ = StrD(Fy,6)
    bb$ = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,43,text$)
    
    unites$ = "   N"
    pre$ = "  Fz      = "
    valeur$ = StrD(Fx,6)
    bb$ = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,45,text$)
    
    unites$ = "   N*m"
    pre$ = "  Mx      = "
    valeur$ = StrD(Mx,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(55,33,text$)
    
    unites$ = "   N*m"
    pre$ = "  My       = "
    valeur$ = StrD(My,6)
    bb$ = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(55,35,text$)

    unites$ = "   N*m"
    pre$ = "  Mz       = "
    valeur$ = StrD(Mz,6)
    bb$ = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(55,37,text$)
    
    unites$ = "   MPa"
    pre$ = "  Electrod = "
    valeur$ = StrD(Electrod,6)
    bb$ = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(55,41,text$)
    
    pre$ = "  Units     = "
    valeur$ = Sunit$
    text1$ = pre$ + valeur$
    Text$ = text1$
    Print_Text(55,43,text$)
    
    pre$ = " Method    = "
    valeur$ = Method$
    text1$ = pre$ + valeur$
    Text$ = text1$
    Print_Text(55,45,text$)

    unites$ = "   mm"
    pre$ = " Lw       = "
    valeur$ = StrD(Lw,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,53,text$)
    
    unites$ = "   mm"
    pre$ = "  C        = "
    valeur$ = StrD(distC,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,55,text$)

    unites$ = "   mm"
    pre$ = "  C1      = "
    valeur$ = StrD(c1,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,57,text$)
    
    unites$ = "   mm"
    pre$ = "  C2      = "
    valeur$ = StrD(c2,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,59,text$)
    
    unites$ = "   mm"
    pre$ = "  Cb      = "
    valeur$ = StrD(cb,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,61,text$)
    
    unites$ = "   mm"
    pre$ = "  Ct       = "
    valeur$ = StrD(ct,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,63,text$)
    
    unites$ = "   mm"
    pre$ = "  Cc      = "
    valeur$ = StrD(cc,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,65,text$)

    unites$ = "   mm"
    pre$ = "  Cr       = "
    valeur$ = StrD(cr,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,67,text$)

    unites$ = "   mm"
    pre$ = "  Nx       = "
    valeur$ = StrD(Nx,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,69,text$)
    
    unites$ = "   mm"
    pre$ = "  Ny       = "
    valeur$ = StrD(Ny,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,71,text$)
    
    unites$ = "   N/mm"
    pre$ = "  Flux x    = "
    valeur$ = StrD(fluxx,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,75,text$)
    
    unites$ = "   N/mm"
    pre$ = "  Flux y    = "
    valeur$ = StrD(fluxy,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,77,text$)

    unites$ = "   N/mm"
    pre$ = "  Flux z    = "
    valeur$ = StrD(fluxz,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,79,text$)
    
    unites$ = "   N/mm"
    pre$ = "  Flux total   = "
    valeur$ = StrD(fluxt,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,81,text$)

    unites$ = "   mm"
    pre$ = "  w requis    = "
    valeur$ = StrD(wrequis,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(5,83,text$)
    
    unites$ = "   mm3"
    pre$ = "  Ix          = "
    valeur$ = StrD(Ix,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,53,text$)

    unites$ = "   mm2"
    pre$ = "  Sx        = "
    valeur$ = StrD(Sx,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,55,text$)

    unites$ = "   mm2"
    pre$ = "  Sxt       = "
    valeur$ = StrD(sxt,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,57,text$)

    unites$ = "   mm2"
    pre$ = "  Sxb      = "
    valeur$ = StrD(sxb,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,59,text$)
   
    unites$ = "   mm3"
    pre$ = "  J         = "
    valeur$ = StrD(J,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,63,text$)
    
    unites$ = "   mm3"
    pre$ = "  Iy          = "
    valeur$ = StrD(iy,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(55,53,text$)
    
    unites$ = "   mm2"
    pre$ = "  Sy        = "
    valeur$ = StrD(Sy,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(55,55,text$)

    unites$ = "   mm3"
    pre$ = "  Syl       = "
    valeur$ = StrD(sxt,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(55,57,text$)

    unites$ = "   mm3"
    pre$ = "  Syr       = "
    valeur$ = StrD(syr,6)
    bb$  = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(55,59,text$)
    
    
    ;------------------------------------
    
    Print_SetTextColor(#Black)
    
    Print_Box(4,10,16,16)
   print_rectangle(20,10,60,8)
   print_rectangle(20,18,60,8)
   print_rectangle(4,26,25,25)
   print_rectangle(29,26,51,6)
   print_rectangle(29,32,51,19)
   print_rectangle(4,51,76,51)
   print_rectangle(4,86,38,10)
   print_rectangle(42,86,38,10)
   

   Print_Image(imagenr1,5,11,14,14)
   print_image(imagenr,5,27,23,23)
  
  ; Preview end
  If Preview=#True
    Print_StopPreview()
  Else
    Print_StopPrinting()
  EndIf
  max=Print_GetPreviewCount()
  Showimage()
EndProcedure

; --------------------------------------

Procedure choix()
 If Window_choix() 
  Define quitchoix = 0

  Repeat
    EventID  =WaitWindowEvent()
    MenuID   =EventMenu()
    GadgetID =EventGadget()
    WindowID =EventWindow()

 ;  Select EventID
        
        Select GadgetID
          Case #Gadget_choix_sendtopreview
            If OpenWindow(0,0,0,700,800,"Preview",#PB_Window_SystemMenu)
            ScrollAreaGadget(0,10,10,680,780, 670, 770, 30)
            ImageGadget(1,10,10,580,780,0)
            CloseGadgetList()
            EndIf
            idx=0
            Zoom=100
            Print_Preview(#True)
            Showimage()
              If Preview=#True
              Print_StopPreview()
               Else
                 Print_StopPrinting()
              EndIf
            max=Print_GetPreviewCount()
            Showimage()
            
          Case #Gadget_choix_sendtoprint
            End
        EndSelect
    
      Until quitchoix
      CloseWindow(#Window_choix)
EndIf
EndProcedure





;- Main Loop
If Window_test()

  Define quittest=0
  Repeat
    EventID  =WaitWindowEvent()
    MenuID   =EventMenu()
    GadgetID =EventGadget()
    WindowID =EventWindow()

    Select EventID
      Case #PB_Event_CloseWindow
        If WindowID=#Window_test
          quittest=1
        EndIf


      Case #PB_Event_Gadget
        Select GadgetID
          Case #Gadget_test_Imprime
            choix()
        EndSelect

    EndSelect
  Until quittest
  CloseWindow(#Window_test)
EndIf
End
Yves Rossignol
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: ouverture et comment fermer une fenetre...

Message par YvesRossignol »

ah oui... au Québec j'utilise le format "letter" et non A4

Yves
Yves Rossignol
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: ouverture et comment fermer une fenetre...

Message par Shadow »

Salut,

Met plutôt:

Code : Tout sélectionner

Until Event = #PB_Event_CloseWindow
Sinon c'est aussi surement que ta condition:

Code : Tout sélectionner

If WindowID=#Window_test
quittest=1
EndIf
N'est jamais rencontrer

Sinon, plus propre de mettre:

Code : Tout sélectionner

Until quittest = 1
Voilà :)
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: ouverture et comment fermer une fenetre...

Message par Zorro »

YvesRossignol a écrit :J'UTILISE LA LIBRAIRIE printer_lib.pb

Code : Tout sélectionner

XIncludeFile "Printer_Lib.pb"
on est content de le savoir, mais tu la trouve ou ta librairie ?? :wink:

de plus , lorsque je vois ce genre de chose :

Code : Tout sélectionner

 unites$ = "   mm"
    pre$ = "  d       = "
    valeur$ = StrD(d,6)
    bb$ = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,33,text$)

    unites$ = "   mm"
    pre$ = "  b       = "
    valeur$ = StrD(b,6)
    bb$ = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,35,text$)
   
    unites$ = "   N"
    pre$ = "  Fx      = "
    valeur$ = StrD(Fx,6)
    bb$ = RSet(valeur$,lg)
    text1$ = pre$ + bb$ + unites$
    Text$ = text1$
    Print_Text(31,41,text$)
; ---------- etc pendant un kilometre ........

je me dis , "qu'est ce qui change entre ces blocs de code ?? "
seulement ces 4 lignes apparemment :

Code : Tout sélectionner

 unites$ = "   N"
    pre$ = "  Fx      = "
    valeur$ = StrD(Fx,6)
 Print_Text(X,Y,text$)
bon ... peut etre qu'en faisant une petite procedure ....

ce pourrai etre remplacé par ....

Code : Tout sélectionner


unites$ = "   mm"
pre$ = "  b       = "
valeur$ = StrD(b,6)
toto( unites$,pre$,valeur$ )
	 


; une seule procedure , appellé avec des parametres different :	 
Procedure toto( unites$,pre$,valeur$,x,y )
		bb$ = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		Print_Text(X,Y,text$)
EndProcedure

autre chose , au lieu d'avoir 20 variables :

Code : Tout sélectionner


d = 12.12345
b = 34.43224
Electrod = 480.123
Method$ = "welds treated as line"
Sunit$ = "US"
lg = 14
distC = 56.3457
c1 = 257.332
c2 = 357.246
cb = 26585.3434
ct = 123.678
cc = 1278.345
cr =2345.56
ix = 32453.34
sx = 137.44
j = 1286.55
fluxx = 324.43
fluxy = 1256.34
fluxz = 344.323
fluxt = 345.234
wrequis = 4.56
advice$ = "aucun"
iy = 974.256
sy = 345.456
sxt = 8954.233
sxb = 3478.34
syl = 126.34
syr = 234.64
ny = 34.67
nx = 238.45
Fx = 100.234
Fy = 200.456
Fz = 300.345
Mx = 400.567
My = 500.567
Mz = 600.890
tu met ça dans une datasection
comme ça au lieu d'avoir plein d'appel de la procedure Toto (optimisation que je te proposes)

unites$ = " mm"
pre$ = " b = "
valeur$ = StrD(b,6)
toto( unites$,pre$,valeur$ )
les variables en rouge serai une valeur dans la datasection

tu pourrai donc mettre cette appel dans une boucle

Code : Tout sélectionner

For i=1 to xxx
		read unites$
		read pre$
		read b
		valeur$ = StrD(b,6) ;<<< voir peut etre ajouter carrement Valeur$ dans la datasection
		toto( unites$,pre$,valeur$ )		
Next i

bref, tu as moyen de vraiment raccourcir ton code :)


sinon pour repondre a ta question :
j'ai mis en Rem tout les appels a ta librairie Print, puisque je ne l'ai pas
et j'ai ajouté "<<<<<<<< modifié par Zorro" aux 2 lignes de code que j'ai modifié


Code : Tout sélectionner

;-----------------------
#PrinterLib_Include=1
;;XIncludeFile "Printer_Lib.pb"



UseJPEGImageDecoder()
;Print_SetUnits(#PRINT_inches)

OPT$="Orientation=" + Str(#DMORIENT_PORTRAIT) + ","
OPT$+"Papersize="   + Str(#DMPAPER_LETTER)

Define imagenr,Jobname$,err$

; imagenr  = LoadImage(#PB_Any,"W.jpg")
; imagenr1 = LoadImage(#PB_Any,"image1p.jpg")
; ---------------
Global Max.l
Global idx.l
Global Zoom.l, lw.d, text1$, Text$, ajout.d, unites$, valeur$, pre$, d.d, b.d
Global cible.i, bb$, Electrod.d, Method$, Sunit$, lg = 14
Global distC.d, c1.d, c2.d, cb.d, ct.d, cc.d, cr.d, ix.d, sx.d, j.d, fluxx.d, fluxy.d, fluxz.d, fluxt.d, wrequis.d, advice$ ,iy.d, sy.d, sxt.d, sxb.d, syl.d, syr.d,ny.d, nx.d
Global Fx.d, Fy.d, Fz.d, Mx.d, My.d, Mz.d, xa.i, ya.i


d = 12.12345
b = 34.43224
Electrod = 480.123
Method$ = "welds treated as line"
Sunit$ = "US"
lg = 14
distC = 56.3457
c1 = 257.332
c2 = 357.246
cb = 26585.3434
ct = 123.678
cc = 1278.345
cr =2345.56
ix = 32453.34
sx = 137.44
j = 1286.55
fluxx = 324.43
fluxy = 1256.34
fluxz = 344.323
fluxt = 345.234
wrequis = 4.56
advice$ = "aucun"
iy = 974.256
sy = 345.456
sxt = 8954.233
sxb = 3478.34
syl = 126.34
syr = 234.64
ny = 34.67
nx = 238.45
Fx = 100.234
Fy = 200.456
Fz = 300.345
Mx = 400.567
My = 500.567
Mz = 600.890

;- Global Variables and Constants
Global BubbleTipStyle=0
Define EventID,MenuID,GadgetID,WindowID

;- Window Constants
Enumeration 1
		#Window_test
		#Window_choix
EndEnumeration
#WindowIndex=#PB_Compiler_EnumerationValue


;- Gadget Constants
Enumeration 1
		;Window_test
		#Gadget_test_Imprime
		
		
		;Window_choix
		#Gadget_choix_sendtopreview
		#Gadget_choix_sendtoprint
		
		
EndEnumeration
#GadgetIndex=#PB_Compiler_EnumerationValue

Procedure.i Window_test()
		If OpenWindow(#Window_test,480,213,400,300,"imprimatur",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
				ButtonGadget(#Gadget_test_Imprime,150,70,120,20,"choix")
				HideWindow(#Window_test,0)
				ProcedureReturn WindowID(#Window_test)
		EndIf
EndProcedure

Procedure.i Window_choix()
		If OpenWindow(#Window_choix,553,196,400,300,"Select option",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
				ButtonGadget(#Gadget_choix_sendtopreview,140,65,120,20,"Preview")
				ButtonGadget(#Gadget_choix_sendtoprint,140,145,120,20,"Send to printer")
				HideWindow(#Window_choix,0)
				ProcedureReturn WindowID(#Window_choix)
		EndIf
EndProcedure

;-----------------------------------------
Procedure Showimage()
		Protected img
		;img=Print_GetPreviewImage(idx)
		If img
				SetGadgetState(1,ImageID(img))
		EndIf
EndProcedure

Procedure Print_Preview(Preview)
		Protected pw,xa,ya,Text$,textw,texta,textd,texth
		;Print_OpenPrinter("","PAPERSIZE="+Str(#DMPAPER_LETTER)+",ORIENTATION="+Str(#DMORIENT_PORTRAIT))
		
		If Preview=#True
				pw=(450*Zoom)/100
				; Print_StartPreview(pw)
				;xa=Print_GetDeviceCaps(#HORZRES)+20
				;ya=Print_GetDeviceCaps(#VERTRES)+20
				SetGadgetAttribute(0,#PB_ScrollArea_InnerWidth,xa)
				SetGadgetAttribute(0,#PB_ScrollArea_InnerHeight,ya)
		Else
				; Print_StartPrinting("TEST")
		EndIf
		
		; Start preview
		;   Print_SetTextColor(#Black)
		;   Print_Font("Arial",48)
		;  textw=Print_TextWidth(text$)
		; texta=Print_GetTextMetrics(#TM_ASCENT)
		; textd=Print_GetTextMetrics(#TM_DESCENT)
		; texth=Print_GetTextMetrics(#TM_HEIGHT)
		
		;-------------------
		
		;   Print_SetTextColor(#Blue)
		; Print_Font("Arial",48,#PB_Font_Bold )
		Text$="Weld Design"                      ; c'est ici que ca se passe
		; Print_Text(32,10,Text$)
		; Print_Font("Arial",18)
		Text$="Registred version of : "
		; Print_Text(21,20,Text$)
		; Print_Font("Arial",18,#PB_Font_Underline)
		Text$ = "UNREGISTRED VERSION"
		; Print_Text(50,20,text$)
		; Print_Font("Arial",18)
		
		Text$ = "Data Section, geometry, loads and material"
		;Print_Text(35,28,text$)
		;Print_Font("Arial",12)
		
		
		unites$ = "   mm"
		pre$ = "  d       = "
		valeur$ = StrD(d,6)
		bb$ = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		; Print_Text(31,33,text$)
		
		unites$ = "   mm"
		pre$ = "  b       = "
		valeur$ = StrD(b,6)
		bb$ = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(31,35,text$)
		
		unites$ = "   N"
		pre$ = "  Fx      = "
		valeur$ = StrD(Fx,6)
		bb$ = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(31,41,text$)
		
		unites$ = "   N"
		pre$ = "  Fy      = "
		valeur$ = StrD(Fy,6)
		bb$ = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(31,43,text$)
		
		unites$ = "   N"
		pre$ = "  Fz      = "
		valeur$ = StrD(Fx,6)
		bb$ = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(31,45,text$)
		
		unites$ = "   N*m"
		pre$ = "  Mx      = "
		valeur$ = StrD(Mx,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(55,33,text$)
		
		unites$ = "   N*m"
		pre$ = "  My       = "
		valeur$ = StrD(My,6)
		bb$ = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(55,35,text$)
		
		unites$ = "   N*m"
		pre$ = "  Mz       = "
		valeur$ = StrD(Mz,6)
		bb$ = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(55,37,text$)
		
		unites$ = "   MPa"
		pre$ = "  Electrod = "
		valeur$ = StrD(Electrod,6)
		bb$ = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(55,41,text$)
		
		pre$ = "  Units     = "
		valeur$ = Sunit$
		text1$ = pre$ + valeur$
		Text$ = text1$
		;Print_Text(55,43,text$)
		
		pre$ = " Method    = "
		valeur$ = Method$
		text1$ = pre$ + valeur$
		Text$ = text1$
		;Print_Text(55,45,text$)
		
		unites$ = "   mm"
		pre$ = " Lw       = "
		valeur$ = StrD(Lw,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print(5,53,text$)
		
		unites$ = "   mm"
		pre$ = "  C        = "
		valeur$ = StrD(distC,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,55,text$)
		
		unites$ = "   mm"
		pre$ = "  C1      = "
		valeur$ = StrD(c1,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,57,text$)
		
		unites$ = "   mm"
		pre$ = "  C2      = "
		valeur$ = StrD(c2,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,59,text$)
		
		unites$ = "   mm"
		pre$ = "  Cb      = "
		valeur$ = StrD(cb,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,61,text$)
		
		unites$ = "   mm"
		pre$ = "  Ct       = "
		valeur$ = StrD(ct,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,63,text$)
		
		unites$ = "   mm"
		pre$ = "  Cc      = "
		valeur$ = StrD(cc,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,65,text$)
		
		unites$ = "   mm"
		pre$ = "  Cr       = "
		valeur$ = StrD(cr,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,67,text$)
		
		unites$ = "   mm"
		pre$ = "  Nx       = "
		valeur$ = StrD(Nx,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,69,text$)
		
		unites$ = "   mm"
		pre$ = "  Ny       = "
		valeur$ = StrD(Ny,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,71,text$)
		
		unites$ = "   N/mm"
		pre$ = "  Flux x    = "
		valeur$ = StrD(fluxx,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,75,text$)
		
		unites$ = "   N/mm"
		pre$ = "  Flux y    = "
		valeur$ = StrD(fluxy,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,77,text$)
		
		unites$ = "   N/mm"
		pre$ = "  Flux z    = "
		valeur$ = StrD(fluxz,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,79,text$)
		
		unites$ = "   N/mm"
		pre$ = "  Flux total   = "
		valeur$ = StrD(fluxt,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,81,text$)
		
		unites$ = "   mm"
		pre$ = "  w requis    = "
		valeur$ = StrD(wrequis,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(5,83,text$)
		
		unites$ = "   mm3"
		pre$ = "  Ix          = "
		valeur$ = StrD(Ix,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(31,53,text$)
		
		unites$ = "   mm2"
		pre$ = "  Sx        = "
		valeur$ = StrD(Sx,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(31,55,text$)
		
		unites$ = "   mm2"
		pre$ = "  Sxt       = "
		valeur$ = StrD(sxt,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(31,57,text$)
		
		unites$ = "   mm2"
		pre$ = "  Sxb      = "
		valeur$ = StrD(sxb,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(31,59,text$)
		
		unites$ = "   mm3"
		pre$ = "  J         = "
		valeur$ = StrD(J,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(31,63,text$)
		
		unites$ = "   mm3"
		pre$ = "  Iy          = "
		valeur$ = StrD(iy,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(55,53,text$)
		
		unites$ = "   mm2"
		pre$ = "  Sy        = "
		valeur$ = StrD(Sy,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(55,55,text$)
		
		unites$ = "   mm3"
		pre$ = "  Syl       = "
		valeur$ = StrD(sxt,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(55,57,text$)
		
		unites$ = "   mm3"
		pre$ = "  Syr       = "
		valeur$ = StrD(syr,6)
		bb$  = RSet(valeur$,lg)
		text1$ = pre$ + bb$ + unites$
		Text$ = text1$
		;Print_Text(55,59,text$)
		
		
		;------------------------------------
		
		;Print_SetTextColor(#Black)
		
		;Print_Box(4,10,16,16)
		;Print_rectangle(20,10,60,8)
		;Print_rectangle(20,18,60,8)
		;Print_rectangle(4,26,25,25)
		;Print_rectangle(29,26,51,6)
		;Print_rectangle(29,32,51,19)
		;Print_rectangle(4,51,76,51)
		;Print_rectangle(4,86,38,10)
		;Print_rectangle(42,86,38,10)
		
		
		;Print_Image(imagenr1,5,11,14,14)
		;Print_image(imagenr,5,27,23,23)
		
		; Preview end
		If Preview=#True
				;Print_StopPreview()
		Else
				;Print_Stop;Printing()
		EndIf
		;max=Print_GetPreviewCount()
		Showimage()
EndProcedure

; --------------------------------------

Procedure choix()
		If Window_choix()
				Define quitchoix = 0
				
				Repeat
						EventID  =WaitWindowEvent()
						MenuID   =EventMenu()
						GadgetID =EventGadget()
						WindowID =EventWindow()
						
						;  Select EventID
						
						Select GadgetID
						Case #Gadget_choix_sendtopreview
								If OpenWindow(#Window_choix,0,0,700,800,"Preview",#PB_Window_SystemMenu) ; <<<<<<<<<<<<modifié par Zorro
										ScrollAreaGadget(0,10,10,680,780, 670, 770, 30)
										ImageGadget(1,10,10,580,780,0)
										CloseGadgetList()
								EndIf
								idx=0
								Zoom=100
								;Print_Preview(#True)
								Showimage()
								If Preview=#True
										;Print_StopPreview()
								Else
										;Print_Stop;Printing()
								EndIf
								;max=Print_GetPreviewCount()
								Showimage()
								
						Case #Gadget_choix_sendtoPrint
								End
						EndSelect
						
				Until EventID =#PB_Event_CloseWindow      ; <<<<<<<<<< Modfié par Zorro
				CloseWindow(#Window_choix)
		EndIf
EndProcedure





;- Main Loop
If Window_test()
		
		Define quittest=0
		Repeat
				EventID  =WaitWindowEvent()
				MenuID   =EventMenu()
				GadgetID =EventGadget()
				WindowID =EventWindow()
				
				Select EventID
				Case #PB_Event_CloseWindow
						If WindowID=#Window_test
								quittest=1
						EndIf
						
						
				Case #PB_Event_Gadget
						Select GadgetID
						Case #Gadget_test_Imprime
								choix()
						EndSelect
						
				EndSelect
		Until quittest
		CloseWindow(#Window_test)
EndIf
End

Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: ouverture et comment fermer une fenetre...

Message par falsam »

@Zorro : La printerlib utilisé dans ce code est ici:
:arrow: http://www.purebasic.fr/english/viewtop ... 27&t=43348

@YvesRossignol: As tu essayer la library vector native dans PureBasic pour imprimer tes états ?
Un exemple ici : http://www.purebasic.fr/french/viewtopi ... =1&t=15432
YvesRossignol a écrit :je ne comprend pas comment fermer ma fenetre, j'ai essayer de toute sorte de façon mais j'ai toujours une erreur.
Voila une méthode modern qui se base sur un trigger (Déclencheur)

Code : Tout sélectionner

Enumeration Window
  #mainForm
EndEnumeration

;Plan de l'application
Declare Start()
Declare Exit()

Start()

Procedure Start()
  OpenWindow(#mainForm, 0, 0, 500, 300, "Fermer une fenetre", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  ;Trigger
  BindEvent(#PB_Event_CloseWindow, @Exit())
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure Exit()
  ;Code : Traitement de fin à éxécuter
  
  End
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: ouverture et comment fermer une fenetre...

Message par YvesRossignol »

Merci de vos réponses

Le code n'était pas optimisé du tout. C'est pour me faire une feuille d'impression de données. La version finale n'aura pas les valeurs du début car elles sont calculées dans le programme et l'impression se fera en bouche avec une matrice de position, une matrice des valeurs et une autre des textes... le tout indenté de la bonne manière...

c'est une méthode que je prends pour développer... je fais un petit code... dans lequel peut-être 20% à 50% va être conservé et quand j'ai ce que je veux, je fais du ménage et je l'inclus dans le programme principal qui fait plus de 2000 lignes....

Yves
Yves Rossignol
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: ouverture et comment fermer une fenetre...

Message par Mesa »

@YvesRossignol:
Remarque importante concernant ton code. Tu fais l'erreur d'appeler la boucle d'évènements pour chaque fenêtre. C'est vrai que cela n'est pas indiqué dans la doc mais un code sans souci et propre ne fait appel qu'à une seule boucle même avec plusieurs fenêtres. Ça évite la perte d'évènements qui étaient dans la file d'attente, en effet à chaque appel à WaitWindowEvent(), la file d'attente est remise à zéro (sauf erreur de ma part).

Pour gérer les fenêtres on utilisera la fonction EventWindow()

Dans les remarques de WaitWindowEvent(), on peut lire:
Une application devrait, si possible, toujours utiliser WaitWindowEvent() en préférence à WindowEvent() car elle ne prend pas de temps CPU en attente d'un évènement.

La boucle d'évènements de la fenêtre ne doit pas être traitée dans un thread, car il y a une limitation sur OS X et Linux. Une erreur du débogueur sera levée.

WaitWindowEvent() ne peut être appelé qu'une seule fois par boucle d'évènements, sinon les évènements seront "perdus" (chaque évènement ne peut être traité qu'une seule fois et n'est plus disponible pour un deuxième traitement).

Pour obtenir le numéro de la fenêtre où s'est produit l'évènement, utiliser la fonction EventWindow().
Voici une façon de faire parmi d'autres.
(Par exemple, pour suivre la doc de purebasic, je n'utilise les fonctions bindxxx que pour les évènements qui ont besoin d'un traitement en temps réel, mais ce n'est qu'une recommandation.)

Voici un code qui gère 2 fenêtres

Code : Tout sélectionner

Enumeration Fenetres
  #Fenetre0
  #Fenetre1
EndEnumeration

Enumeration Gadgets
  ;Fenetre0
  #BoutonOuvrirFenetre1
EndEnumeration

Enumeration Gadgets
  ;Fenetre1
  #CanvasFenetre1
EndEnumeration

Procedure OuvrirFenetre1()
  OpenWindow(#Fenetre1, 300, 10, 300, 600, "Fenetre 1", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  CanvasGadget(#CanvasFenetre1,10,10,280,580)
  ProcedureReturn 1
EndProcedure

OpenWindow(#Fenetre0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
ButtonGadget(#BoutonOuvrirFenetre1, 10,10,100,30,"Ouvrir fenêtre")


Repeat
  
  Event = WaitWindowEvent() ; Quel évènement
  Fenetre = EventWindow() ; dans Quelle fenêtre
  Gadget =  EventGadget() ; dans Quel gadget de n'importe quelle fenêtre
  ;     Menu = EventMenu()
  ;     Autres evènements ...
  TypeEvent = EventType() ; et Quel type d'évènement de n'importe quel gadget de n'importe quelle fenêtre
  
  Select Event
   
    Case #PB_Event_CloseWindow ;Fermeture des fenêtres
      Select Fenetre
        Case #Fenetre0
          End
          
        Case #Fenetre1
          CloseWindow(#Fenetre1)
          Fenetre1Ouverte = #False
      EndSelect
      
    Case #PB_Event_Gadget
      Select Gadget
        Case #BoutonOuvrirFenetre1 
          Debug "Ce bouton appartient à la fenêtre numéro " + Str(Fenetre)
          If Fenetre1Ouverte <> #True
            Fenetre1Ouverte=OuvrirFenetre1()
          EndIf
          
        Case #CanvasFenetre1
          Select TypeEvent
            Case #PB_EventType_LeftClick
              Debug "clic gauche sur gadget n°" + Str(Gadget) + " sur fenêtre n°" + Str(Fenetre)
          EndSelect
          
      EndSelect
      
  EndSelect
ForEver
M.
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: ouverture et comment fermer une fenetre...

Message par Bernie »

Salut Yves
et pour ouvrir plusieurs fenetres :

Code : Tout sélectionner

Enumeration
  #Main
  #Fenetre1
  #Fenetre2
  #Fenetre3
  #Fenetre4
  #Fenetre5
EndEnumeration

Enumeration
  #Bouton1
  #Bouton2
  #Bouton3
  #Bouton4
  #Bouton5
  #BoutonFenetre1
  #BoutonFenetre2
  #BoutonFenetre3
  #BoutonFenetre4
  #BoutonFenetre5
  #Text
EndEnumeration

Procedure OpenWin_Main()
  If OpenWindow(#Main, 0, 0, 220, 200, "Fenetres", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   
      ButtonGadget(#Bouton1, 10,  10, 200, 20, "Ouvrir fenêtre 1")
      ButtonGadget(#Bouton2, 10,  40, 200, 20, "Ouvrir fenêtre 2")
      ButtonGadget(#Bouton3, 10,  70, 200, 20, "Ouvrir fenêtre 3")
      ButtonGadget(#Bouton4, 10, 100, 200, 20, "Ouvrir fenêtre 4")
      ButtonGadget(#Bouton5, 10, 130, 200, 20, "Ouvrir fenêtre 5")
      TextGadget(#Text, 10, 180, 200, 20, "Pas de fenêtre ouverte", #PB_Text_Center)
  
  EndIf
EndProcedure

Procedure OpenWin_1()
  If OpenWindow(#Fenetre1, 0, 0, 220, 40, "Fenetre 1", #PB_Window_SystemMenu, WindowID(#Main))
   
      ButtonGadget(#BoutonFenetre1, 10,  10, 200, 20, "Fermer fenêtre 1")
      
      ProcedureReturn #True
   
  EndIf
EndProcedure

Procedure OpenWin_2()
  If OpenWindow(#Fenetre2, 0, 70, 220, 40, "Fenetre 2", #PB_Window_SystemMenu, WindowID(#Main))

      ButtonGadget(#BoutonFenetre2, 10,  10, 200, 20, "Fermer fenêtre 2")
      
      ProcedureReturn #True

  EndIf
EndProcedure

Procedure OpenWin_3()
  If OpenWindow(#Fenetre3, 0, 140, 220, 40, "Fenetre 3", #PB_Window_SystemMenu, WindowID(#Main))
    
      ButtonGadget(#BoutonFenetre3, 10,  10, 200, 20, "Fermer fenêtre 3")
      
      ProcedureReturn #True

  EndIf
EndProcedure

Procedure OpenWin_4()
  If OpenWindow(#Fenetre4, 0, 210, 220, 40, "Fenetre 4", #PB_Window_SystemMenu, WindowID(#Main))
    
      ButtonGadget(#BoutonFenetre4, 10,  10, 200, 20, "Fermer fenêtre 4")
      
      ProcedureReturn #True

  EndIf
EndProcedure

Procedure OpenWin_5()
  If OpenWindow(#Fenetre5, 0, 280, 220, 40, "Fenetre 5", #PB_Window_SystemMenu, WindowID(#Main))
   
      ButtonGadget(#BoutonFenetre5, 10,  10, 200, 20, "Fermer fenêtre 5")
      
      ProcedureReturn #True

  EndIf
EndProcedure

OpenWin_Main()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        ;/ Ouverture des fenêtres "fille"
        Case #Bouton1
          If OpenWin_1()
            SetGadgetText(#Text, "Vous avez ouvert la fenêtre 1")
          EndIf
          
        Case #Bouton2
          If OpenWin_2()
            SetGadgetText(#Text, "Vous avez ouvert la fenêtre 2")
          EndIf
          
        Case #Bouton3
          If OpenWin_3()
            SetGadgetText(#Text, "Vous avez ouvert la fenêtre 3")
          EndIf
          
        Case #Bouton4
          If OpenWin_4()
            SetGadgetText(#Text, "Vous avez ouvert la fenêtre 4")
          EndIf
          
        Case #Bouton5
          If OpenWin_5()
            SetGadgetText(#Text, "Vous avez ouvert la fenêtre 5")
          EndIf
          
          ;/ Femeture des fenêtres "fille" par le bouton
        Case #BoutonFenetre1
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 1")
          CloseWindow(#Fenetre1)
          
        Case #BoutonFenetre2
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 2")
          CloseWindow(#Fenetre2)
          
        Case #BoutonFenetre3
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 3")
          CloseWindow(#Fenetre3)
          
        Case #BoutonFenetre4
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 4")
          CloseWindow(#Fenetre4)
          
        Case #BoutonFenetre5
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 5")
          CloseWindow(#Fenetre5)
          
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        ;/ Fermeture des fenêtres "fille" par l'icône [X]
        Case #Fenetre1
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 1")
          CloseWindow(#Fenetre1)
          
        Case #Fenetre2
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 2")
          CloseWindow(#Fenetre2)
          
        Case #Fenetre3
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 3")
          CloseWindow(#Fenetre3)
          
        Case #Fenetre4
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 4")
          CloseWindow(#Fenetre4)
          
        Case #Fenetre5
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 5")
          CloseWindow(#Fenetre5)
          
          ;/ Fermeture de la fenêtre principale (et fin du programme)
        Case #Main
          Quit = #True
          
      EndSelect
  EndSelect
Until Quit
End
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: ouverture et comment fermer une fenetre...

Message par Marc56 »

Je ne sais pas si à l'appel de WaitWindowEvent la pile est vidée ou si c'est simplement l'évènement traité qui est retiré de la pile ?

@YvesRossignol: Dans tous les cas, il est préférable de faire une seule boucle de traitement quand on utilise plusieurs fenêtres. La principale raison est de permettre à l'utilisateur d'utiliser tous les gadgets de toutes les fenêtres en même temps sans avoir à gérer l'activation de l'une ou l'autre fenêtres. 8)
Si tu fais une boucle pour chaque fenêtre, si l'utilisateur est dans la boucle de la fenêtre secondaire, il ne peut rien faire dans la fenêtre primaire tant que la boucle de la fenêtre secondaire à la main.

:wink:
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: ouverture et comment fermer une fenetre...

Message par Zorro »

Marc56 a écrit : Si tu fais une boucle pour chaque fenêtre, si l'utilisateur est dans la boucle de la fenêtre secondaire, il ne peut rien faire dans la fenêtre primaire tant que la boucle de la fenêtre secondaire à la main.

:wink:
ce qui peut être un effet recherché ;)
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: ouverture et comment fermer une fenetre...

Message par Marc56 »

Zorro a écrit :
Marc56 a écrit : Si tu fais une boucle pour chaque fenêtre, si l'utilisateur est dans la boucle de la fenêtre secondaire, il ne peut rien faire dans la fenêtre primaire tant que la boucle de la fenêtre secondaire à la main.

:wink:
ce qui peut être un effet recherché ;)
Oui, effectivement. Par contre il faut alors bien penser à gérer tous les évènements globaux ou attachés aux autres fenêtres (ex: EventTimer())

Je pense qu'il est plus "propre" d'utiliser DisableWindow() si on veut focaliser l'utilisateur sur une seule des autres fenêtres 8)
(mais on perd le bénéfice de la boite de fermeture)

PS. Je n'ai pas testé, mais je ne sais pas si DisableWindow() désactive les éventuels timers associés ? :?
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: ouverture et comment fermer une fenetre...

Message par Zorro »

Marc56 a écrit :PS. Je n'ai pas testé, mais je ne sais pas si DisableWindow() désactive les éventuels timers associés ? :?

pendant que t'es sur une autre fenetre , tu peux toujours mettre un timer en pause (relative )
en effet, il suffit de faire ceci

Code : Tout sélectionner

 NouvelleValeur =  3600000 ; valeur longue (ici 1 heure )
 RemoveWindowTimer(#Fenetre, Timer0) ; on suprime le timer ayant la valeur de depart (mettons 1000) 
    AddWindowTimer(#Fenetre, Timer0, NouvelleValeur) ; on recreer le meme timer avec une valeur longue , ce qui reviens a le mettre en pause
; et oui  meme une pause est forcement limité dans le temps :)

; il suffira de faire le contraire, pour "réactualiser le timer d'origine 

NouvelleValeur =  1000 ; valeurcourte (ici 1 seconde )
 RemoveWindowTimer(#Fenetre, Timer0) ; on suprime le timer ayant la valeur :3600000
    AddWindowTimer(#Fenetre, Timer0, NouvelleValeur) ; (1000)
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: ouverture et comment fermer une fenetre...

Message par YvesRossignol »

Merci Messieurs de vos précieux conseils. J'apprends beaucoup avec vous. Je vous rappelle que je suis nouveau programmeur en PB. Je fais des codes tests avec des valeurs tests.... bon c'est à optimiser mais ça viens par la suite....

Yves
Yves Rossignol
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: ouverture et comment fermer une fenetre...

Message par Zorro »

YvesRossignol a écrit :Je vous rappelle que je suis nouveau programmeur en PB.
t'inquietes , on est tous des débutants de toute façons :)
j'ai toujours cette phrase en tete, une phrase lu dans les papillottes de Noel

"tout le monde disaient que c'etait impossible , il est venu un imbécile, qui ne le savait pas , il l'a fait ! "

(a bien méditer :) )
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: ouverture et comment fermer une fenetre...

Message par Marc56 »

YvesRossignol a écrit :Merci Messieurs de vos précieux conseils. J'apprends beaucoup avec vous. Je vous rappelle que je suis nouveau programmeur en PB. Je fais des codes tests avec des valeurs tests.... bon c'est à optimiser mais ça viens par la suite....

Yves
Bon nombre d'entre nous ont pratiqués et pratiquent plusieurs langages (et depuis pas mal d'années).
Il peut être intéressant de préciser quel(s) autre(s) langage(s) tu as déjà utilisé et quels type de programmes tu (as) fait. Cela permet de te donner des conseils en procédant par analogies.

:wink:
Répondre