Verrouillé lancer un gif animé pendant un chargement

  • jeudi 16 septembre 2010 15:04
     
     

    Bonjour à tous ...

    Je redécouvre ce forum, et j'ose en profiter pour poser une petite question sur l'utilisation des gifs animés....

    Je sais utiliser un gif animé dans une form avec une OleClass Marchoso...

    ça marche, mais pas comme j'aurais voulu, c'est à dire que l'image bouge (pour faire patienter, but recherché...), mais pas en continu, comme s'il y avait des interruptions pour traiter ce que je demande (chargement de grosses vues...). Ce qui me donne quasiment le même résultat qu'en utilisant un 'thermomètre" qui s'arrête aussi par moments...

    Je voudrais faire afficher un "sablier" ou équivalent (type gif animé), qui "bouge tout seul" pendant le chargement d'un environnement de donnée utilisant des tables distantes, avec un temps de chargement de l'ordre de 20 à 45 secondes (c'est drolement long quand on attend....). Donc je cherche l'instruction qui me permettrait d'"invoquer" l'apparition de ce "sablier" dans la procedure beforeOpentable de l'nvironnement de ma form...

    Est-ce quelqu'un a déjà utilisé une instruction de ce genre, ou existe t'il une façon forcément plus élégante que ce que j'ai osé imaginer ?

    Merci d'avance d'avoir pris le temps de me lire, et éventuellemnt de me répondre.

    Bien foxement

    Thierry

     

     

Toutes les réponses

  • jeudi 16 septembre 2010 17:19
     
     Réponse proposée

    Bonsoir Thierry,

    Je te propose d'essayer avec un AVI, (au lieu du GIF)
    pourrais tu faire un test avec cette classe :
    http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000332

    en quelle version de VFP es tu ?

    Cordialement

    Francis


    VFP MVP
    • Proposé comme réponse Francis Faure lundi 20 septembre 2010 10:48
    •  
  • vendredi 17 septembre 2010 10:12
     
     

    Merci Francis, c'est vraiment un plaisir de te lire !

    J'utilise VFP9 sp2.

    Je teste ta proposition de ce pas

    Merci encore

  • vendredi 17 septembre 2010 14:38
     
     

    Evidemment, ça marche !...

    Mais  :

    mon souci était de lancer le sablier avant le chargement des vues qui se produit AVANT l'init de la form, puisque c'est dans le BeforeOPenTable....N'existe t'il pas une possibilité de lancer une commande RUN qui ferait s'afficher le fichier avi ou gif, avec une cautre commande pour "tuer" le run du fichier lancé quand le chargement s'est terminé ?

    Toout ça pour essayer de calmer les mauvaises humeurs des utilisateurs impatients ...

  • lundi 20 septembre 2010 10:48
     
     

    Bonjour Thierry,

    Qu'est ce qui t'empeche de lancer un formulaire tiers d'attente au début de ton traitement, contenant un avi et de releaser en fin de traitement en debut de ton formulaire ?

    Cordialement

    Francis


    VFP MVP
  • lundi 20 septembre 2010 11:19
     
     

    Cher Francis,

    Très bonne idée !

    Mais : comment "informer" le formulaire tiers que j'ai fini de charger mes tables ?

    J'ai fait dans le passé un truc de ce genre en mettant un drapeau dans une table, et en testant la valeur du drapeau à intervalle régulier...

    Suis dans le bon chemin, ou y a t'il plus simple ?

    Cordialement

    Thierry

  • lundi 20 septembre 2010 13:39
     
     Réponse proposée

    Bonjour Thierry

    Il y a plusieurs manières (comme toujours en vfp ;)

    Personnellement je ferai:
    au début un o=createobject() sur mon formulaire d'attente en classlib
    et en fin un o.release()

    mais tu peux tester simplement de faire un

     


    DO FORM attente.scx && form "non modal"

    =INKEY(6) && traitement long

    RELEASE WINDOWS FormAttente && 'FormAttente' est le "Name" de la form attente

     


    Cordialement

    Francis

     

    • Proposé comme réponse Michel Lévy jeudi 23 septembre 2010 12:11
    •  
  • mardi 21 septembre 2010 09:18
     
     

    Bonjour Francis,

    Voici la solution que j'ai commis, avec l'aide de tes conseils :

    *** dans le beforeOPenTables de ma Form "mère" :
    local l_drap,l_alias
    l_alias= SYS(2015)
    l_drap=addbs(sys(2023))+"temp\"+l_alias
    CREATE  TABLE  (l_drap) FREE  (c_envir l)
    SELECT (l_alias)
    APPEND blank
    REPLACE c_envir WITH .f.
    USE
    *** je ferme, sinon ouverture exclusive  ....
    USE (l_drap) ALIAS t_drap SHARED IN 0 && maintenant, le fichier est partagé

    DO FORM f_frm\frm_attente.scx WITH l_drap && lancement de ma form d'attente
    Wait "chargement en cours ....." Window Nowait
    =INKEY(6)
    ***
    *-> ouverture des bases, des tables, chargement du dataenvironment de la form

     

    *** dans l'init de ma form mère :

    ***** fermons le sablier ****
    WAIT "chargement terminé !" WINDOW nowait
    SELECT t_drap
    REPLACE c_envir WITH .t.
    USE
    ---------------------------
    * dans ma form d'attente
    * j'ai mis un objet Shape (shapeAvi1), un objet container (bcontainer1)
    * un objet timer (timer1, interval à 2000)

    *init()
    Parameters f_drap
    Use (f_drap) Alias t_drap In 0 Shared
    Set Procedure To f_prg\classeAvi Additive
    With Thisform
     .shapeAvi1.Visible=.T.
     .AddObject("oAvi1","AVI")
     .oAvi1.playAvi(Thisform.shapeAvi1,"c:\bitmaps\avi\findfile.avi")
     .bcontainer1.SetFocus()
    Endwith
    ******
    *** dans le setfocus de mon container :
    thisform.Visible=.t.
    ThisForm.Btimer1.Enabled=.t.

    *** dans la méthode timer() de mon objet btimer1
    Select t_drap
    If c_envir
     Thisform.Release()
    Endif

    AU TOTAL  :
    ça marche : l'écran d'attente s'allume, l'AVI bouge pendant 3 secondes, s'arrête (???), on voit
    le chargement s'écouler dans la bande système au bas de l'écran,
    et puis l'écran d'attente disparait, laissant la main pour la suite dans ma form principale

    Je suis vraiment mari de ne pas obtenir un affichage continu de l'AVI !

    Merci encore pour le coup de main, ça me fait vraiment plaisir de retrouver  un contact dans un forum sur VFP

    Bonne journée

    Thierry

  • mardi 21 septembre 2010 12:15
     
     

    Bonjour Thierry,

    je vois dans ton source que tu a repris le "inkey(6)" ce n'était pas a reprendre : c'était pour illustrer un traitement de 6 secondes...

    je vois dans ton source le traitement d'un timer sur une variable cela me semble bien compliqué,
    as tu essayé le do form
    release windows que je t'ai proposé ?

    Cordialement

    Francis


    VFP MVP
  • mardi 21 septembre 2010 13:04
     
     

    Cher Francis,

    Merci mille fois pour ton aide.

    En effet le <do form   ... release window ...> marche NICKEL, sans avoir besoi d'attaquer une variable par timer etc....

    Mais, ça marche ENCORE MIEUX avec inkey(1), car sans cette instruction, la form d'attente reste transparente !!!!

    Avec le inkey(1), miracle, on voit le fichier AVI s'afficher, quoique de façon incomplète. Mais l'utilisateur a compris qu'il se passe quelquechose, et qu'il faut ATTENDRE sagement.

    Je ne suis pas sur de comprendre le pourquoi du comment, mais j'ai un résultat qui me satisfait.

     

    Merci encore

    Thierry