Informationen zum Textobjektmodell

Das Text object Model (TOM) definiert eine Reihe von Textbearbeitungsschnittstellen, die in unterschiedlichem Maße von mehreren Microsoft-Textlösungen unterstützt werden, einschließlich des umfangreichen Bearbeitungssteuerelements. Dieses Thema bietet eine allgemeine Übersicht über das Inhaltsverzeichnis. Es werden die folgenden Themen erläutert.

TOM Version 2-Objekte

TOM Version 2 (TOM 2) erweitert das ursprüngliche Textobjektmodell; die neuen Schnittstellen werden von den alten abgeleitet. Die aktualisierte TOM-API bietet Unterstützung für neue Zeichen- und Absatzformateigenschaften, ein Tabellenmodell, Mehrfachauswahl und Inlineobjektunterstützung für Mathematik und Ruby.

Das TOM 2-Objekt der obersten Ebene wird von der ITextDocument2-Schnittstelle definiert, die Methoden zum Erstellen und Abrufen von Objekten in der Objekthierarchie enthält. Für die einfache Nur-Text-Verarbeitung können Sie ein ITextRange2-Objekt aus einem ITextDocument2-Objekt abrufen und die meisten Aktionen damit ausführen. Wenn Sie Rich-Text-Formatierungen hinzufügen müssen, können Sie ITextFont2 - und ITextPara2-Objekte aus einem ITextRange2-Objekt abrufen. ITextFont2 stellt das Programmieräquivalent des Dialogfelds "Format-Schriftart" von Microsoft Word bereit, und ITextPara2 stellt das Äquivalent des dialogfelds Word Formatabsatz bereit.

Zusätzlich zu diesen drei Objekten auf niedrigerer Ebene verfügt TOM 2 über ein Auswahlobjekt (ITextSelection2), bei dem es sich um ein ITextRange2-Objekt mit Auswahlherunterhebung und einigen UI-orientierten Methoden handelt.

Die Bereichs- und Auswahlobjekte umfassen bildschirmorientierte Methoden, mit denen Programme Text auf dem Bildschirm oder Text untersuchen können, der auf den Bildschirm scrollen kann. Diese Funktionen helfen beispielsweise, Text für Menschen mit Sehbehinderung zugänglich zu machen.

Jede Schnittstelle mit dem Suffix 2 erbt von der entsprechenden Schnittstelle ohne das Suffix 2. Beispielsweise erbt ITextDocument2 von ITextDocument.

Die TOM 2-Objekte weisen die folgende Hierarchie auf.

ITextDocument2         Top-level editing object
    ITextRange2        Primary text interface: a range of text
        ITextFont2     Character-attribute interface
        ITextPara2     Paragraph-attribute interface
        ITextRow       Table interface
    ITextSelection2    Screen highlighted text range
        ITextRange2    Selection inherits all range methods
    ITextDisplays      Displays collection (not yet defined)
    ITextStrings       Rich-text strings collection
    ITextStoryRanges2  Enumerator for stories in document

Ein ITextDocument2-Objekt beschreibt einen oder mehrere zusammenhängende Textbereiche, die als Stories bezeichnet werden. Storys stellen verschiedene Teile eines Dokuments dar, z. B. den Standard Text des Dokuments, Kopf- und Fußzeilen, Fußnoten, Anmerkungen und Rich-Text-Scratchpads. Bei der Übersetzung zwischen linear formatierten mathematischen Ausdrücken und einem integrierten Formular wird ein Scratchpad-Story verwendet. Ein Scratchpad-Story wird auch verwendet, wenn der Inhalt eines Bereichs gespeichert wird, der die aktuelle Kopierquelle ist, wenn der Inhalt geändert werden soll.

Ein ITextRange2-Objekt wird durch seine Anfangs- und Endzeichenpositionsoffsets und ein Story-Objekt definiert. Es ist nicht unabhängig von seinem übergeordneten Storyobjekt vorhanden, obwohl sein Text in die Zwischenablage oder auf andere Ziele kopiert werden kann. Ein Textbereichsobjekt unterscheidet sich von tabellenkalkulations- und anderen Bereichsobjekten, die durch andere Arten von Offsets definiert werden. z. B. Zeile/Spalte oder Grafikposition (x, y). Ein Textbereichsobjekt kann sich auf verschiedene Weise ändern, ein Duplikat von sich selbst zurückgeben, und es kann aufgefordert werden, seine Anfangs- und Endzeichenpositionen und seinen Story-Zeiger auf die aktuelle Auswahl zu kopieren.

