Page 1 sur 1

[ Résolu ] Autre fonction que Delay()?....

Publié : dim. 02/nov./2008 18:38
par Necro
Bonjour à tous,

J'aimerais savoir s'il existe une autre fonction que delay pour attendre l'exécution d'une procédure ou d'un script par exemple...

Car delay bloque tout le programme et c'est génant si je veux faire par exemple :

Code : Tout sélectionner

AddGadgetItem(#maliste, -1, "objet 1")
delay(100)
AddGadgetItem(#maliste, -1, "objet 2")
delay(100)
AddGadgetItem(#maliste, -1, "objet 3")
Et bien quand je vais lancer le logiciel, il va se bloquer et m'afficher directement Objet 3.

Auriez-vous une autre fonction ou une astuce à me donner?

Publié : dim. 02/nov./2008 19:05
par Octavius
- Pour forcer l'affichage au fur et à mesure tu peux utiliser la fonction API WindowUpdate_(WindowID(#MaFenetre)) avant chaque Delay().

- Sinon si tu veux pouvoir faire d'autres opérations en même temps il va falloir utiliser des Threads.

Publié : dim. 02/nov./2008 19:20
par Necro
Comment on utilise ta fonction API s'il te plaît? ^^.....

Publié : dim. 02/nov./2008 19:21
par Anonyme
Bah oui , ta pas de rafraîchissement de ta fenêtre , donc c'est normal si tu voit directement l'objet n°3 :D

Code : Tout sélectionner

WindowUpdate_(WindowID(#MaFenetre))

Publié : dim. 02/nov./2008 19:24
par Necro
Sa me dit que c'est pas une fonction ou un array ou je sais plus quoi, en gros il reconnaît pas la fonction WindowUpdate_

Publié : dim. 02/nov./2008 19:31
par Anonyme
ta une démo de pb ?

Publié : dim. 02/nov./2008 19:32
par Necro
J'suis sous jaPBe

Publié : dim. 02/nov./2008 19:50
par Anonyme
Peut pas t'aider , je suis sous linux :/

Publié : dim. 02/nov./2008 20:08
par Necro
xD , ok merci quand même, mais j'ai utilisé les thread sa marche super bien!

Publié : dim. 02/nov./2008 23:06
par Ar-S
Ouai les thread servent à ça, par contre octavius, j'ai essayé l'API WindowUpdate_(WindowID(#fenetre)) et j'ai un WindowUpdate_ is not a function etc... bizarre ?

Publié : dim. 02/nov./2008 23:13
par Octavius
C'est ma faute, j'ai inversé en recopiant, c'est :

Code : Tout sélectionner

UpdateWindow_(WindowID(#MaFenetre))

Publié : dim. 02/nov./2008 23:36
par Ar-S
Octavius a écrit :C'est ma faute, j'ai inversé en recopiant, c'est :

Code : Tout sélectionner

UpdateWindow_(WindowID(#MaFenetre))
Effectivement, ça marche mieux..

Code : Tout sélectionner

Enumeration
  #Window_0
  #Button_0
  #Button_3
  #Button_4
EndEnumeration


Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 618, 378, 266, 151, "Window_0", #PB_Window_SystemMenu|#PB_Window_TitleBar)
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_0, 0, 0, 265, 50, "Gadget_0")
      Delay(1000)
    EndIf
    UpdateWindow_(WindowID(#Window_0))
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_3, 0, 50, 265, 50, "Gadget_1")
      Delay(1000)
    EndIf
    UpdateWindow_(WindowID(#Window_0))
    
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_4, 0, 100, 265, 50, "Gadget_2")
      Delay(1000)
    EndIf
   UpdateWindow_(WindowID(#Window_0))
  EndIf
EndProcedure

OpenWindow_Window_0()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
ForEver
necro si tu as géré ça avec les thread, tu pourrais montrer ton exemple ?
L'utilisation des threads restent cauchemardesque pour moi :roll:

Publié : lun. 03/nov./2008 9:40
par Necro
C'est très simple...

J'te montre (j'fais le fiero xD) :

Sa marche bien mon code mais je suis pas sûr que ce soit exactement sa qu'il faut mettre :

Tu crée ta procedure qui va être considérée comme une Thread (En dehors de la boucle de l'Event)

Code : Tout sélectionner

Procedure affichermessage(n)

      Repeat

            MessageRequester("Info", "Se message va réapparaitre dans 5 secondes !")

            Delay(5000)

      Forever

EndProcedure
Maintenant tu crée ton THREAD en dehors de ta boucle des evenements :

Code : Tout sélectionner

CreateThread(@affichermessage(), 0)
Voilà, j'espère avoir pu t'aider :s

Publié : lun. 03/nov./2008 11:30
par Ar-S
Hihi merci de me donner cet exemple même s'il resemble à celui de la doc :D
ma question est :

Ton
CreateThread(@affichermessage(), 0)

- Le '0' c'est parceque c'est le 1er Thread ?
- Tu dis qu'il faut le mettre en dehaors de la boucle Event, mais alors comment l'appelles tu lorsque tu veux par exemple faire clignoter un message pendant que ton soft bosse.
Par exemple, le programme se met à copier un gros fichier, pendant ce temps, la fenêtre est "freezé" donc je veux qu'un "Please Wait" s'affiche pendant ce temps.

Faut-il mettre la procédure de copy en thread ou mon messagerequester.
Et comment l'appeler si le Creat est en dehors de la boucle.. ?

Blup je me noie

Publié : lun. 03/nov./2008 11:33
par Necro
xD, le "0" du CreateThread(@affichermessage(), 0) c'est le n de la procedure affichermessage().

Ensuite je sais pas si t'es forcé de le mettre hors de ta boucle j'ai jamais essayé, mais fais des tests, pour ce que tu m'a demandé je ne pense pas être en mesure de te repondre, je suis désolé :s, mais j'te dit : fais des tests, trafique un peu tout, et sa devrait aller xD

Cordialement,

Necro.