Bonjour,
J'essaie de faire un prog qui me permettrait de formatter un texte en lui donnant une longueur de ligne limite.
J'ai fait quelques recherches pour trouver les différents paramètres
nécessaires pour connaître la longueur des lignes et leur manipulation
mais je n'arrive pas a poursuivre mon projet car a un moment donné sa
crash sans prevenir : quand je passe a ligne suivante.
Pour la premiere ligne je peux arriver a couper la ligne pour qu'elle
soit d'une longueur de 84 caractères ou plus mais le moment venu de
compter la longueur de la deuxième ligne vb gèle et me previens que je
vais perdre toutes mes données et je dois le fermer sans sauvegarde.
Voici le code pour une ligne (qui marche):
Private Const EM_LINEINDEX = &HBB
Private Const EM_GETLINE = &HC4
Private Declare Function SendMessageLong Lib "user32" Alias
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As
Long, ByVal lParam As Long) As Long
Private Sub cmd1_Click()
Dim lngNbLignes As Long, i As Long, k As Long
Dim lngIndexCar As Long, intLongueur As Integer
Dim strLigne As String
'nombre de lignes
lngNbLignes = SendMessageLong(rtbun.hwnd, EM_GETLINECOUNT, 0, 0)
k = 1
lngIndexCar = SendMessageLong(rtbun.hwnd, k - 1, 0, 0)
intLongueur = SendMessageLong(rtbun.hwnd, EM_LINELENGTH, lngIndexCar, 0)
If intLongueur > 84 Then
For i = intLongueur To 0 Step -1
If Mid(rtbun.Text, i, 1) = Chr(32) Then
rtbun.SelStart = i
rtbun.SelText = vbCrLf
rtbun.SelStart = SendMessageLong(rtbun.hwnd, EM_LINEINDEX, k + 1, 0)
rtbun.SetFocus
SendKeys Chr(3)
SendKeys Chr(8)
SendKeys Chr(32)
Exit For
End If
Next i
End If
End Sub
Maintenant ce que je pensais faire pour un nombre variable de lignes (qui crash):
For k = 1 To lngNbLignes - 1
lngIndexCar = SendMessageLong(rtbun.hwnd, k - 1, 0, 0)
intLongueur = SendMessageLong(rtbun.hwnd, EM_LINELENGTH, lngIndexCar, 0)
If intLongueur > 84 Then
For i = intLongueur To 0 Step -1
If Mid(rtbun.Text, i, 1) = Chr(32) Then
rtbun.SelStart = i
rtbun.SelText = vbCrLf
rtbun.SelStart = SendMessageLong(rtbun.hwnd, EM_LINEINDEX, k + 1, 0)
rtbun.SetFocus
SendKeys Chr(3)
SendKeys Chr(8)
SendKeys Chr(32)
Exit For
End If
Next i
End If
Next k
Si vous connaissez la réponse merci de bien vouloir me la communiquez.
One step away from ...