Ein explizites Story-Objekt ist nicht erforderlich, da ein ITextRange-Objekt immer erstellt werden kann, um eine bestimmte Story darzustellen. Insbesondere kann das ITextDocument-Objekt ein ITextStoryRanges-Objekt erstellen, um die Storys im Dokument in Bezug auf Bereiche mit Anfangs- und Endzeichenpositionswerten aufzulisten, die vollständige Geschichten beschreiben (z. B. 0 und tomForward).

Bei einem ITextStoryRanges2-Objekt ist kein explizites Storyobjekt erforderlich, da die einzelnen Storys von einem ITextRange2-Objekt beschrieben werden. Insbesondere kann das ITextDocument2-Objekt ein ITextStoryRanges2-Objekt erstellen, um die Storys im Dokument in Bezug auf Bereiche mit Anfangs- und Endzeichenpositionswerten aufzulisten, die vollständige Geschichten beschreiben (z. B. 0 und tomForward).

Die ITextRow-Schnittstelle zusammen mit den Methoden ITextRange::Move und ITextRange::Expand ermöglicht das Einfügen, Abfragen und Ändern von Tabellen.

TOM-Schnittstellenkonventionen

Alle TOM-Methoden geben HRESULT-Werte zurück. Im Allgemeinen geben die TOM-Methoden die folgenden Standardwerte zurück.

  • E_OUTOFMEMORY
  • E_INVALIDARG
  • E_NOTIMPL
  • E_FILENOTFOUND
  • E_ACCESSDENIED
  • E_FAIL
  • CO_E_RELEASED
  • NOERROR (identisch mit S_OK)
  • S_FALSE

Beachten Sie, dass das TOM-Objekt nutzlos wird, wenn die bearbeitungsbezogene instance, die einem TOM-Objekt wie ITextRange zugeordnet ist, gelöscht wird, und alle seine Methoden CO_E_RELEASED zurückgeben.

Zusätzlich zu den HRESULT-Rückgabewerten enthalten viele Methoden out-Parameter, bei denen es sich um Zeiger handelt, die zum Zurückgeben von Werten verwendet werden. Für alle Schnittstellen sollten Sie alle Zeigerparameter überprüfen, um sicherzustellen, dass sie ungleich null sind, bevor Sie sie verwenden. Wenn Sie einen NULL-Wert an eine Methode übergeben, die einen gültigen Zeiger erfordert, gibt die Methode E_INVALIDARG zurück. Optionale Out-Zeiger mit NULL-Werten werden ignoriert.

Verwenden Sie Methoden mit Get- und Set-Präfixen, um Eigenschaften abzurufen und festzulegen. Boolesche Variablen verwenden tomFalse (0) für FALSE und tomTrue (-1) für TRUE.

TOM-Konstanten werden im TomConstants-Enumerationstyp definiert und beginnen mit dem Präfix tom, z. B. tomWord.

Der tomBool-Typ

Viele TOM-Methoden verwenden einen speziellen Typ von Variablen namens "tomBool" für Rich-Text-Attribute mit binären Zuständen. Der TomBool-Typ unterscheidet sich vom booleschen Typ, da er vier Werte annehmen kann: tomTrue, tomFalse, tomToggle und tomUndefined. Die Werte tomTrue und tomFalse geben true und false an. Der tomToggle-Wert wird verwendet, um eine Eigenschaft umzuschalten. Der tomUndefined-Wert , üblicher als NINCH bezeichnet, ist ein spezieller No-Input-, No-Change-Wert, der mit Longs, floats und COLORREFs funktioniert. Bei Zeichenfolgen wird tomUndefined (oder NINCH) durch die NULL-Zeichenfolge dargestellt. Bei Eigenschafteneinstellungsvorgängen ändert die Verwendung von tomUndefined nicht die Zieleigenschaft. Bei Vorgängen zum Abrufen von Eigenschaften bedeutet tomUndefined , dass die Zeichen im Bereich unterschiedliche Werte aufweisen (es wird das abgeblendete Kontrollkästchen in Eigenschaftendialogfeldern angezeigt).

Mathematischer Aufbau und Aufbau

