Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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
LE TROLL
Bonjour,

Le textBox n'a pas la propriété autoSize il me semble, on peut par
contre en mettant une police fixe (couRier new) compter les signes et
adapter, peut être est-ce aussi faisable avec les API, mais là je ne sais...

--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Armando RODRIGUES" a écrit dans le message de
news:49a7dfb9$0$27538$
Bonjour,

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

Merci pour vos réponses.



Avatar
jeanmarcnoury
On 27 fév, 13:42, "Armando RODRIGUES" wrote:
Bonjour,

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

Merci pour vos réponses.



Hello,

On peut le faire. Il y a plusieurs façons possibles, en voici une.

Mettre un TextBox 'Text1' et sasir le code suivant:

Private Sub Text1_Change()

Dim s As String
Dim txt_width As Single
Static ori_width As Single

If ori_width = 0 Then
ori_width = Text1.Width
End If

s = Text1.Text
txt_width = TextWidth(s) * 1.1

If txt_width > ori_width Then
Text1.Width = txt_width
End If

End Sub

C'est l'idée générale et ça fonctionne.

Cordialement,



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

J'ai testé votre code, mais ca manque de précision. En fait certains
caractères restent masqués, aussi le TextBox évolue plus vite que le texte
lui même. Si vous avez d'autres solutions je suis prenant merci en tous cas
de votre aide.

Cordialement.
AR

a écrit dans le message de news:

On 27 fév, 13:42, "Armando RODRIGUES" wrote:
Bonjour,

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

Merci pour vos réponses.



Hello,

On peut le faire. Il y a plusieurs façons possibles, en voici une.

Mettre un TextBox 'Text1' et sasir le code suivant:

Private Sub Text1_Change()

Dim s As String
Dim txt_width As Single
Static ori_width As Single

If ori_width = 0 Then
ori_width = Text1.Width
End If

s = Text1.Text
txt_width = TextWidth(s) * 1.1

If txt_width > ori_width Then
Text1.Width = txt_width
End If

End Sub

C'est l'idée générale et ça fonctionne.

Cordialement,



--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
bahn po
Le 27/02/2009, Armando RODRIGUES a supposé :
Bonsoir,

J'ai testé votre code, mais ca manque de précision. En fait certains
caractères restent masqués, aussi le TextBox évolue plus vite que le texte
lui même. Si vous avez d'autres solutions je suis prenant merci en tous cas
de votre aide.

Cordialement.
AR



Il faudrait que la chasse de la police soit fixe!

http://fr.wikipedia.org/wiki/Chasse_(typographie)
Avatar
bahn po
Le 28/02/2009, bahn po a supposé :
Le 27/02/2009, Armando RODRIGUES a supposé :
Bonsoir,

J'ai testé votre code, mais ca manque de précision. En fait certains
caractères restent masqués, aussi le TextBox évolue plus vite que le texte
lui même. Si vous avez d'autres solutions je suis prenant merci en tous cas
de votre aide.

Cordialement.
AR



Il faudrait que la chasse de la police soit fixe!

http://fr.wikipedia.org/wiki/Chasse_(typographie)" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://fr.wikipedia.org/wiki/Chasse_(typographie)



"http://fr.wikipedia.org/wiki/Chasse_(typographie)" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://fr.wikipedia.org/wiki/Chasse_(typographie)"
Avatar
jean-pierre
wrote in message
news:

Hello,
On peut le faire. Il y a plusieurs façons possibles, en voici une.



Vraiment approximatif et pas pro du tout.
On doit le redimensionner après avoir calculé la taille exacte, quelle que
soit la fonte, avec l'api Win32 (Gdi)
Avatar
Jean-marc
jean-pierre wrote:
wrote in message
news:

Hello,
On peut le faire. Il y a plusieurs façons possibles, en voici une.



Vraiment approximatif



En effet. Il s'agissait ici non pas de donner "la" solution mais
d'exposer le principe.

et pas pro du tout.



Même remarque :-)

On doit le redimensionner après avoir calculé la taille exacte,
quelle que soit la fonte, avec l'api Win32 (Gdi)



En effet. L'API Win32 dispose de fonctions permettant de faire cela.

Plutôt qu'une réponse à l'emporte pièce, il serait certainement plus
intéressant de fournir dans ce cas ta solution, de manière
professionnelle (à savoir avec du code fonctionnel, etc.).

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

Mais Monsieur Noury, votre réponse était elle-même
une réponse à l'emporte pièce et le code n'était pas fonctionnel !
Alors comment pouvez-vous en faire le reprocher à un intervenant ?
Vu votre statut de MVP votre réaction est inappropriée.


a+ Jean-Pol Site Web : www.colovid.be
Site Web perso pour le fun : http://users.skynet.be/DAVID/
Cette page est transmise avec des électrons 100% recyclés.

"Jean-marc" a écrit dans le message de news:
49aa6d36$0$2847$
jean-pierre wrote:
wrote in message
news:

Hello,
On peut le faire. Il y a plusieurs façons possibles, en voici une.



Vraiment approximatif



En effet. Il s'agissait ici non pas de donner "la" solution mais
d'exposer le principe.

et pas pro du tout.



Même remarque :-)

On doit le redimensionner après avoir calculé la taille exacte,
quelle que soit la fonte, avec l'api Win32 (Gdi)



En effet. L'API Win32 dispose de fonctions permettant de faire cela.

Plutôt qu'une réponse à l'emporte pièce, il serait certainement plus
intéressant de fournir dans ce cas ta solution, de manière
professionnelle (à savoir avec du code fonctionnel, etc.).

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






Avatar
Jacques93
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.

Voir cette discussion :

<http://groups.google.fr/group/microsoft.public.fr.vb/browse_thread/thread/aa930fd716a99cb0&gt;


--

Cordialement,

Jacques.
Avatar
Armando RODRIGUES
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.


"Jacques93" a écrit dans le message de news:

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.

Voir cette discussion :

<http://groups.google.fr/group/microsoft.public.fr.vb/browse_thread/thread/aa930fd716a99cb0&gt;


--

Cordialement,

Jacques.



1 2 3