2008-12-12 12 views
1

Nous avons un contrôle RichEdit dans lequel nous permettons à l'utilisateur d'insérer un objet d'équation Office MathML.Comment aligner la position de l'objet de collage RichEdit dans Visual Basic 6?

Fondamentalement, la logique va comme ceci: l'utilisateur clique sur l'équation d'insertion de mathématiques, nous leur permettre d'utiliser un éditeur MathML externe, nous allons coller une image pour représenter l'équation dans le contrôle RichEdit:

' Paste the picture into the RichTextBox. 
    SendMessage ctlLastFocus.hwnd, WM_PASTE, 0, 0 

Trouver sa position et le verrouiller à l'aide:

With ctlLastFocus 
     'lock the image 
     .SelStart = .SelStart - 1 
     .SelLength = 1 
     .SelProtected = True 

il est tout beau et bien dans le beau monde de la norme ANSI, mais nous permettons aussi Unicode personnages, et ce que je l'ai remarqué est que lorsque vous utilisez des caractères chinois, la position de l'insertion est fausse de la moitié de la position totale, c'est-à-dire si elle est supposée être la 7e position maintenant, elle est insérée au troisième.

Fondamentalement divisé par deux, je suppose que l'Unicode prend deux octets par rapport à ANSI qui n'en nécessite qu'un seul. Donc, parce que je suis un mannequin sans expérience avec le RTF, RichEdit et Visual Basic 6.

Donc ma question est: puis-je changer la position de l'image lorsque je la collez en utilisant la ligne sendMessage?

Ou via un autre moyen de contrôler la position de l'image insérée dans la zone RichEdit?

+0

Comment déterminez-vous la position d'insertion? Je ne peux voir que le code de verrouillage. –

Répondre

0

Mon approche serait la suivante, si vous regardez la propriété rtf.SelRTF, vous serez capable de voir exactement quel est le code RTF qui crée le visuel dans la RichTextBox. Vous pouvez ensuite enregistrer cela dans un fichier, le charger dans Word et déplacer l'image jusqu'à ce qu'il soit au bon endroit, enregistrer le fichier et regarder le code RTF à nouveau. À ce stade, vous devriez en savoir assez sur la combinaison de chinois ou d'autres langues Unicode pour construire le code de manipulation de chaîne pour faire ce que vous voulez. Je ne suis pas tout à fait sûr que chaque caractère Unicode est de 2 octets - vaut la peine de vérifier si vous êtes sérieux au sujet de la prise en charge de la gamme complète.

Espérons que ça aide. Pourquoi ne pas récupérer la position avant de coller?

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