Sie können die ITextRange2::BuildUpMath-Methode verwenden, um linear formatierte mathematische Ausdrücke in integrierte Versionen zu konvertieren. Die ITextRange2::Linearize-Methode führt die entgegengesetzte Konvertierung durch, die als Linearisierung oder Builddown bezeichnet wird, um erstellte Versionen von mathematischen Ausdrücken wieder in das lineare Format zu konvertieren. Die Mathematische Builddownfunktion ist nützlich, wenn Sie Nur-Text exportieren oder bestimmte Bearbeitungstypen aktivieren müssen.

TOM RTF

In TOM kann der Rich-Text-Austausch durch Sätze expliziter Methodenaufrufe oder durch Übertragungen von Rich-Text im Rich-Text-Format (RTF) erreicht werden. Dieser Abschnitt enthält Tabellen mit RTF-Steuerelementwörtern für Absatzeigenschaften und für Zeicheneigenschaften.

TOM RTF Paragraph Control Wörter

Steuerelementwort Bedeutung
\ fi n Erstzeileneinzug (der Standardwert ist 0).
\Halten Der Absatz bleibt erhalten.
\ keepn Behalten Sie den nächsten Absatz bei.
\ li n Linker Einzug (der Standardwert ist 0).
\ noline Keine Zeilennummerierung.
\ nowidctlpar Deaktivieren Sie das witwen-/verwaiste Steuerelement.
\ pagebb Seite vor Absatz umbrechen.
\Par Neuer Absatz.
\ pard Wird auf Standardabsatzeigenschaften zurückgesetzt.
\Ql Linksbündig (Standard).
\Qr Rechtsbündig.
\Qj Blocksatz.
\Qc Zentriert.
\ ri n Rechtseinzug (der Standardwert ist 0).
\ s n Format n.
\ sa n Leerzeichen nach (der Standardwert ist 0).
\ sb n Leerzeichen vor (der Standardwert ist 0).
\ sl n Wenn der Zeilenabstand fehlt oder n=1000 ist, wird der Zeilenabstand durch das höchste Zeichen in der Zeile bestimmt (einzeilige Abstände); wenn n> null, wird mindestens diese Größe verwendet; wenn n null ist < , genau | n| wird verwendet. Der Zeilenabstand ist mehrzeilig, wenn \slmult 1 folgt.
\ slmult m Folgt \sl. m = null: Mindestens oder Genau Zeilenabstand, wie von \ sl n beschrieben. m = 1: Zeilenabstand = n/240 mal einzeiligen Abstand.
\ tb n Position der Balkenregisterkarte in Twips vom linken Rand.
\ tldot Registerkartenführerpunkte.
\ tleq Tabulatorleiter gleich Vorzeichen.
\ tlhyph Tabstopp-Bindestriche.
\ tlth Registerkartenführer dicke Linie.
\ tlul Unterstreichung der Registerkartenleiter.
\Tqc Zentrierte Registerkarte.
\ tqdec Registerkarte "Dezimal"
\ tqr Registerkarte "Rechts leer".
\ tx n Tabulatorposition in Twips vom linken Rand.

 

TOM RTF-Zeichenformat-Steuerelementwörter

Wort steuern Bedeutung
\ animation n Legt den Animationstyp auf n fest.
\B Fettdruck
\Caps Alle Großbuchstaben.
\ cf n Vordergrundfarbe (der Standardwert ist tomAutocolor).
\ cs n Zeichenformat n.
\ dn n Tiefgestellte Position in Halbpunkten (der Standardwert ist 6).
\Embo Geprägt.
\ f n Die Schriftartnummer n bezieht sich auf einen Eintrag in der Schriftarttabelle.
\ fs n Schriftgrad in Halbpunkten (Standardwert ist 24).
\ highlight n Hintergrundfarbe (die Standardeinstellung ist tomAutocolor).
\Ich Italic.
\Impr Impressum.
\ lang n Wendet eine Sprache auf ein Zeichen an. n ist eine Zahl, die einer Sprache entspricht. Das Einfache Steuerelementwort \ setzt die Spracheigenschaft auf die Sprache zurück, die in den Dokumenteigenschaften durch \deflang n definiert ist.
\ nosupersub Deaktiviert hoch- oder tiefgestellt.
\ outl Umriss.
\einfach Setzt Zeichenformatierungseigenschaften auf einen von der Anwendung definierten Standardwert zurück. Die zugeordneten Zeichenformatierungseigenschaften (beschrieben im Abschnitt Zugeordnete Zeicheneigenschaften in der RTF-Spezifikation) werden ebenfalls zurückgesetzt.
\ scaps Kleine Großbuchstaben.
\Shad Schatten.
\Schlag Durchgestrichen.
\Sub Wendet tiefgestellten Text an und reduziert die Punktgröße entsprechend den Schriftartinformationen.
\Super Wendet Hochgestellt auf Text an und reduziert die Punktgröße entsprechend den Schriftartinformationen.
\Ul Kontinuierliche Unterstreichung. \ ul0 deaktiviert alle Unterstreichungen.
\Uld Punktierte Unterstreichung.
\ uldb Doppelte Unterstreichung.
\ ulnone Beendet alle Unterstreichungen.
\ ulw Word unterstrichen.
\ bis n Hochgestellte Position in Halbpunkten (Der Standardwert ist 6).
\V Ausgeblendeter Text.

 

