Ciao a tutti vi posto questo codice appena sfornato...
E' utile per giustificare il testo in una RichTextBox
Io personalmente uso vb net ma credo si possa adattare bene a tutte le esigenze



creare un nuovo progetto con un form chiamato "Form1" e con un modulo chiamato "Module1"
inserire all'interno del form un RichTextBox chiamato "RichTextBox1"
nelle proprietà del RichTextBox1 impostare la proprietà multiline a "true"
inserire all'interno del form un pulsante chiamato "Button1"


creare questo evento Click
nell'esempio ho impostato a 44 la lunghezza della riga ma si puo impostare una lunghezza qualunque
fate partire il progetto e scrivete o incollate un testo sufficientemente lungo
premete il pulsante e guardate il risultato

codice:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    GiustificaTesto(RichTextBox1, 44, fLucida9)
End Sub
inserire quanto segue all'interno del modulo "Module1"

codice:
'dichiarazioni
Public fLucida9 As New Font("Lucida Sans Typewriter", 9)


'funzione
Public Function GiustificaTesto(ByVal xText As RichTextBox, ByVal xLen As Integer, ByVal xFont As Font)
        On Error GoTo GestErr

        xText.Font = xFont

        Dim lineaTotale(9999) As String
        Dim subLinea(9999) As String
        Dim diffLinea As String

        Dim i As Integer = 0
        Dim j As Integer = 0

        Dim ultimoSpazio As Integer = 0
        Dim Spazio As Integer = 1
        Dim SpazioAdd As Integer = 0

        Dim nuovaPartenza As Integer = 1

        For i = 0 To xText.Lines.LongLength - 1

            'ottengo la linea da rtb
            lineaTotale(i) = xText.Lines(i)

            diffLinea = xText.Lines(i)


            Do Until Len(diffLinea) <= xLen

                subLinea(j) = Mid(lineaTotale(i), nuovaPartenza, xLen)
                ultimoSpazio = subLinea(j).LastIndexOf(" ", 44) + 1

                If ultimoSpazio < 1 Then ultimoSpazio = xLen

                diffLinea = Trim(Mid(lineaTotale(i), nuovaPartenza + ultimoSpazio - 1))
                subLinea(j) = Trim(Mid(subLinea(j), 1, ultimoSpazio))

                Do Until Len(Trim(subLinea(j))) >= xLen

                    If Spazio >= Len(subLinea(j)) Then
                        Spazio = 1
                        SpazioAdd = SpazioAdd + 1
                    End If

                    If InStr(subLinea(j), " ") = 0 Then subLinea(j) = subLinea(j) & " -"

                    If Mid(subLinea(j), Spazio, 1) = " " Then
                        subLinea(j) = Mid(subLinea(j), 1, Spazio + SpazioAdd) & " " & Trim(Mid(subLinea(j), Spazio + SpazioAdd + 

1))
                        Spazio = Spazio + 2 + SpazioAdd
                    Else
                        Spazio = Spazio + 1
                    End If

                Loop

                nuovaPartenza = nuovaPartenza + ultimoSpazio - 1
                ultimoSpazio = 0
                Spazio = 1
                SpazioAdd = 0
                j = j + 1
            Loop

            If Len(Trim(diffLinea)) > 0 Then
                subLinea(j) = Trim(diffLinea)
                j = j + 1
            End If

            nuovaPartenza = 1
        Next

        Dim xLineResult(j) As String
        Dim h As Integer = 0

        For h = 0 To j
            xLineResult(h) = subLinea(h)
        Next

        xText.Lines = xLineResult
        GiustificaTesto = xText.Lines

        Exit Function

GestErr:

        GiustificaTesto = xText.Lines
    End Function