OVH Cloud OVH Cloud

VB6 TextBox

25 réponses
Avatar
Armando RODRIGUES
Bonjour,

est il possible d'auto-redimensionner un TextBox en fonction de l'évolution
du contenu ?

Merci pour vos réponses.

10 réponses

1 2 3
Avatar
Steph
David wrote:

Vu votre statut de MVP votre réaction est inappropriée.



"MVP" n'est absolument pas un "statut" :-)
C'est un attrape-nigaud inventé par MS pour réduire les budgets de
support technique, en faisant croire à des newbies qu'ils sont des
"méga-pros" en cirant les chaussures et flattant l'ego pour inciter à
participer. Et ça marche...
(et je sais de quoi je parle, puisqu'ils m'avaient proposé, mais ayant
assez de recul et d'expérience et voyant le tas de nuls qu'il y a dans
ce programme, je ne suis pas tombé dans le panneau.)
Il y a même des MVP "jeux vidéo", MSN, .... c'est dire le
"Professionalisme" :-)))
Avatar
bahn po
Armando RODRIGUES avait prétendu :
La propriété AutoSize d'un contrôle Label, c'est ce que j'utilise
actuellement mais comme je disais plus haut ça manque de précision et en plus
si j'efface des caractères le contrôle TextBox ne diminue pas.



As-tu fixé la propriété Alignement de text1 à RightJustify ?

J'ai testé ce petit bout de code (c'est la même chose que ce que
propose Jacques) mais avec le +255 qui donne un espace supplémentaire
au text1 de façon à ne pas masquer un caractère. Fonctionne très bien.



Private Sub Form_Load()
Label1.Caption = ""
Text1 = ""
Text1.Width = Label1.Width
End Sub

Private Sub Text1_Change()
Label1.Caption = Text1
Text1.Width = Label1.Width + 255
End Sub
Avatar
Jacques93
Bonjour bahn po,
bahn po a écrit :
Armando RODRIGUES avait prétendu :
La propriété AutoSize d'un contrôle Label, c'est ce que j'utilise
actuellement mais comme je disais plus haut ça manque de précision et
en plus si j'efface des caractères le contrôle TextBox ne diminue pas.



As-tu fixé la propriété Alignement de text1 à RightJustify ?

J'ai testé ce petit bout de code (c'est la même chose que ce que propose
Jacques) mais avec le +255 qui donne un espace supplémentaire au text1
de façon à ne pas masquer un caractère. Fonctionne très bien.



Private Sub Form_Load()
Label1.Caption = ""
Text1 = ""
Text1.Width = Label1.Width
End Sub

Private Sub Text1_Change()
Label1.Caption = Text1
Text1.Width = Label1.Width + 255
End Sub




Il me semble que l'espace supplémentaire nécessaire que tu indiques est
en partie lié aux propriétés Appearence (3D par défaut) et BorderStyle
(Fixed Single par défaut). La taille du TextBox inclut sa bordure, ce
qui réduit l'espace pour son contenu.

Un TextBox avec Appearence = Flat et BorderStyle = None (cad comme un
Label) a moins tendance à tronquer des caractères.

