如何在 Visual Basic 6 中对齐 RichEdit 粘贴对象位置?
Posted
技术标签:
【中文标题】如何在 Visual Basic 6 中对齐 RichEdit 粘贴对象位置?【英文标题】:How to align RichEdit paste object position in Visual Basic 6? 【发布时间】:2008-12-12 10:04:33 【问题描述】:我们有一个RichEdit 控件,允许用户在其中插入一个Office MathML 方程对象。
基本上逻辑是这样的:用户点击插入数学方程式,我们允许他们使用外部的 MathML 编辑器,然后我们将一个图像来表示方程式到 RichEdit 控件中:
' Paste the picture into the RichTextBox.
SendMessage ctlLastFocus.hwnd, WM_PASTE, 0, 0
找到它的位置并将其锁定:
With ctlLastFocus
'lock the image
.SelStart = .SelStart - 1
.SelLength = 1
.SelProtected = True
在美丽的ANSI世界里一切都很好,但我们也允许Unicode字符,我注意到当你使用汉字时,插入的位置错了总位置的一半,即如果它应该是第 7 个位置,现在它被插入到第三个位置。
我猜是因为 Unicode 需要两个字节,而 ANSI 只需要一个字节。所以因为我是一个没有RTF、RichEdit 和 Visual Basic 6 经验的傻瓜。
所以我的问题是:我可以在使用 sendMessage 行粘贴图像时更改图像的位置吗?
或者通过其他方式来控制图片插入RichEdit框的位置?
【问题讨论】:
如何确定插入位置?我只能看到锁定代码。 【参考方案1】:我的方法是这样,如果您查看rtf.SelRTF
property,您将能够准确地看到在 RichTextBox 中创建视觉效果的 RTF 代码。然后,您可以将其保存到文件中,将其加载到 word 中并移动图像直到它在正确的位置,保存文件并再次查看 RTF 代码。此时,您应该对中文或其他 Unicode 语言的组合有足够的了解,以构建字符串操作代码来执行您想要的操作。我不完全确定每个 unicode 字符都是 2 个字节 - 如果您认真支持完整范围,值得一试。
希望对您有所帮助。
【讨论】:
【参考方案2】:为什么不在粘贴前检索位置?
Dim iStartPos As Long
Dim iLength As Long
With ctlLastFocus
iStartPos = .SelStart
SendMessage.hwnd, WM_PASTE, 0, 0
iLength = .SelStart - iStartPos
.SelStart = iStartPos
.SelLength = iLength
.SelProtected = True
End With
【讨论】:
以上是关于如何在 Visual Basic 6 中对齐 RichEdit 粘贴对象位置?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Basic 6.0 中创建带有文本框的数组
如何在Visual Basic 6.0中使用主键在一个表中使用外键获取记录
如何在 Visual Basic 6 ListView 上进行多列排序?
如何在此 Access-SQL server-Visual Basic 6 (ADO) 表单中不包含重复元素(主详细信息)