Suchen nach Rich Text

Sie können TOM-Methoden verwenden, um Rich-Text zu finden, der durch einen Textbereich definiert ist. Die genaue Suche nach einem solchen Rich-Text wird in der Textverarbeitung häufig benötigt, obwohl es in einer WySIWYG-Textverarbeitung (Was Sie sehen, was Sie sehen, was Sie erhalten) noch nie erfüllt wurde. Es gibt eindeutig eine größere Domäne des Rich-Text-Abgleichs, die es ermöglicht, dass einige Zeichenformatierungseigenschaften ignoriert werden (oder Absatzformatierung und/oder Objektinhalt eingeschlossen werden), aber solche Generalisierungen sprengen den Bereich dieses Abschnitts.

Ein Zweck für diese Funktion besteht darin, ein Rich-Text-Suchen-Dialogfeld zu verwenden, um den Rich-Text zu definieren, den Sie in einem Dokument suchen möchten. Das Dialogfeld wird mithilfe eines Rich-Edit-Steuerelements implementiert, und TOM-Methoden würden verwendet, um die Suche durch das Dokument durchzuführen. Sie können entweder den gewünschten Rich-Text aus dem Dokument in das Dialogfeld Suchen kopieren oder ihn direkt im Dialogfeld Suchen eingeben und formatieren.

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe von TOM-Methoden nach Text suchen, der Kombinationen der exakten Zeichenformatierung enthält. Der Algorithmus sucht den Nur-Text im Übereinstimmungsbereich mit dem Namen pr1. Wenn der Nur-Text gefunden wird, wird von einem Testbereich mit dem Namen pr2darauf verwiesen. Anschließend werden zwei Einfügemarkesbereiche (prip1 und prip2) verwendet, um den Testbereich zu durchlaufen, um seine Zeichenformatierung mit der von pr1zu vergleichen. Wenn sie genau übereinstimmen, wird der Eingabebereich (angegeben durch ppr) aktualisiert, um auf den Text des Testbereichs zu verweisen, und die Funktion gibt die Anzahl der Zeichen im übereinstimmenden Bereich zurück. Beim Vergleich der Zeichenformatierung werden zwei ITextFont-Objektepf1 und pf2verwendet. Sie sind an die Einfügemarkesbereiche prip1 und prip2angefügt.

