Как выровнять позицию вставки RichEdit в Visual Basic 6?

У нас есть элемент управления 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, но мы также допускаем символы Юникода , и я заметил, что когда вы используете китайские символы, позиция вставки неверна на половину общей позиции, то есть если предполагается чтобы быть 7-ой позицией, теперь он вставлен в третью.

По сути, я делю на два, потому что Unicode занимает два байта по сравнению с ANSI, который требует только один. Потому что я - дурачок без опыта работы с RTF , RichEdit и Visual Basic 6.

Поэтому мой вопрос: могу ли я изменить положение изображения, когда я вставляю его, используя строку sendMessage?

Или каким-либо другим способом контролировать положение изображения, вставленного в поле RichEdit?

12.12.2008 10:04:33
Как вы определяете положение вставки? Я могу видеть только код блокировки.
Daniel Rikowski 30.01.2009 13:37:42
2 ОТВЕТА

Мой подход заключается в следующем: если вы посмотрите на rtf.SelRTFсвойство, то сможете точно увидеть, что такое код RTF, который создает визуал в RichTextBox. Затем вы можете сохранить это в файл, загрузить его словом и переместить изображение, пока оно не окажется в нужном месте, сохранить файл и снова посмотреть код RTF. На этом этапе вы должны знать достаточно о комбинации китайского или других языков Unicode, чтобы создать код для манипуляции со строками, который будет выполнять то, что вы хотите. Я не совсем уверен, что каждый символ Unicode составляет 2 байта - стоит проверить, если вы серьезно относитесь к поддержке полного диапазона.

Надеюсь, это поможет.

0
30.01.2009 13:34:21

Почему бы не восстановить позицию перед вставкой?

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
0
6.05.2018 17:52:16