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

Positionnement automatique d'un textBox

3 réponses
Avatar
SAISAS
Bonjour,

j'ai une "textbox" qui me sert à empiler des messages de déroulement d'un
processus (i.e. j'insère des lignes en base, et à chaque ligne, je rajoute un
message dans la textbox : ligne insérée ...).

Je voudrais qu'apparaisse systématiquement la dernière ligne de ma textbox :
quelqu'un sait-il comment positionner automatiquement le texte?

Merci.

3 réponses

Avatar
Picalausa François
Hello,

En jouant sur SelStart on arrive à ce genre de résultats:
Public Sub LogAppend(txtLog As TextBox, Data As String)
'Enregistre la sélection actuelle
Dim OSS As Long
Dim OSL As Long
OSS = txtLog.SelStart
OSL = txtLog.SelLength

'Ajoute la nouvelle entrée
txtLog.SelStart = Len(txtLog.Text)
txtLog.SelText = Data

'Restaure la sélection
txtLog.SelStart = OSS
txtLog.SelLength = OSL
End Sub

Private Sub Timer1_Timer()
LogAppend Text1, Format(Now, "hh:nn:ss") & " - Newline" & vbCrLf
End Sub

Attention cependant que le textbox a une limite de capacité.
Il faudra donc, en fonction de la quantité typique de données et du publique
ciblé, gérer (ou non) le possible dépassement en supprimant les premières
entrées (ou en envoyant un EM_SETLIMITTEXT, puisque sous XP, on peut monter
à 2147483646 caractères, la limite par défaut - qui est la valeur max sous
9x - étant de 32767 caractères)

--
Picalausa François

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

Je voudrais qu'apparaisse systématiquement la dernière ligne de ma textbox
:
quelqu'un sait-il comment positionner automatiquement le texte?


Avatar
SAISAS
Merci

en fait, ma zone de texte sert à définir un rapport d'exécution, dont la
solution est OK. Mon code :

Me.Rapport.SelStart = Len(Me.Rapport.Text)
Me.Rapport.SelLength = 0
DoEvents

j'aurais cependant aimé une solution qui ne joue pas avec la sélection en
cours ...

"Picalausa François" a écrit :

Hello,

En jouant sur SelStart on arrive à ce genre de résultats:
Public Sub LogAppend(txtLog As TextBox, Data As String)
'Enregistre la sélection actuelle
Dim OSS As Long
Dim OSL As Long
OSS = txtLog.SelStart
OSL = txtLog.SelLength

'Ajoute la nouvelle entrée
txtLog.SelStart = Len(txtLog.Text)
txtLog.SelText = Data

'Restaure la sélection
txtLog.SelStart = OSS
txtLog.SelLength = OSL
End Sub

Private Sub Timer1_Timer()
LogAppend Text1, Format(Now, "hh:nn:ss") & " - Newline" & vbCrLf
End Sub

Attention cependant que le textbox a une limite de capacité.
Il faudra donc, en fonction de la quantité typique de données et du publique
ciblé, gérer (ou non) le possible dépassement en supprimant les premières
entrées (ou en envoyant un EM_SETLIMITTEXT, puisque sous XP, on peut monter
à 2147483646 caractères, la limite par défaut - qui est la valeur max sous
9x - étant de 32767 caractères)

--
Picalausa François

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

> Je voudrais qu'apparaisse systématiquement la dernière ligne de ma textbox
> :
> quelqu'un sait-il comment positionner automatiquement le texte?





Avatar
Picalausa François
Hello,

Il est toujours possible d'envoyer des messages EM_SCROLL et/ou
EM_SCROLLCARET et de ne pas jouer avec la sélection. Nénanmoins, si c'est
pour à côter employer un
Text1.Text = Text1.Text & vbCrLf & "blah"
tout le problème de la sélection reste (mais les opérations de concaténation
rendent les opérations plus longues)...

Ne connaissant pas de message miracle (EM_SETHANDLE au mieux) permettant
l'ajout de texte à une textbox, je crois que le jeu sur la sélection indiqué
est ce qu'il y a de mieux....

--
Picalausa François

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

Merci

en fait, ma zone de texte sert à définir un rapport d'exécution, dont la
solution est OK. Mon code :

Me.Rapport.SelStart = Len(Me.Rapport.Text)
Me.Rapport.SelLength = 0
DoEvents

j'aurais cependant aimé une solution qui ne joue pas avec la sélection en
cours ...

"Picalausa François" a écrit :

Hello,

En jouant sur SelStart on arrive à ce genre de résultats:
Public Sub LogAppend(txtLog As TextBox, Data As String)
'Enregistre la sélection actuelle
Dim OSS As Long
Dim OSL As Long
OSS = txtLog.SelStart
OSL = txtLog.SelLength

'Ajoute la nouvelle entrée
txtLog.SelStart = Len(txtLog.Text)
txtLog.SelText = Data

'Restaure la sélection
txtLog.SelStart = OSS
txtLog.SelLength = OSL
End Sub

Private Sub Timer1_Timer()
LogAppend Text1, Format(Now, "hh:nn:ss") & " - Newline" & vbCrLf
End Sub

Attention cependant que le textbox a une limite de capacité.
Il faudra donc, en fonction de la quantité typique de données et du
publique
ciblé, gérer (ou non) le possible dépassement en supprimant les premières
entrées (ou en envoyant un EM_SETLIMITTEXT, puisque sous XP, on peut
monter
à 2147483646 caractères, la limite par défaut - qui est la valeur max
sous
9x - étant de 32767 caractères)

--
Picalausa François

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

> Je voudrais qu'apparaisse systématiquement la dernière ligne de ma
> textbox
> :
> quelqu'un sait-il comment positionner automatiquement le texte?