Partager via


ITextRange ::Move, méthode (tom.h)

Déplace le point d’insertion vers l’avant ou vers l’arrière un nombre spécifié d’unités. Si la plage n’est pas dégénérée, la plage est réduite à un point d’insertion à l’une ou l’autre extrémité, en fonction du nombre, puis est déplacée.

Syntaxe

HRESULT Move(
  long Unit,
  long Count,
  long *pDelta
);

Paramètres

Unit

Type : long

Unité à utiliser. La valeur par défaut est tomCharacter. Pour plus d’informations sur les autres valeurs, consultez la discussion dans ITextRange.

Count

Type : long

Nombre d’unitésà dépasser. La valeur par défaut est 1. Si Nombre est supérieur à zéro, le mouvement est vers l’avant( vers la fin de l’histoire) et si Le nombre est inférieur à zéro, le mouvement est vers l’arrière vers le début. Si Count est égal à zéro, la plage est inchangée.

pDelta

Type : long*

Nombre réel d’unitéspassées par le point d’insertion. Le pointeur peut être NULL. Pour plus d'informations, consultez la section Notes.

Valeur retournée

Type : HRESULT

La méthode retourne une valeur HRESULT . Si la méthode réussit à déplacer le point d’insertion, 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_NOTIMPL
L’unité n’est pas prise en charge.
S_FALSE
Échec pour une autre raison.

Remarques

Si la plage est dégénérée (point d’insertion), cette méthode tente de déplacer le point d’insertion Nombre d’unités.

Si la plage est non dégénérée et que Count est supérieur à zéro, cette méthode réduit la plage à la position du caractère de fin, déplace le point d’insertion résultant vers l’avant vers une limite d’unité (s’il n’est pas déjà à un), puis tente de déplacer Count - 1 Units vers l’avant. Si la plage n’est pas dégénérée et que Count est inférieur à zéro, cette méthode réduit la plage à la position du caractère de début, déplace le point d’insertion résultant vers l’arrière vers une limite d’unité (s’il ne l’est pas déjà à un), puis tente de déplacer |Nombre| - 1 unités vers l’arrière. Ainsi, dans les deux cas, la réduction d’une plage non dégénérée à un point d’insertion, qu’elle passe au début ou à la fin de l’unité après la réduction, compte comme une unité.

La méthode ITextRange ::Move retourne pDelta = nombre d’unitésréellement déplacées. Cette méthode ne déplace jamais le point d’insertion au-delà de l’histoire de cette plage. Si countunits déplace le point d’insertion avant le début de l’histoire, il est déplacé vers le début de l’histoire et pDelta est défini en conséquence. De même, si lesunitésde comptage la déplacent au-delà de la fin de l’histoire, elles sont déplacées vers la fin de l’histoire.

La méthode ITextRange ::Move fonctionne de la même manière que les méthodes MoveLeft et MoveRight orientées vers l’interface utilisateur, sauf que la direction du mouvement est logique plutôt que géométrique. Autrement dit, avec ITextRange ::Move , la direction est soit vers la fin, soit vers le début de l’histoire. Selon la langue, se déplacer vers la fin de l’histoire peut être se déplacer vers la gauche ou vers la droite. Pour avoir une idée du nombre, appuyez sur Ctrl+Flèche droite dans un document Microsoft Word pour diverses sélections. Dans le texte de gauche à droite, cette séquence de touches se comporte comme Move(tomWord, 1), et MoveRight(tomWord, 1). Count correspond au nombre de fois que vous appuyez sur Ctrl+Flèche droite.

Par exemple, si vous appuyez sur Ctrl+Flèche droite pour les sélections affichées dans les deux illustrations suivantes, vous vous retrouvez avec un point d’insertion à la position de caractère 8, car cette commande réduit les sélections à leurs positions de caractères de fin (7 et 8, respectivement) et passe à la limite tomWord suivante.

