Metodo ITextRange::Move (tom.h)

Sposta il punto di inserimento avanti o indietro in base a un numero specificato di unità. Se l'intervallo non viene generato, l'intervallo viene compresso in un punto di inserimento a entrambe le estremità, a seconda del conteggio e quindi viene spostato.

Sintassi

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

Parametri

Unit

Tipo: long

Unità da usare. Il valore predefinito è tomCharacter. Per informazioni su altri valori, vedere la discussione in ITextRange.

Count

Tipo: long

Numero di unitàda passare. Il valore predefinito è 1. Se Count è maggiore di zero, il movimento è in avanti, verso la fine della storia, e se Count è minore di zero, il movimento è indietro verso l'inizio. Se Count è zero, l'intervallo rimane invariato.

pDelta

Tipo: long*

Il numero effettivo di Unitàviene spostato oltre il punto di inserimento. Il puntatore può essere NULL. Per altre informazioni, vedere la sezione Osservazioni.

Valore restituito

Tipo: HRESULT

Il metodo restituisce un valore HRESULT . Se il metodo riesce a spostare il punto di inserimento, restituisce S_OK. Se il metodo ha esito negativo, restituisce uno dei codici di errore seguenti. Per altre informazioni sui codici di errore COM, vedere Gestione degli errori in COM.

Codice restituito Descrizione
E_NOTIMPL
L'unità non è supportata.
S_FALSE
Errore per un altro motivo.

Commenti

Se l'intervallo viene degenerato (un punto di inserimento), questo metodo tenta di spostare l'unitàdi conteggio dei punti di inserimento.

Se l'intervallo non è generato e Count è maggiore di zero, questo metodo comprime l'intervallo nella posizione del carattere finale, sposta il punto di inserimento risultante in avanti a un limite di unità (se non è già presente) e quindi tenta di spostare Count - 1 Units avanti. Se l'intervallo non è generato e Count è minore di zero, questo metodo comprime l'intervallo nella posizione del carattere iniziale, sposta il punto di inserimento risultante all'indietro su un limite di unità (se non è già presente) e quindi tenta di spostare |Conteggio | - 1 Unitàall'indietro. Pertanto, in entrambi i casi, comprime un intervallo non generato in un punto di inserimento, sia che si passi all'inizio o alla fine dell'unità dopo il collasso, viene conteggiato come unità.

Il metodo ITextRange::Move restituisce pDelta = numero di unitàeffettivamente spostate. Questo metodo non sposta mai il punto di inserimento oltre il brano di questo intervallo. Se CountUnits sposta il punto di inserimento prima dell'inizio del brano, viene spostato all'inizio del brano e pDelta viene impostato di conseguenza. Analogamente, se CountUnitlo sposta oltre la fine della storia, viene spostato alla fine della storia.

Il metodo ITextRange::Move funziona in modo analogo ai metodi MoveLeft e MoveRight orientati all'interfaccia utente, ad eccezione del fatto che la direzione del movimento è logica anziché geometrica. Ovvero, con ITextRange::Move la direzione è verso la fine o verso l'inizio della storia. A seconda della lingua, lo spostamento verso la fine della storia potrebbe essere spostato a sinistra o a destra. Per ottenere un'idea di Count, premere CTRL+FRECCIA DESTRA in un documento di Microsoft Word per una serie di selezioni. Nel testo da sinistra a destra, questa sequenza di tasti si comporta come Move(tomWord, 1), e MoveRight(tomWord, 1). Count corrisponde al numero di volte in cui si preme CTRL+FRECCIA DESTRA.

Ad esempio, se si preme CTRL+Freccia destra per le selezioni visualizzate in entrambe le figure seguenti, si raggiunge un punto di inserimento nella posizione del carattere 8, poiché questo comando comprime le selezioni alle rispettive posizioni di carattere finale (rispettivamente 7 e 8) e si sposta al limite tomWord successivo.

