Word Wrap
Le
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
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
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
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
à
Les deux conditions sont remplies ;-)
Comment faire pour avoir un retour a la ligne après 40 caractères écrits
dans la richtextbox ?
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
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...
mis a la ligne en entier
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" news:407702df$0$22880$
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
très fort! :O)
--
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