【问题标题】:Word wrapping text without splitting words自动换行文本而不拆分单词
【发布时间】:2011-12-23 10:07:23
【问题描述】:

我正在寻找一个在 VB6 中解析字符串(具有可变长度)而不拆分任何单词的过程。 我有很多字符串,我必须将它们中的每一个(循环)写入图像。

示例字符串是:“Il punto di vista si trova in corrispondenza del Forte Matiniti lowere. Le opere e le aree di intervento previste dal Progetto Definitivo (Ottobre 2010) e inquadrabili dalla stazione visiva sono: il Centro Direzionale e il cantiere operativo CI3b; le due torri di sostegno e i cavi tra Torre e blocco di centeo. Sullo sfondo è visibile la costa siciliana."

我如何写它,例如,在 3 行中,而不用分词? 提前致谢

【问题讨论】:

  • 澄清一下,您想自动换行吗?当 MultiLine 设置为 true 且 ScrollBars 未设置为两者或水平时,VB6 文本框默认执行此操作。
  • 谢谢迪安娜。我要在其中写入字符串的文本框不是 VB6 文本框。我必须将它写在 JPEG 布局上的分隔空间中(我知道将文本放在布局中的 x,y 坐标)。
  • 好的,我已经更新了适合的问题。
  • 是否有每行最大字符数限制?

标签: parsing text vb6 word-wrap


【解决方案1】:

要对文本进行自动换行,需要将其拆分为每个空格上的单词,然后依次计算从开头到每个空格需要多少空间。当它超出该区域以适应时,您将所有内容打印到可渗透的空间,然后从新行重新开始。

由于文本大小由使用的字体决定,您需要查询绘图库以查看每个块的大小。如果使用 GDI,您可以使用 GetTextExtentPoint32() 函数。如果在创建 JPEG 之前绘制到 VB6 图片框,可以使用.TextWidth() 方法。

另请注意,GDI DrawText() 函数有一个选项可以自动中断给定 Rect 的单词。

您需要提供更多关于您如何进行绘图和创建图像以获得更具体答案的信息。

【讨论】:

  • 感谢 Deanna,很遗憾,现在我没有时间测试您的解决方案了。我会在接下来的几天尝试。
【解决方案2】:

这是一个应该可以工作的函数

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    相关资源
    最近更新 更多