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

Word Wrap

21 réponses
Avatar
Cédric
Bonjour,

J'ai un programme dans lequel j'ai inséré une richtextbox.
Arrivé à la fin d'un ligne, comme je n'ai pas mis de barre horizontale, le
mot revient à la ligne, et c'est ce que je veux.
En revanche si un mot n'est pas fini il est mis entièrement à la ligne. Je
voudrai modifier le word wrap pour que le mot se coupe automatiquement et
que uniquement l'autre moitié revienne à la ligne.

Aidez moi svp !!!!! Merci beaucoup

10 réponses

1 2 3
Avatar
Cédric
Peut être me suis-je mal expliqué.
Je veux en fait obtenir ceci:

ceci est du te|
xte et je trou|
ve...

et non:

ceci est du |
texte et je |
trouve...


Le caractère | symbolise le bord de page
Avatar
Jean-Marc
"Cédric" a écrit dans le message de
news:40769d55$0$20173$
Peut être me suis-je mal expliqué.
Je veux en fait obtenir ceci:

ceci est du te|
xte et je trou|
ve...

et non:

ceci est du |
texte et je |
trouve...



Hello,

qu'est ce qui me dit que je dois faire
ceci est du te|
xte et je trou|
ve...

et pas:

ceci est du tex|
te et je trouv|
e...

?
Tu veux wrapper à un nombre de caractères précis? auquel cas c'est trivial,
il suffit de découper
ta string en petites strings?
Si tu veux wrapper sur le "bord" du contrôle, c'est à peu prés impossible à
faire simplement, sauf si tu
utilises une police à empattement fixe (comme Courrier) et si en plus la
taille de ton contrôle est fixée
une fois pour toute.
Dans cette hyppothèse (qui se ramène au premier cas), il te suffit de
compter combien de caractères
tiennent sur une ligne jusqu'au "bord", et de couper ta string en petites
strings.

Jean-Marc
Avatar
Cédric
> Si tu veux wrapper sur le "bord" du contrôle, c'est à peu prés impossible


à
faire simplement, sauf si tu
utilises une police à empattement fixe (comme Courrier) et si en plus la
taille de ton contrôle est fixée une fois pour toute.


Les deux conditions sont remplies ;-)

Dans cette hypothèse (qui se ramène au premier cas), il te suffit de
compter combien de caractères
tiennent sur une ligne jusqu'au "bord", et de couper ta string en petites
strings.


Comment faire pour avoir un retour a la ligne après 40 caractères écrits
dans la richtextbox ?
Avatar
ng
Salut,

Regarde du coté de RightMargin. Sinon pour le retour au milieu d'un mot,
c'est loin d'être évident dans la mesure où il faudrait que l'algo puisse
reconnaitre une syllable ou une double voyelle etc...

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Cédric a écrit :

Si tu veux wrapper sur le "bord" du contrôle, c'est à peu prés
impossible à faire simplement, sauf si tu
utilises une police à empattement fixe (comme Courrier) et si en
plus la taille de ton contrôle est fixée une fois pour toute.


Les deux conditions sont remplies ;-)

Dans cette hypothèse (qui se ramène au premier cas), il te suffit de
compter combien de caractères
tiennent sur une ligne jusqu'au "bord", et de couper ta string en
petites strings.


Comment faire pour avoir un retour a la ligne après 40 caractères
écrits dans la richtextbox ?


Avatar
Cédric
> Regarde du coté de RightMargin. Sinon pour le retour au milieu d'un mot,
c'est loin d'être évident dans la mesure où il faudrait que l'algo puisse
reconnaitre une syllable ou une double voyelle etc...



