ITextRange::Move-Methode (tom.h)

Verschiebt die Einfügemarke um eine angegebene Anzahl von Einheiten vorwärts oder rückwärts. Wenn der Bereich nicht degeneriert ist, wird der Bereich je nach Anzahl auf eine Einfügemarke reduziert und dann verschoben.

Syntax

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

Parameter

Unit

Typ: long

Zu verwendende Einheit. Der Standardwert ist tomCharacter. Informationen zu anderen Werten finden Sie in der Diskussion in ITextRange.

Count

Typ: long

Anzahl der Einheiten, die vorbei verschoben werden sollen. Der Standardwert ist 1. Wenn Count größer als 0 (null) ist, ist die Bewegung vorwärts – zum Ende der Geschichte – und wenn Count kleiner als 0 (null) ist, ist die Bewegung rückwärts – zum Anfang hin. Wenn Count null ist, bleibt der Bereich unverändert.

pDelta

Typ: long*

Die tatsächliche Anzahl der Einheiten, an der die Einfügemarke vorbei bewegt wird. Der Zeiger kann NULL sein. Weitere Informationen finden Sie im Abschnitt mit Hinweisen.

Rückgabewert

Typ: HRESULT

Die -Methode gibt einen HRESULT-Wert zurück. Wenn es der Methode gelingt, die Einfügemarke zu verschieben, gibt sie S_OK zurück. Wenn die Methode fehlschlägt, gibt sie einen der folgenden Fehlercodes zurück. Weitere Informationen zu COM-Fehlercodes finden Sie unter Fehlerbehandlung in COM.

Rückgabecode Beschreibung
E_NOTIMPL
Unit wird nicht unterstützt.
S_FALSE
Fehler aus einem anderen Grund.

Hinweise

Wenn der Bereich degeneriert ist (eine Einfügemarke), versucht diese Methode, die Einfügemarke CountUnits zu verschieben.

Wenn der Bereich nicht degeneriert ist und Count größer als 0 (null) ist, reduziert diese Methode den Bereich an der Endzeichenposition, verschiebt die resultierende Einfügemarke nach vorne an eine Einheitsgrenze (sofern sie nicht bereits an einer ist), und versucht dann, Count - 1 Units vorwärts zu verschieben. Wenn der Bereich nicht degeneriert ist und Count kleiner als 0 (null) ist, reduziert diese Methode den Bereich an der Startzeichenposition, verschiebt die resultierende Einfügemarke zurück zu einer Einheitsgrenze (sofern sie noch nicht an einer ist), und versucht dann, |Anzahl| - 1 Einheitrückwärts. Daher zählt in beiden Fällen das Reduzieren eines nicht entarteten Bereichs auf eine Einfügemarke, unabhängig davon, ob er sich nach dem Reduzieren an den Anfang oder das Ende der Einheit bewegt, als Einheit.

Die ITextRange::Move-Methode gibt pDelta = Anzahl der tatsächlich verschobenen Einheitenzurück. Diese Methode verschiebt die Einfügemarke niemals über die Story dieses Bereichs hinaus. Wenn CountUnits die Einfügemarke vor den Anfang der Story verschieben würde, wird sie in den Anfang der Story verschoben, und pDelta wird entsprechend festgelegt. Wenn CountUnits sie über das Ende der Geschichte hinaus verschieben würde, wird sie auf das Ende der Geschichte verschoben.

Die ITextRange::Move-Methode funktioniert ähnlich wie die ui-orientierten MoveLeft - und MoveRight-Methoden , mit der Ausnahme, dass die Bewegungsrichtung logisch und nicht geometrisch ist. Das heißt, mit ITextRange::Move ist die Richtung entweder zum Ende oder zum Anfang der Geschichte. Je nach Sprache kann es sein, sich gegen Ende der Geschichte nach links oder rechts zu bewegen. Um ein Gefühl für Anzahl zu erhalten, drücken Sie STRG+NACH-RECHTS-TASTE in einem Microsoft Word-Dokument für eine Vielzahl von Auswahlmöglichkeiten. In Text von links nach rechts verhält sich diese Tastatureingabe genauso wie Move(tomWord, 1), und MoveRight(tomWord, 1). Count entspricht der Anzahl, mit der Sie STRG+NACH-RECHTS drücken.

Wenn Sie z. B. STRG+NACH-RECHTS für die in den beiden folgenden Abbildungen gezeigten Markierungen drücken, wird an Der Zeichenposition 8 eine Einfügemarke angezeigt, da dieser Befehl die Markierungen an ihrer Endzeichenposition (7 bzw. 8) reduziert und zur nächsten TomWord-Grenze wechselt.

