Перенос слов без разделения слов - PullRequest
1 голос
/ 23 декабря 2011

Я ищу процедуру в VB6 для разбора строк (с переменной длиной), не разбивая ни одного слова.У меня много строк, и я должен записать каждую из них (циклично) в изображение.

Пример строки: " Il punto di vista si trova in corrispondenza del Forte Matiniti inferiore. Le opere eВыступление за последние годы (Prototo Definitivo, Ottobre, 2010) и дальнейшее расследование, посвященное созданию центральных направлений деятельности, в том числе и в связи с этим, является обязательным условием. "

Как мне написать, например, в 3 строки, не разбивая слова?Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

Чтобы выполнить перенос текста по словам, вам нужно разбить его на слова в каждом пробеле, а затем вычислить, сколько места займет от начала до каждого пробела по очереди. Когда он поднимается над областью, в которую вы помещаетесь, вы распечатываете все до видимого пространства и затем начинаете снова с новой строки.

Поскольку размер текста определяется используемым шрифтом, вам необходимо запросить библиотеку рисунков, чтобы увидеть, насколько большим будет каждый блок. При использовании GDI, вы можете использовать функцию GetTextExtentPoint32(). Если вы рисуете в графический блок VB6 перед созданием JPEG, вы можете использовать метод .TextWidth().

Также обратите внимание, что функция GDI DrawText() имеет возможность автоматически разбивать слова по заданному Rect.

Вам понадобится предоставить больше информации о том, как вы рисуете и создаете изображение, для более конкретного ответа.

1 голос
/ 23 декабря 2011

Вот функция, которая должна работать

Private Function FormatString(ByVal StringToFormat As String, ByVal MaxLineLen As Integer) As String
    Dim TempString As String
    Dim Pos As Long

    FormatString = ""
    Pos = 1
    While StringToFormat <> ""
        If Len(StringToFormat) <= MaxLineLen Then
            TempString = Trim(StringToFormat)
        Else
            TempString = Mid(StringToFormat, Pos, MaxLineLen + 1)
            TempString = Trim(Left(TempString, InStrRev(TempString, " ")))
        End If

        FormatString = FormatString & TempString & vbCrLf
        StringToFormat = LTrim(Right(StringToFormat, Len(StringToFormat) - Len(TempString)))
    Wend
End Function
...