Merci je vais regarder. Je n'ai pas besoin de couper selon les règles
habituelles, je veux juste un coupage systématique (ça peut paraître
bizarre, mais c'est un programme très spécifique). Ainsi le découpage
suivant ne pose aucun probleme par exemple :

...m|
aison

ou alors

...antic|
onstitu...
Avatar
Cédric
Non j'ai essayé, malheureusement; rightmargin ne fonctionne pas, le mot est
mis a la ligne en entier
Avatar
François Picalausa
Bonjour/soir,

essaye ceci:
'Dans une form avec un richtextbox richtext1

Private Const WM_USER As Long = &H400
Private Const EM_SETWORDBREAKPROCEX As Long = WM_USER + 81

Private Declare Function SendMessage _
Lib "user32" _
Alias "SendMessageA" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long _
) _
As Long

Private Sub Form_Load()
SendMessage RichTextBox1.hwnd, EM_SETWORDBREAKPROCEX, 0, AddressOf
EditWordBreakProcEx
End Sub
'Dans un module standard:

Function EditWordBreakProcEx( _
ByVal pchText As Long, _
ByVal cchText As Long, _
ByVal bCharSet As Byte, _
ByVal code As Long _
) _
As Long

EditWordBreakProcEx = 0 'coupez!

End Function

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Cédric" a écrit dans le message de
news:407702df$0$22880$
Non j'ai essayé, malheureusement; rightmargin ne fonctionne pas, le
mot est mis a la ligne en entier


Avatar
ng
Salut,

Dans ce cas, essaye ceci :

Option Explicit

Private Sub Text1_Change()

'text1 doit avoir une font à largeur fixe
'multiligne = true

Dim i As Integer, tblLignes() As String, sText As String
Dim sOut As String, lNbLargeurChar As Long

'Dim lPos As Long
'lPos = Text1.SelStart

Set Me.Font = Text1.Font
sText = Text1.Text
sText = Replace(sText, "-" & vbCrLf, "", , , vbTextCompare)
sText = Replace(sText, vbCrLf, " ", , , vbTextCompare)

'attention aux scrollbars, test réalisé sans
'il faudra faire des ajustement en conséquence
'de plus si le textbox à une taille fixe, cette
'valeur pourra être fixée définitivement, elle
'représente le nombre de caractère sur une ligne
'lNbLargeurChar = 51
lNbLargeurChar = Text1.Width / Me.TextWidth(" ") - 1

For i = 1 To Len(sText) Step lNbLargeurChar - 1
If i + lNbLargeurChar - 1 >= Len(sText) Then
sOut = sOut & Mid$(sText, i, lNbLargeurChar - 1)
Else
sOut = sOut & Mid$(sText, i, lNbLargeurChar - 1) & "-" & vbCrLf
End If
Next

Text1.Text = sOut

'Text1.SelStart = lPos

sOut = "": sText = ""
End Sub



--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Cédric a écrit :

Non j'ai essayé, malheureusement; rightmargin ne fonctionne pas, le
mot est mis a la ligne en entier


Avatar
Zoury
> EM_SETWORDBREAKPROCEX



très fort! :O)
Avatar
ng
Impressionant :)

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

François Picalausa a écrit :

Bonjour/soir,

essaye ceci:
'Dans une form avec un richtextbox richtext1

Private Const WM_USER As Long = &H400
Private Const EM_SETWORDBREAKPROCEX As Long = WM_USER + 81

Private Declare Function SendMessage _
Lib "user32" _
Alias "SendMessageA" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long _
) _
As Long

Private Sub Form_Load()
SendMessage RichTextBox1.hwnd, EM_SETWORDBREAKPROCEX, 0, AddressOf
EditWordBreakProcEx
End Sub
'Dans un module standard:

Function EditWordBreakProcEx( _
ByVal pchText As Long, _
ByVal cchText As Long, _
ByVal bCharSet As Byte, _
ByVal code As Long _
) _
As Long

EditWordBreakProcEx = 0 'coupez!

End Function


"Cédric" a écrit dans le message de
news:407702df$0$22880$
Non j'ai essayé, malheureusement; rightmargin ne fonctionne pas, le
mot est mis a la ligne en entier




1 2 3