Page 1 sur 1

[resolu] Message clignotant

Publié : mar. 08/juil./2008 9:35
par Ar-S
Salut,

je voudrais faire clignoter un texte 3 fois pour indiquer que l'utilisateur a la dernière version de mon logiciel. j'utilise un simple For/Next mais rien ne se passe, la fenêtre freeze j'usquà la fin du "delay"

#AFFICHE est un StringGadget

Pourquoi cette simple boucle ne fonctionne pas ?

Code : Tout sélectionner

      For i=1 To 3
        SetGadgetText(#AFFICHE,"")
        Delay(1000)
        SetGadgetText(#AFFICHE,"Vous avez déjà la dernière version")
        Delay(1000)
       Next i
    EndIf

:?

Publié : mar. 08/juil./2008 9:37
par wolfjeremy
Ben si ta mis ça dans ton programme sans utiliser de thread c'est normal que ça freeze... vu que tu met ton programme complet en pause avec les delay :?
Donc il faut que tu utilise un thread pour ta boucle for/next :wink:

Publié : mar. 08/juil./2008 9:50
par Ar-S
Ah les thread ! c'est vraiment quelque chose qui me fout dans l'impasse.

Si je passe en procédure mon code :

Code : Tout sélectionner

Procedure Clignote(parametre$)
  
  For i=1 To 3
    SetGadgetText(#AFFICHE,"")
    Delay(1000)
    SetGadgetText(#AFFICHE,parametre$)
    Delay(1000)
  Next i
  
EndProcedure
Comment dois-l'appeler en thread après ??

Si je mets :

Code : Tout sélectionner

     CreateThread(@Clignote(),153)
(le 153 est tiré de l'exemple de la doc mais à quoi sert-il...)
Mon prog se ferme casi illico !

Publié : mar. 08/juil./2008 10:01
par Progi1984
Le paramètre pour un thread ne peut être qu'une variable de type long.

Ta procédure:

Code : Tout sélectionner

Procedure Clignote(param.l)
 
  For i=1 To 3
    SetGadgetText(#AFFICHE,"")
    Delay(1000)
    SetGadgetText(#AFFICHE, peeks(param))
    Delay(1000)
  Next i
 
EndProcedure
Et le code

Code : Tout sélectionner

CreateThread(@Clignote(),@"Test")
Ca devrait etre fonctionnel.

Publié : mar. 08/juil./2008 10:03
par Ar-S
Je teste ça de suite et je file au boulot.
Merci de votre aide.
Je vous confirme que ça marche d'ici ce soir.

----edit-----

ça marche au poil !!
je vais pouvoir me faire vraiment plaisir grace à ça.
Merci encore

Publié : mar. 08/juil./2008 11:26
par Octavius
La commande UpdateWindow_(WindowID(#MaFenetre)) permet de forcer la mise à jour de la fenêtre, tu aurais pu l'utiliser avant chaque Delay(1000) et ça aurait fait clignoter ton texte sans avoir recours aux threads, mais ça aurait quand même geler le reste du programme en attendant que ta boucle soit finit (je parle évidemment de ton code initial sur le premier post).

Publié : mer. 09/juil./2008 8:42
par Ar-S
Merci pour l'info Octavius, mais j'ai vraiment souvent été bloqué avec les Threads, ça me permet donc d'un peu mieux piger leurs fonctionnement.
:D