Partager via


Méthode ITextRange ::SetChar (tom.h)

Définit le caractère à la position de départ de la plage.

Syntaxe

HRESULT SetChar(
  long Char
);

Paramètres

Char

Type : long

Nouvelle valeur pour caractère à la position de départ.

Valeur retournée

Type : HRESULT

La méthode retourne une valeur HRESULT . Si la méthode réussit, elle retourne S_OK. Si la méthode échoue, elle retourne l’un des codes d’erreur suivants. Pour plus d’informations sur les codes d’erreur COM, consultez Gestion des erreurs dans COM.

Code de retour Description
E_ACCESSDENIED
Le texte est protégé en écriture.
E_OUTOFMEMORY
Mémoire insuffisante.

Remarques

ITextRange ::SetChar vous permet de spécifier le code de caractère précis à utiliser. Toutefois, les littéraux de chaîne avec des glyphes similaires peuvent être trompeurs.

Les caractères définis par cette méthode sont LONG au lieu d’un BSTR. Cela masque la façon dont ils sont stockés dans le magasin de stockage (sous forme d’octets, de mots, de longueur variable, etc.).

Souvent, sur les systèmes qui n’ont pas d’habillage automatique des mots, les documents ont des retours chariots en dur insérés uniquement pour les sauts de ligne. Le code suivant montre un moyen simple, mais pas parfait, de convertir ce type de chariot dur en vides pour l’histoire associée à la plage r.

    Sub EnableWrap(r As ITextRange)   // Convert false hard CRs to soft
        r.SetRange 0, 0               // r is set at start of story
        While r.Move(tomParagraph)    // Go to start of next paragraph
            If r.MoveWhile(C1_WHITE, 1) = 0 Then    // Next char isn't white space
                r.Move tomCharacter, -1
                r.SetChar = Asc(" ")    // Replace CR by blank
            End If
        Wend        // Loop till no more CRs in story
    End Sub

Vous pouvez également utiliser ce qui suit à l’intérieur de la boucle IF.

r.MoveStart tomCharacter, -1        // Select previous char (the CR)
r = " "        // Replace it with a blank

Cette approche vous permet d’encapsuler le texte sur d’autres largeurs. Toutefois, l’algorithme n’est pas parfait : il suppose qu’un retour chariot dur suivi d’autres éléments que des espaces blancs (vide, tabulation, flux de ligne, retour chariot, etc.) doit être remplacé par un vide. L’algorithme suppose également que le caractère de retour chariot est un caractère unique comme le retour chariot ou le caractère de fin de paragraphe Unicode (EOP) 0x2029. De plus, la combinaison retour chariot et flux de ligne n’est pas mise en correspondance et nécessite l’écriture et l’exécution de code supplémentaire (ou utilisez FindText(^p)). Une autre attention est qu’il existe d’autres cas, tels que le code mixte et la documentation, où l’algorithme ne fonctionne pas correctement.

Toutefois, ITextRange ::SetChar est plus efficace qu’une opération de remplacement effectuée par une suppression suivie d’une insertion. Par conséquent, la réécriture du code sans utiliser ITextRange ::SetChar serait probablement beaucoup plus lente.

La propriété Char , qui peut effectuer la plupart des opérations d’une collection de caractères, présente deux grands avantages : elle peut référencer n’importe quel caractère de l’histoire parente au lieu d’être limitée à la plage parente, et elle est beaucoup plus rapide, car les objets LONGplutôt que de plage sont impliqués. En raison de ces avantages, le modèle objet texte (TOM) ne prend pas en charge une collection de caractères.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête tom.h
DLL Msftedit.dll

Voir aussi

Conceptuel

ITextRange

Référence

Modèle objet texte