pb affichage textgadget sous windows 10
-
- Messages : 12
- Inscription : mar. 01/juil./2014 9:28
pb affichage textgadget sous windows 10
Bonjour à tous,
Je travaille habituellement sous Linux Debian, j'ai un programme qui télécharge des fichiers sur un serveur de la NOAA
aux US le textgadget affiche l'état par exemple 10/180.
Cela fonctionne très bien sous linux, par contre sous windows l'affichage est figé si l'on clic la souris mais le programme se déroule bien.
Si l'on viens à cliquer sur la fenêtre du prog BP cela affiche que le programme ne répond pas.
Je n'ai pas ces problèmes sous linux..........
Merci de votre aide.
Bonne journée.
Je travaille habituellement sous Linux Debian, j'ai un programme qui télécharge des fichiers sur un serveur de la NOAA
aux US le textgadget affiche l'état par exemple 10/180.
Cela fonctionne très bien sous linux, par contre sous windows l'affichage est figé si l'on clic la souris mais le programme se déroule bien.
Si l'on viens à cliquer sur la fenêtre du prog BP cela affiche que le programme ne répond pas.
Je n'ai pas ces problèmes sous linux..........
Merci de votre aide.
Bonne journée.
Re: pb affichage textgadget sous windows 10
Bonjour translucidus,
On veut bien tenter d'apporter de l'aide mais on est pas devin non plus.
Sans code, ça va pas être facile ? Quelle version de PB utilises tu ?
On veut bien tenter d'apporter de l'aide mais on est pas devin non plus.
Sans code, ça va pas être facile ? Quelle version de PB utilises tu ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
-
- Messages : 12
- Inscription : mar. 01/juil./2014 9:28
Re: pb affichage textgadget sous windows 10
Bonjour Ar-S,
Voici quelques lignes qui montre le PB si l'on clique avec la souris sur le bureau l'affichage se fige, ce
qui n'est pas le cas sous linux.
Merci
Voici quelques lignes qui montre le PB si l'on clique avec la souris sur le bureau l'affichage se fige, ce
qui n'est pas le cas sous linux.
Code : Tout sélectionner
;Test affichage Textgadget dans une boucle
; 29/06/2016 DM
Define.w i , Nbt
#WindowWidth = 350
#WindowHeight =180
If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight," TELECHARGEMENT GFS NOAA " ,0)
TextGadget(1, 70, 50, 220, 40, " Acquisition en cours :",#PB_Text_Border|#PB_Text_Center)
TextGadget(4, 80, 130, 200, 30, "CETTE FENETRE ",#PB_Text_Center)
SetGadgetColor(4, #PB_Gadget_FrontColor, $FF00FF)
TextGadget(5, 80, 150, 200, 30, "SE FERMERA A LA FIN DU TRAVAIL !!!",#PB_Text_Center)
SetGadgetColor(5, #PB_Gadget_FrontColor, $FF0000)
If LoadImage(0,"C:/METEO/Ballon/Data/ballon2.png")
ButtonImageGadget(7, 0, 0, 70, 67, ImageID(0))
EndIf
Nbt = 180
StickyWindow(0, #True)
For i= 0 To nbt Step 3
Afnb$=Str(i)+"/"+Str(Nbt)
SetGadgetText(1, " Acquisition en cours : "+Afnb$)
Select i
Case 0 To 9
id$="00"+Str(i)
id2$="0"+Str(i)
Case 10 To 99
id$="0"+Str(i)
id2$=Str(i)
Case 100 To 200
id$=Str(i)
id2$=id$
EndSelect
Fichier$= Pth1$+"Gfs"+Hr2$+"_Europe.grb"
;urlok$=Chr(34)+"http://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?file=..................................
cmd$="wget -nv -O "
;RunProgram (cmd$,Param$,"",#PB_Program_Wait|#PB_Program_Hide)
Delay(500)
Next i
EndIf
End
Re: pb affichage textgadget sous windows 10
Bonjour translucidus,
Ton programme se fige car à aucun moment tu ne donne la main au gestionnaire d'évènement pour traiter ce que l'utilisateur peut entrer (ex: clic de souris). Du coup il sature le buffer et finit par planter.
Une rustine rapide consiste à mettre avant la ligne Delay(500) une ligne comme
Maintenant, idéalement il y aurait d'autres choses à mettre pour le rendre 'propre' c'est à dire qu'il puisse être interrompu par l'utilisateur (bouton stop, case de fermeture etc)
Delay n'est pas une instruction géniale dans une boucle avec beaucoup d'itérations, elle a vite fait de pomper du temps système.
Regarde aussi les fonctions LSet et Rset qui te permettent de formater facilement une chaine en complétant à droite et à gauche par un caractère au choix sans te préoccuper du nombre de caractères à utiliser.
Je viens de tester le code que tu as donné, sous Linux (Debian 8 avec xfce) et PB 5.42 LTS
Il n'affiche pas la progression (peut être que certaines libs me manquent) et plante aussi si on clique un certain nombre de fois
"Cette fenêtre ne répond pas : il se peut qu'elle soit occupée.
Voulez-vous fermer l'application ?"
Si on met le Delay à 50 au lieu de 500 il ne plante pas, mais c'est parce qu'il a fini avant de saturer le buffer souris
(dans les deux cas, j'avais désactivé le loadimage puisque n'ayant pas le fichier)
PS. Quand tu postes un code, sélectionne le bloc de texte puis cliques sur
Ton programme se fige car à aucun moment tu ne donne la main au gestionnaire d'évènement pour traiter ce que l'utilisateur peut entrer (ex: clic de souris). Du coup il sature le buffer et finit par planter.
Une rustine rapide consiste à mettre avant la ligne Delay(500) une ligne comme
Code : Tout sélectionner
While WaitWindowEvent() : Wend
Delay n'est pas une instruction géniale dans une boucle avec beaucoup d'itérations, elle a vite fait de pomper du temps système.
Regarde aussi les fonctions LSet et Rset qui te permettent de formater facilement une chaine en complétant à droite et à gauche par un caractère au choix sans te préoccuper du nombre de caractères à utiliser.
Je viens de tester le code que tu as donné, sous Linux (Debian 8 avec xfce) et PB 5.42 LTS
Il n'affiche pas la progression (peut être que certaines libs me manquent) et plante aussi si on clique un certain nombre de fois
"Cette fenêtre ne répond pas : il se peut qu'elle soit occupée.
Voulez-vous fermer l'application ?"
Si on met le Delay à 50 au lieu de 500 il ne plante pas, mais c'est parce qu'il a fini avant de saturer le buffer souris
(dans les deux cas, j'avais désactivé le loadimage puisque n'ayant pas le fichier)
PS. Quand tu postes un code, sélectionne le bloc de texte puis cliques sur
Code : Tout sélectionner
:wink:
-
- Messages : 12
- Inscription : mar. 01/juil./2014 9:28
Re: pb affichage textgadget sous windows 10
Merci Marc56 pour ta réponse rapide, dans mon programme je n'ai pas de Delay()
Je l'ai mis dans l' exemple pour que l'on puisse voir l'affichage.
Dans mon programme entre chaque boucle il y a environ 1 minute car les fichiers sont
Gros.
L'utilisateur ne doit surtout pas intervenir la fenêtre est là pour afficher l'avancement du
Téléchargement après l.acquisition mon programme fait beaucoup de calcul la fenêtre est close avant les calcul.
Tout cela marche parfaitement sous Debian8.3.
Je l'ai mis dans l' exemple pour que l'on puisse voir l'affichage.
Dans mon programme entre chaque boucle il y a environ 1 minute car les fichiers sont
Gros.
L'utilisateur ne doit surtout pas intervenir la fenêtre est là pour afficher l'avancement du
Téléchargement après l.acquisition mon programme fait beaucoup de calcul la fenêtre est close avant les calcul.
Tout cela marche parfaitement sous Debian8.3.
Re: pb affichage textgadget sous windows 10
Ah, OK.
J'aurais tendance pour ce type de programme à utiliser un thread (autant s'en servir de nos jours puis qu'on a du multi-taches).
Faire tourner le traitement (chargement) en arrière plan et l'information (progression) au premier plan.
Ainsi tu n'auras aussi plus de sablier puisque la fenêtre d'info captera les évènements utilisateur.
Autre chose. Je vois que tu utilises wget. Tu pourrais utiliser avantageusement ReceiveHTTPFile() intégré à PB
J'aurais tendance pour ce type de programme à utiliser un thread (autant s'en servir de nos jours puis qu'on a du multi-taches).
Faire tourner le traitement (chargement) en arrière plan et l'information (progression) au premier plan.
Ainsi tu n'auras aussi plus de sablier puisque la fenêtre d'info captera les évènements utilisateur.
Autre chose. Je vois que tu utilises wget. Tu pourrais utiliser avantageusement ReceiveHTTPFile() intégré à PB
Re: pb affichage textgadget sous windows 10
Je n'ai pas trop pigé ce que tu cherches à faire mais avec un timer ça peut être une solution pour l'incrémentation.
Je rejoints Marc56 pour l'utilisation d'un thread pour ce qui est du chargement en arrière plan. Sauf si tes fichiers sont très légers
Code : Tout sélectionner
;Test affichage Textgadget dans une boucle
; 29/06/2016 DM
Define.w i , Nbt
#WindowWidth = 350
#WindowHeight =180
If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight," TELECHARGEMENT GFS NOAA " ,0)
TextGadget(1, 70, 50, 220, 40, " Acquisition en cours :",#PB_Text_Border|#PB_Text_Center)
TextGadget(4, 80, 130, 200, 30, "CETTE FENETRE ",#PB_Text_Center)
SetGadgetColor(4, #PB_Gadget_FrontColor, $FF00FF)
TextGadget(5, 80, 150, 200, 30, "SE FERMERA A LA FIN DU TRAVAIL !!!",#PB_Text_Center)
SetGadgetColor(5, #PB_Gadget_FrontColor, $FF0000)
If LoadImage(0,"C:/METEO/Ballon/Data/ballon2.png")
ButtonImageGadget(7, 0, 0, 70, 67, ImageID(0))
EndIf
Nbt = 180
StickyWindow(0, #True)
AddWindowTimer(0, 10, 500)
Repeat
Event = WaitWindowEvent()
Select event
Case #PB_Event_Timer
Afnb$=Str(compte)+"/"+Str(Nbt)
SetGadgetText(1, " Acquisition en cours : "+Afnb$)
Select nbt
Case 0 To 9
id$="00"+Str(compte)
id2$="0"+Str(compte)
Case 10 To 99
id$="0"+Str(compte)
id2$=Str(compte)
Case 100 To 200
id$=Str(compte)
id2$=id$
EndSelect
compte + 3
Fichier$= Pth1$+"Gfs"+Hr2$+"_Europe.grb"
;urlok$=Chr(34)+"http://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?file=..................................
cmd$="wget -nv -O "
;RunProgram (cmd$,Param$,"",#PB_Program_Wait|#PB_Program_Hide)
If compte > 180
RemoveWindowTimer(0, 10)
End
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
End
EndIf
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: pb affichage textgadget sous windows 10
Oui, le mieux, c'est d'utiliser un thread.
Il doit être possible de se passer d'un thread en utilisant un timer.
C'est un des rares exemples où on peut utiliser un "WindowEvent()" pour gérer les messages.
On peut utiliser "WaitWindowEvent(1)" la place de "WindowEvent()" mais il faut bien mettre un timer, ici j'ai mis 1ms sinon, la fenêtre ne se ferme qu'après un message windows, comme après avoir bouger la souris par exemple.
Normalement, il faudrait activer l'option thread du compilateur, dans Compilateur\Option du compilateur, dans l'IDE. (bizarrement, ça marche sans...)
Mesa.
Il doit être possible de se passer d'un thread en utilisant un timer.
C'est un des rares exemples où on peut utiliser un "WindowEvent()" pour gérer les messages.
On peut utiliser "WaitWindowEvent(1)" la place de "WindowEvent()" mais il faut bien mettre un timer, ici j'ai mis 1ms sinon, la fenêtre ne se ferme qu'après un message windows, comme après avoir bouger la souris par exemple.
Code : Tout sélectionner
;Test affichage Textgadget dans une boucle
; 29/06/2016 DM
Define.w i , Nbt
#WindowWidth = 350
#WindowHeight =180
Global quit=0 ;<==================================== signal pour quitter
Procedure MaProcedureThread(*Valeur) ; <============== thread
Nbt = 180
For i= 0 To nbt Step 3
Afnb$=Str(i)+"/"+Str(Nbt)
SetGadgetText(1, " Acquisition en cours : "+Afnb$)
Select i
Case 0 To 9
id$="00"+Str(i)
id2$="0"+Str(i)
Case 10 To 99
id$="0"+Str(i)
id2$=Str(i)
Case 100 To 200
id$=Str(i)
id2$=id$
EndSelect
Fichier$= Pth1$+"Gfs"+Hr2$+"_Europe.grb"
;urlok$=Chr(34)+"http://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?file=..................................
cmd$="wget -nv -O "
;RunProgram (cmd$,Param$,"",#PB_Program_Wait|#PB_Program_Hide)
Delay(500)
Next i; La variable '*Valeur' contiendra 23
quit=1
EndProcedure
If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight," TELECHARGEMENT GFS NOAA " ,#PB_Window_Tool)
SmartWindowRefresh(0, #True ) ; <========= pourquoi pas ;)
TextGadget(1, 70, 50, 220, 40, " Acquisition en cours :",#PB_Text_Border|#PB_Text_Center)
TextGadget(4, 80, 130, 200, 30, "CETTE FENETRE ",#PB_Text_Center)
SetGadgetColor(4, #PB_Gadget_FrontColor, $FF00FF)
TextGadget(5, 80, 150, 200, 30, "SE FERMERA A LA FIN DU TRAVAIL !!!",#PB_Text_Center)
SetGadgetColor(5, #PB_Gadget_FrontColor, $FF0000)
If LoadImage(0,"C:/METEO/Ballon/Data/ballon2.png")
ButtonImageGadget(7, 0, 0, 70, 67, ImageID(0))
EndIf
StickyWindow(0, #True)
EndIf
monthread=CreateThread(@MaProcedureThread(), 0); <==========
If quit=1; <==========
KillThread(monthread); <==========
CloseWindow(0); <==========
EndIf; <==========
Repeat
WindowEvent();WaitWindowEvent(1); <========== au choix
Until quit=1
End
Mesa.
-
- Messages : 12
- Inscription : mar. 01/juil./2014 9:28
Re: pb affichage textgadget sous windows 10
Bonsoir,
Merci pour vos bons conseils, j'ai modifié ma programmation, avec un thread cela fonctionne bien.
J'ai l'habitude d'utiliser wget car je programme encore souvent en c et fortran qui est toujours utilisé dans
la programmation scientifique.
Bonne soirée à tous.
Merci pour vos bons conseils, j'ai modifié ma programmation, avec un thread cela fonctionne bien.
J'ai l'habitude d'utiliser wget car je programme encore souvent en c et fortran qui est toujours utilisé dans
la programmation scientifique.
Bonne soirée à tous.