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...
"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.
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...
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...
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
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
<jeanmarcnoury@gmail.com> a écrit dans le message de news:
adb93f5d-1402-4f45-a3d9-24922b45a85d@l39g2000yqn.googlegroups.com...
On 27 fév, 13:42, "Armando RODRIGUES" <arto...@free.fr> 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
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
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)
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.
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 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.
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.
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.
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)
<jeanmarcnoury@gmail.com> wrote in message
news:adb93f5d-1402-4f45-a3d9-24922b45a85d@l39g2000yqn.googlegroups.com...
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)
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
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.).
<jeanmarcnoury@gmail.com> wrote in message
news:adb93f5d-1402-4f45-a3d9-24922b45a85d@l39g2000yqn.googlegroups.com...
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.).
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.).
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.).
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" <jm@nowhere.invalid> a écrit dans le message de news:
49aa6d36$0$2847$ba620e4c@news.skynet.be...
jean-pierre wrote:
<jeanmarcnoury@gmail.com> wrote in message
news:adb93f5d-1402-4f45-a3d9-24922b45a85d@l39g2000yqn.googlegroups.com...
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.).
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.).
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.
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.
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.
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.
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" <jacques@Nospam> a écrit dans le message de news:
OOrdkYnmJHA.6060@TK2MSFTNGP05.phx.gbl...
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.
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.