LONG FindRichText (
    ITextRange **ppr,             // Ptr to range to search
    ITextRange *pr1)              // Range with rich text to find
{
    BSTR        bstr;             // pr1 plain-text to search for
    LONG        cch;              // Text string count
    LONG        cch1, cch2;       // tomCharFormat run char counts
    LONG        cchMatch = 0;     // Nothing matched yet
    LONG        cp;               // Handy char position
    LONG        cpFirst1;         // pr1 cpFirst
    LONG        cpFirst2;         // pr2 cpFirst
    ITextFont  *    pf1, *pf      // Fonts corresponding to IPs prip1 and prip2
    ITextRange *pr2;              // Range duplicate to search with
    ITextRange *prip1, *prip      // Insertion points to walk pr1, pr2

    if (!ppr || !*ppr || !pr1)
        return E_INVALIDARG;

    // Initialize range and font objects used in search
    if ((*ppr)->GetDuplicate(&pr2)    != NOERROR ||
        pr1->GetDuplicate(&prip1)     != NOERROR ||
        pr2->GetDuplicate(&prip2)     != NOERROR ||
        prip1->GetFont(&pf1)          != NOERROR ||
        prip2->GetFont(&pf2)          != NOERROR ||
        pr1->GetText(&bstr)           != NOERROR )
    {
        return E_OUTOFMEMORY;
    }

    pr1->GetStart(&cpFirst1);

    // Keep searching till rich text is matched or no more plain-text hits
    while(!cchMatch && pr2->FindText(bstr, tomForward, 0, &cch) == NOERROR)
    {
        pr2->GetStart(&cpFirst2);                 // pr2 is a new trial range
        prip1->SetRange(cpFirst1, cpFirst1);      // Set up IPs to scan match
        prip2->SetRange(cpFirst2, cpFirst2);      //  and trial ranges

        while(cch > 0 &&
            pf1->IsEqual(pf2, NULL) == NOERROR)   // Walk match & trial ranges
        {                                         //  together comparing font
            prip1->GetStart(&cch1);               //  properties
            prip1->Move(tomCharFormat, 1, NULL);
            prip1->GetStart(&cp);
            cch1 = cp - cch1;                     // cch of next match font run

            prip2->GetStart(&cch2);
            prip2->Move(tomCharFormat, 1, NULL);
            prip2->GetStart(&cp);
            cch2 = cp - cch2;                      // cch of next trial font run

            if(cch1 < cch)                         // There is more to compare
            {
                if(cch1 != cch2)                   // Different run lengths:
                    break;                         //  no formatting match
                cch = cch - cch1;                  // Matched format run
            }
            else if(cch2 < cch)                    // Trial range format run too
                break;                             //  short

            else                                   // Both match and trial runs
            {                                      //  reach at least to match
                pr2->GetEnd(&cp);                  //  text end: rich-text match
                (*ppr)->SetRange(cpFirst2, cp)     // Set input range to hit
                cchMatch = cp - cpFirst2;          //  coordinates and return
                break;                             //  length of matched string
            }
        }
    }
    pr2->Release();
    prip1->Release();
    prip2->Release();
    pf1->Release();
    pf2->Release();
    SysFreeString(bstr);

    return cchMatch;
}

TOM-Barrierefreiheit

TOM bietet Unterstützung für Barrierefreiheit über die Schnittstellen ITextSelection und ITextRange . In diesem Abschnitt werden Methoden beschrieben, die für die Barrierefreiheit nützlich sind, und wie ein Programm die x-, y-Bildschirmposition eines Objekts bestimmen kann.

Da benutzeroberflächenbasierte Barrierefreiheitsprogramme in der Regel mit dem Bildschirm und der Maus arbeiten, besteht ein häufiges Problem darin, die entsprechende ITextDocument-Schnittstelle für die aktuelle Mausposition (in Bildschirmkoordinaten) zu finden. In den folgenden Abschnitten werden zwei Möglichkeiten zum Ermitteln der richtigen Schnittstelle beschrieben:

Weitere Informationen finden Sie in der Microsoft Active-Barrierefreiheitsspezifikation. Nachdem Sie ein Objekt aus einer Bildschirmposition abgerufen haben, können Sie für eine ITextDocument-Schnittstelle verwenden und die RangeFromPoint-Methode aufrufen, um ein leeres Bereichsobjekt am cp zu erhalten, das der Bildschirmposition entspricht.

Schnittstelle aus ausführenden Objekttabellen

Eine laufende Objekttabelle (ROT) gibt an, welche Objektinstanzen aktiv sind. Durch Abfragen dieser Tabelle können Sie den Prozess der Verbindung eines Clients mit einem Objekt beschleunigen, wenn das Objekt bereits ausgeführt wird. Bevor Programme über die ausgeführte Objekttabelle auf TOM-Schnittstellen zugreifen können, muss ein TOM-instance mit einem Fenster in der ROT-Instanz mit einem Moniker registriert werden. Sie erstellen den Moniker aus einer Zeichenfolge, die den Hexadezimalwert ihres HWND enthält. Im folgenden Codebeispiel wird gezeigt, wie dies geschieht.

// This TOM implementation code is executed when a new windowed 
// instance starts up. 
// Variables with leading underscores are members of this class.

HRESULT hr;
OLECHAR szBuf[10];            // Place to put moniker
MONIKER *pmk;

