Meilleur auteur de réponses
Animation d'un champs texte

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
- Modifié franckb74 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. -
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
-
Voici :
Dim lngIndice As Long
Bien cordialement,
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
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. -
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
-
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
- Proposé comme réponse ArgyronetModerator mardi 13 mai 2014 06:47
-
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
-
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
- Modifié franckb74 mardi 13 mai 2014 11:01
-
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
-
-
-