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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Necro
Messages : 72
Inscription : mar. 23/sept./2008 16:32

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

Message 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?
Dernière modification par Necro le dim. 02/nov./2008 20:08, modifié 1 fois.
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message 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.
Necro
Messages : 72
Inscription : mar. 23/sept./2008 16:32

Message par Necro »

Comment on utilise ta fonction API s'il te plaît? ^^.....
Anonyme

Message 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))
Necro
Messages : 72
Inscription : mar. 23/sept./2008 16:32

Message 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_
Anonyme

Message par Anonyme »

ta une démo de pb ?
Necro
Messages : 72
Inscription : mar. 23/sept./2008 16:32

Message par Necro »

J'suis sous jaPBe
Anonyme

Message par Anonyme »

Peut pas t'aider , je suis sous linux :/
Necro
Messages : 72
Inscription : mar. 23/sept./2008 16:32

Message par Necro »

xD , ok merci quand même, mais j'ai utilisé les thread sa marche super bien!
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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 ?
~~~~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
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

C'est ma faute, j'ai inversé en recopiant, c'est :

Code : Tout sélectionner

UpdateWindow_(WindowID(#MaFenetre))
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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:
~~~~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
Necro
Messages : 72
Inscription : mar. 23/sept./2008 16:32

Message 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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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
~~~~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
Necro
Messages : 72
Inscription : mar. 23/sept./2008 16:32

Message 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.
Répondre