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
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Cédric
Le #14735901
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
Jean-Marc
Le #14735671
"Cédric" 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
Cédric
Le #14735651
> 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 ?
ng
Le #14735631
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
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 ?


Cédric
Le #14735611
> 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...
Cédric
Le #14735601
Non j'ai essayé, malheureusement; rightmargin ne fonctionne pas, le mot est
mis a la ligne en entier
François Picalausa
Le #14735591
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" news:407702df$0$22880$
Non j'ai essayé, malheureusement; rightmargin ne fonctionne pas, le
mot est mis a la ligne en entier


ng
Le #14735581
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
Non j'ai essayé, malheureusement; rightmargin ne fonctionne pas, le
mot est mis a la ligne en entier


Zoury
Le #14735571
> EM_SETWORDBREAKPROCEX



très fort! :O)
ng
Le #14735561
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
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" news:407702df$0$22880$
Non j'ai essayé, malheureusement; rightmargin ne fonctionne pas, le
mot est mis a la ligne en entier




Publicité
Poster une réponse
Anonyme