hr = StringCchPrintf(szBuff, 10, "%x", _hwnd);
if (FAILED(hr))
{
    //
    // TODO: write error handler
    //
}
CreateFileMoniker(szBuf, &pmk);
OleStdRegisterAsRunning(this, pmk, &_dwROTcookie);
....................
 
// Accessibility Client: 
//    Find hwnd for window pointed to by mouse cursor.

GetCursorPos(&pt);
hwnd = WindowFromPoint(pt);

// Look in ROT (running object table) for an object attached to hwnd

hr = StringCchPrintf(szBuff, 10, "%x", hwnd);
if (FAILED(hr))
{
    //
    // TODO: write error handler
    //
}
CreateFileMoniker(szBuf, &pmk);
CreateBindContext(0, &pbc);
pmk->BindToObject(pbc, NULL, IID_ITextDocument, &pDoc);
pbc->Release();

if( pDoc )
{
    pDoc->RangeFromPoint(pt.x, pt.y, &pRange);
    // ...now do whatever with the range pRange
}

Schnittstelle aus Fenstermeldungen

Die EM_GETOLEINTERFACE Meldung bietet eine weitere Möglichkeit, eine IUnknown-Schnittstelle für ein Objekt an einer bestimmten Bildschirmposition abzurufen. Wie unter Interface from Running Object Table beschrieben, erhalten Sie eine HWND für die Bildschirmposition und senden diese Nachricht dann an diese HWND. Die EM_GETOLEINTERFACE Nachricht ist rich edit-specific und gibt einen Zeiger auf eine IRichEditOle-Schnittstelle in der Variablen zurück, die von lParam adressiert wird.

Tipp Wenn ein Zeiger zurückgegeben wird (stellen Sie sicher, dass Sie das Objekt festlegen, auf das lParam vor dem Senden der Nachricht auf NULL zeigt), können Sie die IUnknown::QueryInterface-Methode aufrufen, um eine ITextDocument-Schnittstelle abzurufen. Das folgende Codebeispiel veranschaulicht diese Vorgehensweise.

    HWND    hwnd;
    ITextDocument *pDoc;
    ITextRange *pRange;
    POINT    pt;
    IUnknown *pUnk = NULL;
    
    GetCursorPos(&pt);
    hwnd = WindowFromPoint(pt);
    SendMessage(hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pUnk);
    if(pUnk && 
        pUnk->QueryInterface(IID_ITextDocument, &pDoc) == NOERROR)
    {
        pDoc->RangeFromPoint(pt.x, pt.y, &pRange);
        //  ... continue with rest of program
    }

Barrierefreiheitsorientierte Methoden

Einige TOM-Methoden sind besonders nützlich für die Navigation auf dem Bildschirm, während andere TOM-Methoden verbessern, was Sie tun können, wenn Sie an Sehenswürdigkeiten ankommen. In der folgenden Tabelle werden die nützlichsten Methoden beschrieben.

Methode Wie sie die Barrierefreiheit fördert
GetSelection Diese Methode ruft die aktive Auswahl ab, die für eine Vielzahl von ansichtsorientierten Zwecken verwendet werden kann, z. B. textmarkieren und scrollen.
RangeFromPoint Bei Verwendung für eine aktive Auswahl erhält diese Methode garantiert einen Bereich, der einer bestimmten Ansicht zugeordnet ist.
Expand Vergrößert einen Textbereich, sodass alle darin enthaltenen Teileinheiten vollständig enthalten sind. Erweitert beispielsweise den Bereich, Expand(tomWindow) um den sichtbaren Teil der Geschichte des Bereichs einzuschließen.
GetDuplicate Bei Verwendung für eine aktive Auswahl erhält diese Methode garantiert einen Bereich, der einer bestimmten Ansicht zugeordnet ist. Weitere Informationen finden Sie in der Beschreibung von RangeFromPoint.
GetPoint Ruft die Bildschirmkoordinaten für die Start- oder Endzeichenposition im Textbereich ab.
ScrollIntoView Scrollt einen Textbereich in die Ansicht.
Sollwert Wählt Text an oder bis zu einem angegebenen Punkt aus.

 

Zeichensätze

