Affichage d'une fenêtre d'attente avec sortie automatique
Affichage d'une fenêtre d'attente avec sortie automatique
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 ?
...,
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 ...
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.
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
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
Si il y a une erreur dans l'utilisation des threads, dites le moi
Chris
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
Chris
@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
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.
J'aurais donc dû faire ?
Chris
Code : Tout sélectionner
If Close = -1 : End :EndIf
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
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.