Page 1 sur 1
Affichage d'une fenêtre d'attente avec sortie automatique
Publié : mer. 19/mai/2004 20:43
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 ?
Publié : mer. 19/mai/2004 21:05
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 ...
Publié : mer. 19/mai/2004 21:36
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
Publié : mer. 19/mai/2004 23:16
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
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

Publié : mer. 19/mai/2004 23:53
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
Publié : mer. 19/mai/2004 23:57
par Chris
J'aurais donc dû faire ?
Chris

Publié : jeu. 20/mai/2004 0:07
par fweil
Gagné !
Publié : jeu. 20/mai/2004 0:08
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