Der Variant-Parameter der verschiedenen Move*-Methoden in ITextRange, z. B. MoveWhile und MoveUntil, kann eine explizite Zeichenfolge oder einen 32-Bit-Zeichensatz-Index annehmen. Die Indizes werden entweder durch Unicode-Bereiche oder GetStringTypeEx-Zeichensätze definiert. Der Unicode-Bereich ab n und der Länge l (< 32768) wird durch den Index n + (l << 16) + 0x80000000 angegeben. Beispielsweise werden grundlegende griechische Buchstaben durch CR_Greek = 0x805f0370 definiert, und druckbare ASCII-Zeichen werden durch CR_ASCIIPrint = 0x805e0020 definiert. Darüber hinaus können Sie mit den Methoden MoveWhile und MoveUntil eine Spanne von Zeichen in jedem GetStringTypeEx-Zeichensatz oder in einer Spanne von Zeichen, die sich in keinem dieser Zeichensätze befindet, schnell umgehen.

Die GetStringTypeEx-Sätze werden durch die Werte für Ctype1, Ctype2 und Ctype3 angegeben und wie folgt definiert.

Cset Bedeutung
Ctype1 Kombination von CT_CTYPE1 Typen.
Ctype2 + tomCType2 Ein beliebiger CT_CTYPE2-Typ.
Ctype3 + tomCType3 Kombination von CT_CTYPE3 Typen.

 

Insbesondere kann Ctype1 eine beliebige Kombination der folgenden Sein.

Ctype1-Name Wert Bedeutung
C1_UPPER 0x0001 Großbuchstaben.
C1_LOWER 0x0002 Kleinbuchstaben.
C1_DIGIT 0x0004 Dezimalstellen.
C1_SPACE 0x0008 Leerzeichen.
C1_PUNCT 0x0010 Interpunktion.
C1_CNTRL 0x0020 Steuerzeichen.
C1_BLANK 0x0040 Leere Zeichen.
C1_XDIGIT 0x0080 Hexadezimalstellen.
C1_ALPHA 0x0100 Beliebige linguistische Zeichen (alphabetisch, silbenhaft oder ideografisch).
C1_DEFINED 0x0200 Ein definiertes Zeichen, aber nicht einer der anderen C1_*-Typen.

 

Die Ctype2-Typen unterstützen das richtige Layout von Unicode-Text. Die Richtungsattribute werden zugewiesen, sodass der bidirektionale Layoutalgorithmus, der von Unicode standardisiert ist, genaue Ergebnisse erzeugt. Diese Typen schließen sich gegenseitig aus. Weitere Informationen zur Verwendung dieser Attribute finden Sie unter The Unicode Standard: Worldwide Character Encoding, Volume 1 and 2, Addison-Wesley Publishing Company: 1991, 1992.

CType2-Name Wert Bedeutung
Stark:
C2_LEFTTORIGHT 0x1 Von links nach rechts.
C2_RIGHTTOLEFT 0x2 Von rechts nach links.
Schwach:
C2_EUROPENUMBER 0x3 Europäische Nummer, europäische Ziffer.
C2_EUROPESEPARATOR 0x4 Europäisches numerisches Trennzeichen.
C2_EUROPETERMINATOR 0x5 Europäischer numerischer Abschluss.
C2_ARABICNUMBER 0x6 Arabische Zahl.
C2_COMMONSEPARATOR 0x7 Allgemeines numerisches Trennzeichen.
Neutral:
C2_BLOCKSEPARATOR 0x8 Blocktrennzeichen.
C2_SEGMENTSEPARATOR 0x9 Segmenttrennzeichen.
C2_WHITESPACE 0xA Leerraum.
C2_OTHERNEUTRAL 0xB Andere Neutrale.
Nicht zutreffend:
C2_NOTAPPLICABLE 0x0 Keine implizite Richtung.

 

Die Ctype3-Typen sind als Platzhalter für Erweiterungen der POSIX-Typen vorgesehen, die für die allgemeine Textverarbeitung oder für die Standardfunktionen der C-Bibliothek erforderlich sind.

CType3-Name Wert Bedeutung
C3_NONSPACING 0x1 Nonspacing-Markierung.
C3_DIACRITIC 0x2 Diakritisches Nonspacing-Zeichen.
C3_VOWELMARK 0x4 Vokal-Nonspacing-Markierung.
C3_SYMBOL 0x8 Symbol.
C3_KATAKANA 0x10 Katakana-Zeichen.
C3_HIRAGANA 0x20 Hiragana-Zeichen.
C3_HALFWIDTH 0x40 Zeichen mit halber Breite.
C3_FULLWIDTH 0x80 Zeichen mit voller Breite.
C3_IDEOGRAPH 0x100 Ideografisches Zeichen.
C3_KASHIDA 0x200 Arabisches Kashida-Zeichen.
C3_ALPHA 0x8000 Alle linguistischen Zeichen (alphabetisch, silbenhaft und ideografisch).
C3_NOTAPPLICABLE 0x0 Nicht zutreffend

 