Travaillant actuellement sous Vista avec un .manifest, je n'ai déjà plus
l'effet 3D, ce qui réduit sensiblement ce comportement, que je n'avais
pas noté (ma vue baisse :-( ).

Une solution de contournement ne serait t-il pas d'appliquer au contrôle
Label les mêmes propriétés Appearence et BorderStyle que le TextBox que
l'on veut ajuster ?

--

Cordialement,

Jacques.
Avatar
parci
Jacques93 a écrit :
Bonjour Armando RODRIGUES,
Armando RODRIGUES a écrit :
Bonjour,

est il possible d'auto-redimensionner un TextBox en fonction de
l'évolution du contenu ?




Quelques pistes :

1 - Utiliser le propriété AutoSize d'un contrôle Label caché
' --------------------------------------------------------
Private Sub Form_Load()
With Me.Label1
.Visible = False
.Font = Me.Text1.Font
.Font.Size = Me.Text1.Font.Size
.Font.Bold = Me.Text1.Font.Bold
.Font.Italic = Me.Text1.Font.Italic
End With
End Sub

Private Sub Text1_Change()
Me.Label1.Caption = Me.Text1.Text
Me.Text1.Width = Me.Label1.Width
Me.Text1.Height = Me.Label1.Height
End Sub

' --------------------------------------------------------
2 - ou bien utiliser l'API 'GetTextExtentPoint32'

<http://msdn.microsoft.com/en-us/library/dd144938(VS.85).aspx>

' --------------------------------------------------------
Private Type SIZEL
cx As Long
cy As Long
End Type

Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias _
"GetTextExtentPoint32A" ( _
ByVal hdc As Long, _
ByVal lpsz As String, _
ByVal cbString As Long, _
lpSize As SIZEL) As Long

Private Sub Text1_Change()
Dim lResult As Long
Dim sz As SIZEL

lResult = GetTextExtentPoint32(Me.hdc, Me.Text1.Text, _
Len(Me.Text1.Text), sz)
Me.Text1.Width = sz.cx * Screen.TwipsPerPixelX
Me.Text1.Height = sz.cy * Screen.TwipsPerPixelY
Fin:
End Sub

' --------------------------------------------------------

Cette API nécessitant un hDC, (dans l'exemple précedent, celui de la
feuille, mais on pourrait aussi utiliser un PictureBox) il faut que la
police et les attributs du hDC soient identiques à ceux du Textbox.

3 - ou se passer de l'API
Mais les contrôles VB disposant d'un hDC (Form, PictureBox, Printer)
proposent également les propriétés TextWidth et TextHeight qui renvoient
les mêmes informations que l'API; la seule différence tient au fait que
l'API renvoie des pixels, et les propriétés TextWidth et TextHeight des
Twips. L'utilisation de l'API n'est donc pas indispensable.



C'est exact et un test le montre facilement d'ailleurs. Mais si ça
semble correct pour la hauteur, pour la largeur ça dépend de la taille
de la police (et ça ne fonctionne vraiment bien qu'avec une taille de 8
ou 10). Mais je ne doute pas que Jean-Pierre et d'autres nous expliquent
comment le faire professionnellement.
Avatar
Armando RODRIGUES
Merci les gags, toutes ces infos m'ont bien aidait et je dois avouer, ça
marche assez bien. Toutes fois, j'ai encore un petit problème à régler et
pour cela faudrait que je puisse connaitre le nombres de pixels qui utilise
un caractère d'une certaine police à écran. Existe il un moyen ? merci
encore.
Avatar
Fran
On 3月2日, 午後7:03, "Armando RODRIGUES" <arto. wrote:
Merci les gags, toutes ces infos m'ont bien aidait et je dois avouer, Ã §a
marche assez bien. Toutes fois, j'ai encore un petit problème à régler et
pour cela faudrait que je puisse connaitre le nombres de pixels qui utili se
un caractère d'une certaine police à écran. Existe il un m oyen ? merci
encore.



Hello,

Si je puis me permettre, une relecture approfondie (i.e. en consultant
la documentation afférente) des posts précédents serait util e! Un post
précédent de Jacques93 indique comment obtenir la taille d'un tex te
avec différentes méthodes (et notament TextWidth -
http://msdn.microsoft.com/en-us/library/aa267168(VS.60).aspx - qui n'a
pas besoin de Declare pour se rendre "pro"). En particulier, si ce
texte est composé de 1 caratère, la taille peut en être conn ue
(moyennant éventuellement l'usage des fonctions de scaling pour le
repère choisi et de la propriété Font pour définir la p olice de
caractères en cours).

Cela étant il faut se rendre compte qu'un caractère dans deux
situations (comprendre texte, options de rendu du texte, etc.)
différentes peut occuper un espace très différent. Un exempl e simple
est le f seul ou dans ff avec la ligature appropriée. D'autres part,
tous les caractères ne sont pas forcément mis côte à c ôte dans le
texte, et il s'agit donc d'une assez mauvaise estimation de la taille
d'un caractère dans le texte (e.g. http://msdn.microsoft.com/en-us/lib rary/dd368048(VS.85).aspx
). Une presque exception consiste en les polices à empatement fixe,
mais là encore on peut imaginer des caractère n'occupant de l'esp ace
que sur le caractère le précédente (e.g. symboles diacritiqu es).