Positions des caractères pour les chaînes de texte Positions des caractères pour la chaîne de texte La première sélection n’inclut pas l’espace vide à la position de caractère 7. Par conséquent, Ctrl+Flèche droite passe au-delà de l’espace jusqu’à la limite tomWord à la position de caractère 8. La position du caractère de fin étant déjà à une limite tomWord pour la deuxième sélection, ctrl+flèche droite réduit simplement la sélection à cette limite. De même, Ctrl+Flèche gauche, qui pour ce texte agit comme Move(tomWord, -1)et MoveLeft(tomWord, 1) réduit la première sélection à la position de caractère 5, qui se trouve déjà à une limite tomWord , de sorte que plus aucun mouvement ne se produit. Mais Ctrl+Flèche gauche réduit la deuxième sélection à la position de caractère 4, puis passe à zéro, car il s’agit de la limite tomWord suivante dans le sens du mouvement.

L’argument de retour , pDelta, est défini sur le nombre d’unitésdéplacées par le point d’insertion, y compris une unité pour réduire une plage non dégénérée et la déplacer vers une limite d’unité . Ainsi, si aucun mouvement et aucun effondrement ne se produisent, comme lorsque la plage est un point d’insertion à la fin de l’histoire, pDelta est défini sur zéro. Cette approche est utile pour contrôler les boucles de programme qui traitent toute une histoire.

Dans les deux cas mentionnés ci-dessus, l’appel Move(tomWord, 1) de pDelta est égal à 1, car les plages ont été réduites. De même, l’appel Move(tomWord, -1) définit pDelta égal à -1 dans les deux cas. La réduction, avec ou sans déplacement d’une partie d’une unité vers une limite d’unité , compte comme unité déplacée .

Le sens du mouvement fait référence à l’ordre logique des caractères dans le magasin de stockage de texte brut. Cette approche permet d’éviter les problèmes de classement géométrique, comme la gauche et la droite et le haut par rapport au bas, dans les logiciels internationaux. Ces méthodes géométriques sont toujours nécessaires dans le moteur d’édition, bien sûr, car les claviers ont des touches de direction pour les appeler. Si la plage est réellement un objet ITextSelection , des méthodes telles que MoveLeft et MoveRight peuvent être utilisées.

Si Unit spécifie des caractères (tomCharacter), le modèle objet texte (TOM) utilise le jeu de caractères Unicode. Pour effectuer une conversion entre des jeux de caractères Unicode et multioctets, les fonctions MultiByteToWideChar et WideCharToMultiByte permettent de convertir facilement des jeux de caractères Unicode et multioctets lors de l’importation et de l’exportation, respectivement. Pour plus d’informations, consultez Ouvrir. À cet égard, l’utilisation d’un retour chariot/saut de ligne (CR/LF) pour séparer des paragraphes est aussi problématique que le jeu de caractères codés sur deux octets (DBCS). Les méthodes D’interface utilisateur ITextSelection sont sauvegardées sur un CR/LF comme s’il s’agissait d’un caractère unique, mais les méthodes ITextRange ::Move comptent CR/LFs comme deux caractères. Il est clairement préférable d’utiliser un caractère unique comme séparateur de paragraphe, qui dans TOM est représenté par un retour de caractères, bien que le caractère séparateur de paragraphe Unicode, 0x2029, soit accepté. En règle générale, les moteurs TOM doivent prendre en charge cr/LF, retour chariot (CR), saut de ligne (LF), tabulation verticale, flux de formulaire et 0x2029. Microsoft Rich Edit 2.0 prend également en charge CR/CR/LF pour la compatibilité descendante.

Consultez également les méthodes ITextRange ::MoveStart et ITextRange ::MoveEnd, qui déplacent respectivement la plage Nombre d’unités de position dedébut ou de fin.

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

MoveEnd

MoveLeft

MoveRight

MoveStart

MultiByteToWideChar

Ouvrir

Autres ressources

Référence

Modèle objet texte

WideCharToMultiByte