Parsing 不拆分单词的换行文字
我正在寻找一个在VB6中解析字符串(长度可变)而不拆分任何单词的过程。 我有许多字符串,我必须将它们中的每一个(循环)写入一个图像 一个示例字符串是:“在《下一级军事行动纲领》中,军事行动和军事行动干预了明确的进展(Ottobre 2010年)在达拉斯市的四分之一的visiva sono体育场:CI3b指挥中心和坎蒂尔运营中心;在西西里岛costa siciliana的Sullo sfondoèvisibile酒店 例如,我如何在不拆分单词的情况下将其写成3行?Parsing 不拆分单词的换行文字,parsing,text,vb6,word-wrap,Parsing,Text,Vb6,Word Wrap,我正在寻找一个在VB6中解析字符串(长度可变)而不拆分任何单词的过程。 我有许多字符串,我必须将它们中的每一个(循环)写入一个图像 一个示例字符串是:“在《下一级军事行动纲领》中,军事行动和军事行动干预了明确的进展(Ottobre 2010年)在达拉斯市的四分之一的visiva sono体育场:CI3b指挥中心和坎蒂尔运营中心;在西西里岛costa siciliana的Sullo sfondoèvisibile酒店 例如,我如何在不拆分单词的情况下将其写成3行? 提前感谢要对文本进行换行,您需要
提前感谢要对文本进行换行,您需要将其拆分为每个空格上的单词,然后依次计算从开头到每个空格所需的空间。当它超出该区域以适应时,您将所有内容打印到可渗透空间,然后在新行上重新开始 由于文本大小由使用的字体决定,因此需要查询图形库以查看每个块的大小。如果使用GDI,则可以使用
GetTextExtentPoint32()
函数。如果在创建JPEG之前绘制到VB6 picturebox,则可以使用.TextWidth()
方法
还要注意,GDIDrawText()
函数有一个选项,可以在给定Rect时自动断开单词
您需要提供有关如何绘制和创建图像的更多信息,以获得更具体的答案。要对文本进行换行,您需要将文本拆分为每个空格上的单词,然后依次计算从开始到每个空格所需的空间。当它超出该区域以适应时,您将所有内容打印到可渗透空间,然后在新行上重新开始 由于文本大小由使用的字体决定,因此需要查询图形库以查看每个块的大小。如果使用GDI,则可以使用
GetTextExtentPoint32()
函数。如果在创建JPEG之前绘制到VB6 picturebox,则可以使用.TextWidth()
方法
还要注意,GDIDrawText()
函数有一个选项,可以在给定Rect时自动断开单词
您需要提供有关如何绘制和创建图像的更多信息,以获得更具体的答案。这里有一个应该可以使用的函数
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
Private Function FormatString(ByVal StringToFormat作为字符串,ByVal MaxLineLen作为整数)作为字符串
将字符串设置为字符串
变暗位置尽可能长
FormatString=“”
位置=1
而StringToFormat“”
如果Len(StringToFormat)这里有一个函数应该可以工作
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
Private Function FormatString(ByVal StringToFormat作为字符串,ByVal MaxLineLen作为整数)作为字符串
将字符串设置为字符串
变暗位置尽可能长
FormatString=“”
位置=1
而StringToFormat“”
如果Len(StringToFormat)只是为了澄清,您想将文本换行吗?当多行
设置为true且滚动条
未同时设置或水平时,VB6文本框默认会执行此操作。谢谢Deanna。我必须在其中写入字符串的文本框不是VB6文本框。我必须将它写在JPEG版面上的分隔空间中(我知道在版面中文本放置的x,y坐标)。好的,我已经更新了问题以适应。每行是否有最大字符数限制?只是为了澄清一下,您想对文本进行文字换行吗?当多行
设置为true且滚动条
未同时设置或水平时,VB6文本框默认会执行此操作。谢谢Deanna。我必须在其中写入字符串的文本框不是VB6文本框。我必须将它写在JPEG版面上的分隔空间中(我知道将文本放在版面中的x,y坐标)。好的,我已经更新了问题以适应。是否每行有最大字符数限制?谢谢Deanna,很遗憾,现在我没有更多的时间来测试您的解决方案。接下来几天我会试试。谢谢Deanna,不幸的是现在我没有更多的时间来测试你的解决方案。我将在接下来的几天里试试。