我们有一个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个位置,现在它被插入第三个位置。
基本上除以2,我想因为与ANSI相比,Unicode需要两个字节,只需要一个。因为我是一个没有RTF,RichEdit和Visual Basic 6经验的假人。
所以我的问题是:当我使用sendMessage行粘贴图像时,我可以更改图像的位置吗?
或者通过其他方式来控制插入RichEdit框中的图像的位置?
答案 0 :(得分:0)
我的方法就是这样,如果你看一下rtf.SelRTF
属性,你将能够准确地看到在RichTextBox中创建视觉效果的RTF代码。然后,您可以将其保存到文件中,将其加载到文字中并移动图像直到它位于正确的位置,保存文件并再次查看RTF代码。此时,您应该充分了解中文或其他Unicode语言的组合,以构建字符串操作代码以执行您想要的操作。我并不完全确定每个unicode字符都是2个字节 - 如果你认真支持全范围,那么值得一试。
希望有所帮助。
答案 1 :(得分:0)
为什么不在粘贴前检索位置?
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