none
Animation d'un champs texte RRS feed

  • Question

  • Je souhaiterai qu'à l'ouverture de mon formulaire le champs "Texte0" s'élargisse d'une certaine valeur.
    Je ne sais pas comment adapter le code ci-dessous qui me permet de déplacer ce champ vers la droite d'une certaine valeur :

    Private Sub Form_Load()
        Dim lngIndice As Long
        Dim lngPosition As Long
        Dim sngDurée As Single
     
        lngPosition = Me!Texte0.Left
        sngDurée = 1 / 20
     
        For lngIndice = 1 To 10
            Attente sngDurée
            Me!Texte0.Left = lngPosition + lngIndice * 567 / 10
        Next
     
    End Sub
     
    Sub Attente(prmsngDurée As Single)
        Dim sngArrêt As Single
     
        sngArrêt = Timer + prmsngDurée
        Do Until Timer > sngArrêt
            DoEvents
        Loop
    End Sub
    Une petite demande supplémentaire : j'ai également constaté que l'animation du contrôle sur chargement du form ne se voit uniquement lorsque l'on passe de l'état du formulaire mode création à aperçu mais lorsque l'on ouvre directement le formulaire sans passé par son son état en mode création j'ai l'impression que l'animation se fait le temps du chargement du form et donc lorsqu'il est complètement ouvert on ne voit pas le champ bouger.
    Faut-il mettre une temporisation supplémentaire qui laisse le temps au form de se charger et ensuite de laisser le code réaliser l'animation ?

    En vous remerciant pour votre aide,
    Franck


    mardi 6 mai 2014 19:40

Réponses

