1


0

私たちは RichEditコントロールを持っています。そこにユーザーはhttp://en.wikipedia.orgを挿入することができます。 / wiki / Office_MathML [Office MathML]方程式オブジェクト。

基本的にロジックは次のようになります。ユーザーが数式挿入式をクリックし、外部のMathMLエディターを使用できるようにしてから、式を表す画像をRichEditコントロールに貼り付けます。

'画像をRichTextBoxに貼り付けます。 SendMessage ctlLastFocus.hwnd、WM_PASTE、0、0

その位置を見つけて、それを使ってロックします。

ctlLastFocusを使用して、画像をロックします。SelStart= .SelStart  -  1 .SelLength = 1 .SelProtected = True

それはすべてANSIの美しい世界で素晴らしくて良いです、しかしまた我々は Unnicode文字を許可します、そして私が気づいたのはあなたが漢字を使うとき、その位置は挿入位置が合計位置の半分だけ間違っています。つまり、7番目の位置になるとしたら、3番目に挿入されます。

基本的には2で割っていますが、Unicodeは1バイトしか必要としないANSIと比較して2バイトかかるためです。 だから私は RTF、RichEditそしてVisual Basic 6の経験が全くないダミーだからです。

だから私の質問は:私はsendMessage行を使用して貼り付けるときに画像の位置を変更することはできますか?

それともRichEditボックスに挿入された画像の位置を制御するための何か他の方法で?

2 Answer


0


私のアプローチはこれでしょう、 `rtf.SelRTF`プロパティを見れば、RTFコードがRichTextBoxでビジュアルを作成しているのかを正確に見ることができるでしょう。 それをファイルに保存し、それを言葉でロードして、正しい位置になるまでイメージを移動し、ファイルを保存してRTFコードをもう一度見てください。 その時点で、必要なことを実行するための文字列操作コードを作成するための中国語または他のUnicode言語の組み合わせについて十分に知っておく必要があります。 私はすべてのUnicode文字が2バイトであることを完全には確信していません - あなたが全範囲をサポートすることに真剣であるならばチェックする価値があります。

お役に立てば幸いです。


0


貼り付ける前に位置を取得しないのはなぜですか。

ctlLastFocusの長さと同じ長さの場合はiMartage.hwnd、WM_PASTEの場合は0、0と0の場合はiStartPos、iStartPosの場合はiStartPosと同じ長さとなります。