Posizioni carattere per le posizioni carattere stringa di testo Posizione carattere per stringa di testo La prima selezione non include lo spazio vuoto nella posizione del carattere 7, quindi CTRL+Freccia destra sposta oltre lo spazio al limite tomWord nella posizione del carattere 8. La posizione del carattere finale si trova già in corrispondenza di un limite tomWord per la seconda selezione, quindi CTRL+Freccia destra comprime la selezione in corrispondenza di tale limite. Analogamente, CTRL+Freccia sinistra, che per questo testo agisce come Move(tomWord, -1), e MoveLeft(tomWord, 1) comprime la prima selezione in corrispondenza della posizione del carattere 5, che si trova già in corrispondenza di un limite tomWord , quindi non si verifica più movimento. Ctrl+Freccia sinistra comprime la seconda selezione in corrispondenza della posizione del carattere 4 e quindi passa a zero, poiché questo è il limite tomWord successivo nella direzione del movimento.

L'argomento restituito, pDelta, è impostato uguale al numero di unitàdi cui il punto di inserimento viene spostato, incluso un oggetto Unit per comprimere un intervallo non generato e spostarlo in un limite di unità . Quindi, se non si verifica alcun movimento e nessun collasso, come quando l'intervallo è un punto di inserimento alla fine del brano, pDelta è impostato su zero. Questo approccio è utile per controllare i cicli di programma che elaborano un'intera storia.

In entrambi i casi indicati in precedenza, la chiamata Move(tomWord, 1) a pDelta è uguale a 1 perché gli intervalli sono stati compressi. Analogamente, la chiamata Move(tomWord, -1) imposta pDelta uguale a -1 per entrambi i casi. Comprimere, con o senza spostare parte di un'unità in un limite di unità , viene conteggiato come unità spostata.

La direzione del movimento fa riferimento all'ordinamento dei caratteri logici nell'archivio backing di testo normale. Questo approccio evita i problemi di ordinamento geometrico, ad esempio a sinistra rispetto a destra e verso destra e verso il basso, nel software internazionale. Tali metodi geometrici sono ancora necessari nel motore di modifica, naturalmente, poiché le tastiere hanno tasti di direzione per richiamarli. Se l'intervallo è effettivamente un oggetto ITextSelection , è possibile usare metodi come MoveLeft e MoveRight .

Se Unit specifica i caratteri (tomCharacter), il modello a oggetti di testo (TOM) usa il set di caratteri Unicode. Per eseguire la conversione tra caratteri Unicode e multibyte, le funzioni MultiByteToWideChar e WideCharToMultiByte consentono di eseguire la conversione tra set di caratteri Unicode e multibyte rispettivamente durante l'importazione e l'esportazione. Per altre informazioni, vedere Apri. In questa connessione, l'uso di un ritorno a capo/avanzamento riga (CR/LF) per separare i paragrafi è problematico come il set di caratteri a byte doppio (DBCS). I Metodi dell'interfaccia utente ITextSelection eseguono il backup su un CR/LF come se fosse un singolo carattere, ma i metodi ITextRange::Move contano CR/LFs come due caratteri. È chiaramente preferibile usare un singolo carattere come separatore di paragrafo, che in TOM è rappresentato da un carattere restituito, anche se il carattere separatore di paragrafo Unicode, 0x2029, viene accettato. In generale, i motori TOM devono supportare CR/LF, ritorno a capo (CR), avanzamento linea (LF), tabulazioni verticali, avanzamento modulo e 0x2029. Microsoft Rich Edit 2.0 supporta anche CR/CR/LF per la compatibilità con le versioni precedenti.

Vedere anche i metodi ITextRange::MoveStart e ITextRange::MoveEnd , che spostano rispettivamente l'intervallo Start o End position CountUnit.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione tom.h
DLL Msftedit.dll

Vedi anche

Informazioni concettuali

ITextRange

Moveend

MoveLeft

MoveRight

MoveStart

MultiByteToWideChar

Apri

Altre risorse

Riferimento

Modello a oggetti di testo

WideCharToMultiByte