2008-12-12 74 views
1

我們有一個RichEdit控件,我們允許用戶插入一個Office MathML等式對象。如何對齊Visual Basic 6中的RichEdit粘貼對象位置?

基本邏輯是這樣的:在插入數學方程式的用戶點擊,我們允許他們使用外部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字符,並且我所注意到的是,當您使用中國字,插入的位置是錯誤的總位置的一半,即如果它應該是第七位,現在插入第三位。

基本上除以2,我猜是因爲Unicode需要兩個字節,而ANSI只需要一個字節。所以,因爲我是一個沒有RTF,RichEdit和Visual Basic 6經驗的假人。

所以我的問題是:當我使用sendMessage行來粘貼圖像時,可以更改圖像的位置嗎?

或通過其他方式來控制插入到RichEdit框中的圖像的位置?

+0

你如何確定插入位置?我只能看到鎖定代碼。 – 2009-01-30 13:37:42

回答

0

我的方法就是這樣,如果你看看rtf.SelRTF屬性,你將能夠準確地看到在RichTextBox中創建視覺的RTF代碼。然後你可以將它保存到一個文件中,用word加載它並移動圖像,直到它位於正確的位置,保存文件並再次查看RTF代碼。在這一點上,您應該足夠了解中文或其他Unicode語言的組合,以構建字符串操作代碼來執行您想要的操作。我並不完全確定每個unicode字符都是2個字節 - 值得檢查一下,如果您認真支持整個範圍。

希望有所幫助。

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