OVH Cloud OVH Cloud

Définir la taille des zones de texte

5 réponses
Avatar
Loutsky
Bonjour,

Ce code me permet de tracer des traits =E0 gauche de chaque zone de
texte de la section d=E9tail :

Code :

For Each MonControl In D=E9tail.Controls
X1 =3D [MonControl].Left
Me.Line (X1, 0)-(X1, D=E9tail.Height)


La partie suivante me permet de tracer un trait plus grand pour toutes
les zones de texte de la ligne au cas ou une zone de texte serait plus
grand que le d=E9tail (mes zones de texte et le d=E9tail sont
autoextensibles)

Code :

If ZoneDeTexte1.Height > D=E9tail.Height Then
Me.Line (X1, 0)-(X1, ZoneDeTexte1.Height)
End If
If ZoneDeTexte2.Height > ZoneDeTexte1.Height Then
Me.Line (X1, 0)-(X1, ZoneDeTexte2.Height)
End If
If ZoneDeTexte3.Height > ZoneDeTexte2.Height Then
Me.Line (X1, 0)-(X1, ZoneDeTexte3.Height)
End If
'etc avec toutes les autres zones de texte
Next


Ce que je voudrais, c'est pouvoir mettre ce code dans tous mes =E9tats
et donc faire une boucle sur toutes mes zones de textes pour trouver la
plus grande...
Quand je prends MonControl.height, il me donne la hauteur du contr=F4le
mais pas sa valeur quand celui-ci est plus grand que pr=E9vu
(autoextensible)
J'esp=E8re avoir =E9t=E9 clair.
Quelqu'un saurait comment s'y prendre?

Merci de votre aide.

5 réponses

Avatar
Argyronet
Bonjour,

Jette un oeil sur ce tutoriel:
http://cafeine.developpez.com/access/tutoriel/autoextensible/

Il traite du problème pour les Formulaires, tu dois pouvoir l'adapter à ton
cas pour les états...
!!! => Niveau Avancé / Expert requis...
--
Argy
http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment



Bonjour,

Ce code me permet de tracer des traits à gauche de chaque zone de
texte de la section détail :

Code :

For Each MonControl In Détail.Controls
X1 = [MonControl].Left
Me.Line (X1, 0)-(X1, Détail.Height)


La partie suivante me permet de tracer un trait plus grand pour toutes
les zones de texte de la ligne au cas ou une zone de texte serait plus
grand que le détail (mes zones de texte et le détail sont
autoextensibles)

Code :

If ZoneDeTexte1.Height > Détail.Height Then
Me.Line (X1, 0)-(X1, ZoneDeTexte1.Height)
End If
If ZoneDeTexte2.Height > ZoneDeTexte1.Height Then
Me.Line (X1, 0)-(X1, ZoneDeTexte2.Height)
End If
If ZoneDeTexte3.Height > ZoneDeTexte2.Height Then
Me.Line (X1, 0)-(X1, ZoneDeTexte3.Height)
End If
'etc avec toutes les autres zones de texte
Next


Ce que je voudrais, c'est pouvoir mettre ce code dans tous mes états
et donc faire une boucle sur toutes mes zones de textes pour trouver la
plus grande...
Quand je prends MonControl.height, il me donne la hauteur du contrôle
mais pas sa valeur quand celui-ci est plus grand que prévu
(autoextensible)
J'espère avoir été clair.
Quelqu'un saurait comment s'y prendre?

Merci de votre aide.




Avatar
Loutsky
Merci de ton aide Argyronet,

J'ai regardé le tutoriel..., c'est vrai que c'est du haut niveau mais
je suis pas sûr de devoir m'en servir

Le code que j'ai fait plus haut fonctionne très bien. J'arrive à bien
à avoir la taille de ma zone de texte lorsque celle-ci "s'autoextend".
Ex : Si ZoneDeTexte1 s'autoextend, il me renvoie bien la valeur étendu
et ainsi toute ma ligne aura des traits verticaux de cette longueur.
Mais il n'y a pas moyen de faire une boucle sur toutes mes zones de
texte pour voir quel est la plus grande zone de texte?
Sinon, d'après ce qui expliqué dans le tuto, il faudrais ouvrir un
autre état identique au mien en mode conception pour pouvoir me servir
de ma variable MonControl?
Avatar
Argyronet
Humm non parce que dans ce Tuto est expliqué que la hauteur du texte est
calculée en fonction de sa longueur totale sur un ratio de la taille initiale
du TextBox... C'est justement son but essentiel...
Donc pour ton cas, il faudrait parcourir la collection Texteboxes de ton
état et stocker par exemple dans un tableau à deux dimenssions leur taille de
texte et leur nom... Puis dans un second temps, parcourir le tableau et
sortir l'élément qui a la valeur la plus grande.
De là, il sera possible de procéder à ce que tu veux pour la dite zone de
texte;
--
Argy
http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment



Merci de ton aide Argyronet,

J'ai regardé le tutoriel..., c'est vrai que c'est du haut niveau mais
je suis pas sûr de devoir m'en servir

Le code que j'ai fait plus haut fonctionne très bien. J'arrive à bien
à avoir la taille de ma zone de texte lorsque celle-ci "s'autoextend".
Ex : Si ZoneDeTexte1 s'autoextend, il me renvoie bien la valeur étendu
et ainsi toute ma ligne aura des traits verticaux de cette longueur.
Mais il n'y a pas moyen de faire une boucle sur toutes mes zones de
texte pour voir quel est la plus grande zone de texte?
Sinon, d'après ce qui expliqué dans le tuto, il faudrais ouvrir un
autre état identique au mien en mode conception pour pouvoir me servir
de ma variable MonControl?




Avatar
Loutsky
Merci de ton aide Argronet,
J'ai trouvé la solution :

For Each C In Détail.Controls
X1 = [C].Left
Me.Line (X1, 0)-(X1, Détail.Height)
For Each C1 In Détail.Controls
If C1.Height >= C.Height Then
Me.Line (X1, 0)-(X1, C1.Height)
End If
Next C1
Next C
Avatar
Argyronet
Super...
Tu pourrais peut-être ajouter un truc dans ta boucle comme ça :
For Each C1 In Détail.Controls
If C1.ControlType = acTextBox Then
If C1.Height >= C.Height Then
Me.Line (X1, 0)-(X1, C1.Height)
End If
End If
Next C1
sauf si, bien entendu, tu n'as que des TextBoxes...

--
Argy
http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment



Merci de ton aide Argronet,
J'ai trouvé la solution :

For Each C In Détail.Controls
X1 = [C].Left
Me.Line (X1, 0)-(X1, Détail.Height)
For Each C1 In Détail.Controls
If C1.Height >= C.Height Then
Me.Line (X1, 0)-(X1, C1.Height)
End If
Next C1
Next C