Toutes les réponses

  • Bonjour

    Pour la première question je vous suggère d'utiliser la propriété Width d'un TextBox.
    Me!Texte0.Width ....
    Utiliser une temporisation sera la solution la plus simple.

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 9 mai 2014 10:17
  • Bonsoir, Merci beaucoup pour votre réponse. Je ne suis pas assez expert pour pouvoir mettre en application la fonction que vous m'avez donné. Pourriez-vous la transposée dans le code que j'ai joint qui permet de déplacer l'ensemble du champ ? En vous remerciant pour votre aide, Franck
    vendredi 9 mai 2014 23:12
  • Voici :

    Dim lngIndice As Long
       
    Dim lngWidth As Long
       
    Dim sngDurée As Single

       
    lngWidth = Me!Texte0.Width
        sngDur
    ée = 1 / 20

       
    For lngIndice = 1 To 10
            Attente sngDur
    ée
           
    Me!Texte0.Width= lngWidth + lngIndice * 567 / 10
       
    Next

     Bien cordialement, 

    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 12 mai 2014 11:30
  • Bonjour Aurel et Franck,

    Oui, il suffisait de remplacer le Left par le Width mais ce n'est pas suffsant.

    En effet, cette procédue telle qu'écrite ainsi ne permet pas d'obtenir l'effet si l'on ouvre le formulaire mais bel et bien si l'on passe de Mode création à Mode formulaire.

    Une solution consiste donc à externaliser le bloc :

    Public Sub OuvrirFormEtElargir()
    Const NOM_FORM                                         As String = "Formulaire1"
    
        If CurrentProject.AllForms(NOM_FORM).IsLoaded Then
            DoCmd.Close acForm, NOM_FORM
        End If
        DoCmd.OpenForm NOM_FORM, acNormal
        DoEvents
        ElargirTexte Form_Formulaire1, "Texte0", 200
    End Sub
    
    Private Sub ElargirTexte(ByRef NomForm As Form, ByRef NomControle As String, ByVal NombreIteration As Single)
    Dim lngIndice                                          As Long
    Dim lngPosition                                        As Long
    Dim sngDuree                                           As Single
    
    Dim oCtl                                               As Control
    
        Set oCtl = NomForm.Controls(NomControle)
        lngPosition = oCtl.Left
        sngDuree = 1 / 20
    
        For lngIndice = 1 To NombreIteration
            Attente sngDuree
            oCtl.Width = (lngPosition + lngIndice * 567) / 15
        Next
        Set oCtl = Nothing
    End Sub
    
    Private Sub Attente(ByVal Duree As Single)
    Dim sngArret                                           As Single
    
        sngArret = Timer + Duree
        Do Until Timer > sngArret
            DoEvents
        Loop
    End Sub

    Copiez ce bloc dans un module, mettez les valeurs appropriées et appuyez sur F5.

    Il reste toutefois à définir le max de la largeur pour éviter les superpositions.


    Argy

    lundi 12 mai 2014 12:17
    Modérateur
  • Bonsoir,

    Merci beaucoup Aurel et Argy.

    Comment dois-faire pour que le champ Texte0 se déplace lors de l'ouverture du Formulaire1 ?

    Insérer ce code sur ouverture du formulaire ?

    Pardonnez-moi je suis vraiment novice en VBA.

    Merci pour votre aide,

    Franck

    lundi 12 mai 2014 17:40
  • Humm, je ne comprends plus...

    Initialement, vous écriviez «Je souhaiterai qu'à l'ouverture de mon formulaire le champs "Texte0" s'élargisse d'une certaine valeur.»

    Et là, vous voulez qu'il se déplace de nouveau ?

    Expliquez-nous réellement ce que vous voulez faire, pourquoi vous souhaitez le faire et quelle est la finalité de votre conception car sinon, nous allons tourner en rond autour de nombreuses conversations inutiles.


    Argy

    mardi 13 mai 2014 06:51
    Modérateur
  • Bonjour, Pardonnez-moi si je me suis mal exprimé. En fait je voudrai que cette fonction d'élargissement du Controle ou d'un champ se lance automatiquement lorsque le formulaire s'ouvre sans être obligé d'ouvrir le module dans lequel est stocké le code que vous avez écrit et d'appuyer sur F5. Merci pour votre aide

    Franck


    mardi 13 mai 2014 10:59
  • Bien il faut bien appeler une procédure pour ouvrir le formulaire, non ?

    Quelle est cette procédure pour vous ?

    Si vous souhaitez ouvrir le formulaire depuis la fenêtre de la base de données où se trouvent tous les objets, ce code ne sera pas opérationnel. Ce que je vous ai écrit est prévu pour ouvrir un formulaire précis depuis un autre ou bien depuis une macro.

    Pour que ce que vous souhaitez fonctionne sur un formulaire qui est ouvert manuellement, il faut modifier la procédure. Le code en est alors ultra simplifié ; il est sous la forme suivante :

    Option Compare Database
    Option Explicit
    
    Private Sub Form_Load()
    'Définit l'interval de temps
        Me.TimerInterval = 20
    End Sub
    
    Private Sub Form_Timer()
    Static I                                               As Long
        I = I + 1
        Texte0.Width = (Texte0.Left + I * 567) / 15
        DoEvents
        If I > 100 Then
            Me.TimerInterval = 0
        End If
    End Sub
    

    Recopiez ce bloc de code dans la classe du formulaire concerné.

    Refermez le formulaire puis ouvrez-le.


    Argy

    mardi 13 mai 2014 11:53
    Modérateur
  • Bonsoir,

    Merci beaucoup ça fonctionne très bien et je pense avoir compris la logique du code :-)
    Quel serait l'équivalent de Width pour la hauteur ?

    Merci à vous,

    Franck


    Franck

    mardi 13 mai 2014 21:38
  • Bien tout simplement Height...

    Texte0.Height= (Texte0.Top + I * 567) / 15



    Argy

    mercredi 14 mai 2014 14:32
    Modérateur
  • Merci beaucoup ! Bien à vous Franck

    Franck

    • Marqué comme réponse franckb74 mercredi 14 mai 2014 22:16
    mercredi 14 mai 2014 22:16