Ein Edit Development Kit (EDK) kann pVar-Indexdefinitionen für die folgenden bereiche enthalten, die im Unicode-Standard beschrieben sind.

Zeichensatz Unicode-Bereich Zeichensatz Unicode-Bereich
ASCII 0x0 – 0x7f ANSI 0x0 – 0xff
ASCIIPrint 0x20 – 0x7e Lateinisch1 0x20 – 0xff
Latin1Supp 0xa0 – 0xff LatinXA 0x100 – 0x17f
LatinXB 0x180 – 0x24f IPAX 0x250 – 0x2af
SpaceMod 0x2b0 – 0x2ff Kombination 0x300 – 0x36f
Griechisch 0x370 – 0x3ff BasicGreek 0x370 – 0x3cf
GreekSymbols 0x3d0 – 0x3ff Kyrillisch 0x400 – 0x4ff
Armenisch 0x530 – 0x58f Hebräisch 0x590 – 0x5ff
BasicHebrew 0x5d0 – 0x5ea HebrewXA 0x590 – 0x5cf
HebräischXB 0x5eb – 0x5ff Arabisch 0x600 – 0x6ff
BasicArabic 0x600 – 0x652 ArabicX 0x653 – 0x6ff
Devangari 0x900 – 0x97f Bangla (ehemals bengalisch) 0x980 – 0x9ff
Gurmukhi 0xa00 – 0xa7f Gujarati 0xa80 – 0xaff
Odia (ehemals Oriya) 0xb00 – 0xb7f Tamilisch 0xb80 – 0xbff
Teluga 0xc00 – 0xc7f Kannada 0xc80 – 0xcff
Malayalam 0xd00 – 0xd7f Thailändisch 0xe00 – 0xe7f
Laotisch 0xe80 – 0xeff GeorgianX 0x10a0 – 0xa0cf
BascGeorgian 0x10d0 – 0x10ff Jamo 0x1100 – 0x11ff
LatinXAdd 0x1e00 – 0x1eff GreekX 0x1f00 – 0x1fff
GenPunct 0x2000 – 0x206f Hochgestellt 0x2070 – 0x207f
Tiefgestellt 0x2080 – 0x208f SuperSubscript 0x2070 – 0x209f
Währung 0x20a0 – 0x20cf CombMarkSym 0x20d0 – 0x20ff
Letterlike 0x2100 – 0x214f NumberForms 0x2150 – 0x218f
Pfeile 0x2190 – 0x21ff MathOps 0x2200 – 0x22ff
MiscTech 0x2300 – 0x23ff STRGPictures 0x2400 – 0x243f
OptCharRecog 0x2440 – 0x245f EnclAlphanum 0x2460 – x24ff
BoxDrawing 0x2500 – 0x257f BlockElement 0x2580 – 0x259f
GeometShapes 0x25a0 – 0x25ff MiscSymbols 0x2600 – 0x26ff
Dingbats 0x2700 – 0x27bf CJKSymPunct 0x3000 – 0x303f
Hiragana 0x3040 – 0x309f Katakana 0x30a0 – 0x30ff
Bopomofo 0x3100 – 0x312f HangulJamo 0x3130 – 0x318f
CJLMisc 0x3190 – 0x319f EnclCJK 0x3200 – 0x32ff
CJKCompatibl 0x3300 – 0x33ff Han 0x3400 – 0xabff
Hangul 0xac00 – 0xd7ff UTF16Lead 0xd800 – 0xdbff
UTF16Trail 0xdc00 – 0xdfff PrivateUse 0xe000 – 0xf800
CJKCompIdeog 0xf900 – 0xfaff AlphaPres 0xfb00 – 0xfb4f
ArabicPresA 0xfb50 – 0xfdff CombHalfMark 0xfe20 – 0xfe2f
CJKCompForm 0xfe30 – 0xfe4f SmallFormVar 0xfe50 – 0xfe6f
ArabicPresB 0xfe70 – 0xfefe HalfFullForm 0xff00 – 0xffef
Specials 0xfff0 – 0xfffd