Zeichenpositionen für TextzeichenfolgenZeichenpositionen für Textzeichenfolge Die erste Auswahl enthält nicht den Leerraum an Zeichenposition 7, sodass STRG+NACH-RECHTS-TASTE an Zeichenposition 8 über das Leerzeichen zur tomWord-Grenze verschoben wird. Die Endzeichenposition befindet sich bereits an einer tomWord-Grenze für die zweite Auswahl, sodass STRG+NACH-RECHTS-TASTE die Markierung an dieser Grenze einfach reduziert. Analog dazu dient STRG+NACH-LINKS-TASTE, die sich für diesen Text wie Move(tomWord, -1)verhält und MoveLeft(tomWord, 1) die erste Auswahl an Zeichenposition 5 reduziert, die sich bereits an einer TomWord-Grenze befindet, sodass keine Bewegung mehr auftritt. Strg+NACH-LINKS-TASTE reduziert jedoch die zweite Auswahl an Zeichenposition 4 und verschiebt sich dann auf null, da dies die nächste tomWord-Grenze in Bewegungsrichtung ist.

Das Return-Argument pDelta ist gleich der Anzahl von Einheitenfestgelegt, die die Einfügemarke verschoben wird, einschließlich einer Einheit zum Reduzieren eines nicht entarteten Bereichs und Verschieben an eine Einheitsgrenze . Wenn also keine Bewegung und kein Reduzieren auftreten, z. B. wenn der Bereich eine Einfügemarke am Ende des Storys ist, wird pDelta gleich 0 festgelegt. Dieser Ansatz ist nützlich, um Programmschleifen zu steuern, die eine ganze Geschichte verarbeiten.

In beiden oben genannten Fällen legt das Aufrufen Move(tomWord, 1) von pDelta gleich 1 fest, da die Bereiche reduziert wurden. Ebenso wird beim Aufrufen Move(tomWord, -1) von pDelta für beide Fälle gleich -1 festgelegt. Das Reduzieren mit oder ohne Verschieben eines Teils einer Einheit in eine Einheitsgrenze zählt als verschobene Einheit .

Die Bewegungsrichtung bezieht sich auf die logische Zeichenreihenfolge im Nur-Text-Unterstützungsspeicher. Dieser Ansatz vermeidet die Probleme der geometrischen Reihenfolge, wie z. B. links gegen rechts und oben im Vergleich zu unten, in internationaler Software. Solche geometrischen Methoden sind natürlich weiterhin in der Bearbeitungs-Engine erforderlich, da Tastaturen über Pfeiltasten verfügen, um sie aufzurufen. Wenn der Bereich tatsächlich ein ITextSelection-Objekt ist, können Methoden wie MoveLeft und MoveRight verwendet werden.

Wenn Unit Zeichen (tomCharacter) angibt, verwendet das Text object Model (TOM) den Unicode-Zeichensatz. Um zwischen Unicode- und Multibyte-Zeichensätzen zu konvertieren, bieten die Funktionen MultiByteToWideChar und WideCharToMultiByte einfache Möglichkeiten, beim Import bzw. Export zwischen Unicode- und Multibyte-Zeichensätzen zu konvertieren. Weitere Informationen finden Sie unter Öffnen. In diesem Zusammenhang ist die Verwendung eines Wagenrücklauf-/Zeilenvorschubs (CR/LF) zum Trennen von Absätzen ebenso problematisch wie der Double-Byte-Zeichensatz (Double-Byte Character Set, DBCS). Die ITextSelection UI-Methoden werden über einem CR/LF wie ein einzelnes Zeichen gesichert, aber die ITextRange::Move-Methoden zählen CR/LFs als zwei Zeichen. Es ist deutlich besser, ein einzelnes Zeichen als Absatztrennzeichen zu verwenden, das in TOM durch eine Zeichenrückgabe dargestellt wird, obwohl das Unicode-Absatztrennzeichen 0x2029 akzeptiert wird. Im Allgemeinen sollten TOM-Motoren CR/LF, Carriage Return (CR), Line Feed (LF), vertikale Registerkarte, Formularvorschub und 0x2029 unterstützen. Microsoft Rich Edit 2.0 unterstützt auch CR/CR/LF aus Gründen der Abwärtskompatibilität.

Siehe auch die Methoden ITextRange::MoveStart und ITextRange::MoveEnd , die den Bereich Start- bzw. Endposition CountUnits verschieben.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile tom.h
DLL Msftedit.dll

Siehe auch

Konzept

ITextRange

Moveend

MoveLeft

MoveRight

MoveStart

MultiByteToWideChar

Öffnen

Andere Ressourcen

Referenz

Textobjektmodell

WideCharToMultiByte