Affichage d'une fenêtre d'attente avec sortie automatique

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
LOULOU25
Messages : 150
Inscription : mer. 19/mai/2004 20:40

Affichage d'une fenêtre d'attente avec sortie automatique

Message par LOULOU25 »

Je cherche à affichier une fenetre d'attente pendant le déroulement d'une partie de code afin de faire patienter l'opérateur. Puis a la fin du traitement je souhaite clore la fenetre en automatique. Quelqu'un con,nait-il une solution ?
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

...,

Plusieurs solutions en fait.

Soit tu ouvres un requester dans le prog principal pendant que le code tourne en fond, ou bien tu ouvres un thread avec un requester un une popupwindow dans un thread pendant que le code tourne dans le prog principal. Voire tu peux tout mettre au même niveau avec un :

tant que mon code tourne mais que j'ai pas atteint tel point
j'affiche telle fenêtre
sinon je la ferme

Il faudrait que tu précises un poil ton besoin pour pouvoir discuter sur un canevas plus précis ...
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Je ne vais pas alourdir le code en lançant un processus bidon alors j'ai mis des boutons juste pour simuler!

Code : Tout sélectionner

Procedure Patientez()
  If OpenWindow(0,0,0,200,100,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Pure Basic")
    If CreateGadgetList(WindowID(0))
      If LoadFont(0,"Arial",16) 
        SetGadgetFont(#PB_Default,FontID())
      EndIf  
      TextGadget(0, 10, 30,180,40,"Patientez...",#PB_Text_Center)
    EndIf
  EndIf
  
EndProcedure 


  Enumeration
    #Window
  EndEnumeration
   
  If OpenWindow(1,1,0,400,400,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Pure Basic")
    If CreateGadgetList(WindowID(1))
      ButtonGadget(1, 10, 30, 160, 20, "Lancez une opération factice")
      ButtonGadget(2, 10, 60, 160, 20, "Simuler la fin de l'opération ")
    EndIf
    Repeat
      EventID.l=WaitWindowEvent()
      Select EventID
        Case #PB_EventGadget
          Select EventGadgetID()
            Case 1
              Patientez()
              SetTimer_(WindowID(1),1,1000,0)
              
            Case 2
              killtimer_(WindowID(1),1)
              CloseWindow(0)
          EndSelect
          
        Case #WM_TIMER
          If test=0
            SetGadgetText(0,"quelques instants !")
            test=1
          Else
            SetGadgetText(0,"Patientez...")
            test=0
          EndIf
           
        Case #WM_CLOSE
          Quit=1
      EndSelect
       
    Until Quit=1
  EndIf
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Moi, j'ai fait ça, avec un thread, mais comme c'est la première fois que je les utilise, je ne sais pas du tout m'en servir.

Alors préparez les extincteurs :lol:

Code : Tout sélectionner

Enumeration
  #Window_0
  #Window_1
EndEnumeration

Enumeration
  #Text_0
  #Text_1
  #ProgressBar_0
EndEnumeration
Global ThreadID, FontID1

FontID1 = LoadFont(1, "Comic Sans MS", 24, #PB_Font_Bold)

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 250, 50, 400, 70,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Calmos 2004 - Installation")
    If CreateGadgetList(WindowID(#Window_0))
      TextGadget(#Text_0, 10, 10, 380, 60, "Veuillez patienter", #PB_Text_Center)
      TextGadget(#Text_1, 10, 10, 380, 60, "Y'a pas le feu au lac !!!", #PB_Text_Center)
      
      SetGadgetFont(#Text_1, FontID1)
      SetGadgetFont(#Text_0, FontID1)
      
      HideGadget(#Text_0,0)
      HideGadget(#Text_1,1)
    EndIf
  EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 250, 200, 400, 40, #PB_Window_TitleBar , "Progress Indicator")
    If CreateGadgetList(WindowID(#Window_1))
      ProgressBarGadget(#ProgressBar_0, 10, 10, 380, 20, 0, 100)
    EndIf
  EndIf
EndProcedure

Procedure Indicateur(valeur)
  Global Close
  Delay(2000)
  Open_Window_1()
  
  For i = 0 To 100
    SetGadgetState(#ProgressBar_0,i)
    Delay(Random(400)+50)
  Next
  CloseWindow(#Window_1)
  Close = EventWindowID() 
EndProcedure

Open_Window_0()
ThreadID = CreateThread(@Indicateur(),1)

SetTimer_(WindowID(#Window_0),1,1000,0)

Repeat
  Select WaitWindowEvent()
    Case #WM_TIMER
      If flag = 1 : flag = 0 : Else : flag = 1 : EndIf
      
      If flag = 1
        HideGadget(#Text_0,1) : HideGadget(#Text_1,0)
      ElseIf flag = 0
        HideGadget(#Text_0,0) : HideGadget(#Text_1,1)
      EndIf
      
      If Close = -1 : CloseWindow(#Window_0):EndIf
       
    Case #PB_EventCloseWindow
      KillThread(ThreadID) : quit = 1
  EndSelect
Until quit = 1

End
Si il y a une erreur dans l'utilisation des threads, dites le moi

Chris :)
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

@Chris et Nico,

Les deux codes sont bons. Sauf un point pour Chris, tu ne tues pas ton prog à la fin, mais tu as tout fermé ! Alors c'est lpus compliqué si tu dispatches un prog comme ça à des utilisateurs.

Slts
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

J'aurais donc dû faire ?

Code : Tout sélectionner

If Close = -1 : End :EndIf 
Chris :)
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Gagné !
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Ou pour respecter la logique de ce que tu as écrit et être + élégant, on pourrait même dire :

If Close = -1 : Quit = 1 :EndIf
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Répondre