VB6 TextBox

Le
Armando RODRIGUES
Bonjour,

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

Merci pour vos réponses.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
LE TROLL
Le #18797831
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" 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.



jeanmarcnoury
Le #18779401
On 27 fév, 13:42, "Armando RODRIGUES"
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_' ;
Armando RODRIGUES
Le #18781531
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


On 27 fév, 13:42, "Armando RODRIGUES"
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_' ;
bahn po
Le #18787871
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)
bahn po
Le #18788151
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)



"http://fr.wikipedia.org/wiki/Chasse_(typographie)"
jean-pierre
Le #18788731
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)
Jean-marc
Le #18792081
jean-pierre wrote:
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_' ;
David
Le #18792391
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" 49aa6d36$0$2847$
jean-pierre wrote:
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_' ;






Jacques93
Le #18793711
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'


' --------------------------------------------------------
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 :



--

Cordialement,

Jacques.
Armando RODRIGUES
Le #18794511
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'


' --------------------------------------------------------
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 :



--

Cordialement,

Jacques.



Publicité
Poster une réponse
Anonyme