En conclusion, en appliquant sur un caractère la même méthod e que sur
un texte, on peut effectivement un espacement en nombre de pixels
"correspondant" vaguement à un caractère. Cette correspondance n' est
correcte que quand le caractère est utilisé seul.

François
Avatar
Jacques93
Bonjour François Picalausa,
François Picalausa a écrit :
On 3月2日, 午後7:03, "Armando RODRIGUES" wrote:
Merci les gags, toutes ces infos m'ont bien aidait et je dois avouer, ça
marche assez bien. Toutes fois, j'ai encore un petit problème à régler et
pour cela faudrait que je puisse connaitre le nombres de pixels qui utilise
un caractère d'une certaine police à écran. Existe il un moyen ? merci
encore.



Hello,

Si je puis me permettre, une relecture approfondie (i.e. en consultant
la documentation afférente) des posts précédents serait utile! Un post
précédent de Jacques93 indique comment obtenir la taille d'un texte
avec différentes méthodes (et notament TextWidth -
http://msdn.microsoft.com/en-us/library/aa267168(VS.60).aspx - qui n'a
pas besoin de Declare pour se rendre "pro").



C'est l'avantage des newbies comme toi et Jean-Marc. Etant débutant,
vous vous esquintez les lunettes à lire de la documentation (de MS en
plus, qui a par ailleurs le don de pulvériser les neurones naissant,
genre Mars Attack). Et, comportement incompréhensible, vous lisez les
réponses aux questions !!!

Alors que les pros, ben ils sont nés avec le 'SAVOIR', et les méga-pro
avec la 'CONNAISSANCE ULTIME'. Mais on ne choisit pas sa date de naissance :

<http://www.leconcombre.com/bio/1001-influences-1.html>

A pluche :-D

--

Légumineusement votre,

Un concombre parmi les zôtres.
Avatar
jeanmarcnoury
On 3 mar, 01:44, Jacques93 wrote:

Hello Jacques,

Alors que les pros, ben ils sont nés avec le 'SAVOIR', et les méga-pr o
avec la 'CONNAISSANCE ULTIME'.



Et oui, on ne peut que se prosterner humblement devant eux: leur
savoir est immense et en plus ils n'hésitent jamais à nous le faire
partager en toute modestie. La profondeur d'analyse dont ils font
preuve dans chacun de leurs posts, la puissance qui se dégage de leurs
contributions est telle qu'on en reste sans voix. J'en veux simplement
pour preuve une des dernières contributions dont nous avons eu
l'insigne honneur d'être les témoins ébahis : "ca se fait aves les
api.".

Quand on a lu ça, on a tout lu; le reste est vain...

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
PH
a écrit :
On 3 mar, 01:44, Jacques93 wrote:

Hello Jacques,

Alors que les pros, ben ils sont nés avec le 'SAVOIR', et les méga-pro
avec la 'CONNAISSANCE ULTIME'.



Et oui, on ne peut que se prosterner humblement devant eux: leur
savoir est immense et en plus ils n'hésitent jamais à nous le faire
partager en toute modestie. La profondeur d'analyse dont ils font
preuve dans chacun de leurs posts, la puissance qui se dégage de leurs
contributions est telle qu'on en reste sans voix. J'en veux simplement
pour preuve une des dernières contributions dont nous avons eu
l'insigne honneur d'être les témoins ébahis : "ca se fait aves les
api.".

Quand on a lu ça, on a tout lu; le reste est vain...

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;





Les API vous dis-je, les API ! Hors les API point de salut ...
Avatar
Fran
On 3月3日, 午前1:44, Jacques93 wrote:
C'est l'avantage des newbies comme toi et Jean-Marc.



Je m'excuse mais c'est trop de compliments, je crois : Je rédige 100%
de mes réponses dans les newsgroups globalement à l'aide de Chr$( Rnd
()). La connaissance ultime joue dans la connaissance du bon seed pour
Randomize. Je reste par contre étonné que les URL pointent rà ©ellement
vers les bons sujets!

François
PS: si quelqu'un pouvait m'expliquer ce que j'écris, ce serait
bien :-)
1 2 3