Как выровнять положение объекта вставки RichEdit в Visual Basic 6? - PullRequest
0 голосов
/ 12 декабря 2008

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 30 января 2009

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

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 голосов
/ 30 января 2009

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

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

...