Freigeben über


Informationen zum Textobjektmodell

Das Textobjektmodell (TEXT Object Model, TOM) definiert eine Reihe von Textbearbeitungsschnittstellen, die von mehreren Microsoft-Textlösungen unterstützt werden, einschließlich des Rich-Edit-Steuerelements. Dieses Thema bietet eine allgemeine Übersicht über den TOM. 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 enthält Unterstützung für neue Zeichen- und Absatzformateigenschaften, ein Tabellenmodell, mehrfache Auswahl und Inlineobjektunterstützung für Mathematik und Ruby.

Das TOM 2-Objekt der obersten Ebene wird durch die ITextDocument2-Schnittstelle definiert, die Methoden zum Erstellen und Abrufen von Objekten enthält, die in der Objekthierarchie niedriger sind. Für 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-Formatierung hinzufügen müssen, können Sie ITextFont2 - und ITextPara2-Objekte aus einem ITextRange2-Objekt abrufen. ITextFont2 stellt das Programmieräquivalent des Dialogfelds "Microsoft Word-Formatschriftart" bereit, und ITextPara2 stellt das Äquivalent des Word-Dialogfelds "Formatabsatz" bereit.

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

Der Bereich und die Auswahlobjekte umfassen bildschirmorientierte Methoden, mit denen Programme Text auf dem Bildschirm oder Text untersuchen können, der auf dem Bildschirm gescrollt werden kann. Diese Funktionen helfen beispielsweise, Text für Personen mit eingeschränkter Sehkraft 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 Textabschnitte bezeichnet werden. Textabschnitte stellen verschiedene Teile eines Dokuments dar, z. B. den Haupttext des Dokuments, Kopf- und Fußzeilen, Fußnoten, Anmerkungen und Rich-Text-Scratchpads. Eine Entwurfsgeschichte wird beim Übersetzen zwischen linear formatierten mathematischen Ausdrücken und einer aufgebauten Form verwendet. Ein Scratchpad wird auch verwendet, um den Inhalt eines Bereichs zu speichern, der die aktuelle Kopierquelle ist, bevor der Inhalt geändert wird.

Ein ITextRange2-Objekt wird durch seine Anfangs- und Endzeichenpositionsversatz und ein Story-Objekt definiert. Es existiert nicht unabhängig von seinem übergeordneten Geschichtensegmentobjekt, 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; Beispiel: Zeilen-/Spalten- oder Grafikposition (x, y). Ein Textbereichsobjekt kann sich auf verschiedene Arten ändern, ein Duplikat von sich selbst zurückgeben, und es kann befehligt werden, seine Anfangs- und Endzeichenpositionen und den Textabschnittzeiger auf die aktuelle Auswahl zu kopieren.

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

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

Die ITextRow-Schnittstelle zusammen mit den Methoden "ITextRange::Move " und "ITextRange::Expand" ermöglichen 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 folgendes: Wenn die Bearbeitungsinstanz, die einem TOM-Objekt wie ITextRange zugeordnet ist, gelöscht wird, wird das TOM-Objekt nutzlos, und alle zugehörigen Methoden geben CO_E_RELEASED zurück.

Zusätzlich zu den HRESULT-Rückgabewerten enthalten viele Methoden Ausgabeparameter, die Zeiger sind, die zum Zurückgeben von Werten verwendet werden. Für alle Schnittstellen sollten Sie alle Zeigerparameter überprüfen, um sicherzustellen, dass sie nicht 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 Ausgabezeiger 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 Variablentyp namens "tomBool" für Rich-Text-Attribute, die binäre Zustände aufweisen. Der TomBool-Typ unterscheidet sich vom booleschen Typ, da er vier Werte annehmen kann: tomTrue, tomFalse, tomToggle und tomUndefined. Die TomTrue - und tomFalse-Werte geben wahr und falsch an. Der TomToggle-Wert wird zum Umschalten einer Eigenschaft verwendet. Der tomUndefined-Wert , der traditionell NINCH genannt wird, ist ein spezieller No-Input-, No-Change-Wert, der mit Longs, Floats und COLORREFs funktioniert. Für Zeichenfolgen wird tomUndefined (oder NINCH) durch die NULL-Zeichenfolge dargestellt. Bei Eigenschaftseinstellungsvorgängen ändert die Verwendung von tomUndefined die Zieleigenschaft nicht. TomUndefined bedeutet für Eigenschaftserreichungsvorgänge, dass die Zeichen im Bereich unterschiedliche Werte aufweisen (es wird das graue Kontrollkästchen in Eigenschaftendialogfeldern angezeigt).

Mathematisches BuildUp und Build down

Mit der ITextRange2::BuildUpMath-Methode können Sie linear formatierte mathematische Ausdrücke in integrierte Versionen konvertieren. Die ITextRange2::Linearize-Methode führt die entgegengesetzte Konvertierung aus, die als Linearisierung oder Build down bezeichnet wird, um integrierte Versionen von mathematischen Ausdrücken wieder in ein lineares 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 Gruppen 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-Absatzkontrollwörter

Steuerwort Bedeutung
\ fi n Erstzeileneinzug (der Standardwert ist Null).
\behalten Behalten Sie den Absatz intakt.
\ behalten Gehen Sie zum nächsten Absatz über.
\ li n Einzug von links (der Standardwert ist Null).
\ Noline Keine Zeilennummerierung.
\ nowidctlpar Deaktivieren Sie die Kontrolle über Witwen/Verwaiste.
\ pagebb Seitenumbruch vor dem Absatz.
\Par Neuer Absatz.
\pard Setzt auf Standardabsatzeigenschaften zurück.
\QL Linksbündig (Standardeinstellung).
\ qr Rechtsbündig ausgerichtet.
\ qj Ausgerichtet.
\qc Zentriert.
\ ri n Rechter Einzug (der Standardwert ist Null).
\ s n Formatvorlage n.
\ sa n Leerzeichen nach (der Standardwert ist Null).
\ sb n Leerzeichen davor (der Standardwert ist Null).
\ sl n Wenn n fehlt oder n=1000 ist, wird der Zeilenabstand durch das höchste Zeichen in der Zeile (Einzeilenabstand) bestimmt; wenn n> kleiner als null ist, wird mindestens diese Größe verwendet; wenn n null ist, wird genau |n| verwendet. Der Zeilenabstand ist ein mehrfacher Zeilenabstand, wenn \ slmult 1 folgt.
\ slmult m Folgends \ sl. m = null: Mindestens oder Genau Zeilenabstand wie beschrieben bei \ sl n. m = 1: Zeilenabstand = n/240 mal einfacher Zeilenabstand.
\ tb n Tabulatorposition in Twips vom linken Rand.
\ tldot Tabulatorpunkte.
\ tleq Füllzeichen Gleichheitszeichen
\ tlhyph Füllstriche für Tabstopps.
\ tlth Tabulator-Füllzeichen dicke Linie.
\ tlul Tabulator-Füllzeichen Strich.
\Tqc Zentrierte Registerkarte.
\ tqdec Dezimaltabulator.
\ tqr Tabstopp rechtsbündig.
\ tx n Tabulatorposition in Twips Maßeinheiten, gemessen vom linken Rand.

 

WÖRTER IM RTF-Zeichenformat

Steuerwort Bedeutung
\ Animation n Legt den Animationstyp auf n fest.
\ b Fettdruck
\Mützen 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 halber Punkt (Der Standardwert ist 24).
\ Hervorheben n Hintergrundfarbe (der Standardwert ist tomAutocolor).
\i Kursiv.
\ impr Abdruck.
\ lang n Wendet eine Sprache auf ein Zeichen an. n ist eine Zahl, die einer Sprache entspricht. Das Wort "\ einfaches Steuerelement" setzt die Spracheigenschaft auf die von \ deflang n in den Dokumenteigenschaften definierte Sprache zurück.
\ nosupersub Deaktiviert hoch- oder tiefgestellt.
\ outl Umreißen.
\einfach Setzt Zeichenformatierungseigenschaften auf einen von der Anwendung definierten Standardwert zurück. Die zugeordneten Zeichenformatierungseigenschaften (die im Abschnitt "Associated Character Properties" in der RTF-Spezifikation beschrieben werden) werden ebenfalls zurückgesetzt.
\ scaps Kleine Großbuchstaben.
\Maifisch Schatten.
\Schlag Durchgestrichen.
\sub Wendet tiefgestellt auf Text an und reduziert den Schriftgrad entsprechend den Schriftinformationen.
\super Wendet hochgestellten Text an und reduziert die Schriftgröße gemäß den Schriftinformationen.
\Ul Fortlaufende Unterstreichung. \ ul0 deaktiviert alle Unterstreichungen.
\ uld Gepunktete Unterstreichung.
\ uldb Doppelte Unterstreichung.
\ ulnone Stoppt alle Unterstreichungen.
\ ulw Word-Unterstreichung.
\ up n Hochgestellter Text in halben Abständen (Der Standardwert beträgt 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 Suche nach einem solchen Rich-Text ist häufig in der Textverarbeitung erforderlich, obwohl sie nie in einem "was Sie sehen, was Sie bekommen" (WYSIWYG) Textverarbeitung erfüllt wurde. Es gibt eindeutig eine größere Domäne des Rich-Text-Abgleichs, mit der einige Zeichenformatierungseigenschaften ignoriert werden können (oder Absatzformatierungen und/oder Objektinhalte eingeschlossen werden sollen), aber solche Generalisierungen liegen außerhalb des Bereichs dieses Abschnitts.

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

Im folgenden Beispiel wird gezeigt, wie Sie TOM-Methoden verwenden, um Text zu finden, der Kombinationen aus exakter Zeichenformatierung enthält. Der Algorithmus sucht nach dem Klartext im Übereinstimmungsbereich, der pr1 genannt wird. Wenn der Klartext gefunden wird, wird er durch einen Testbereich gekennzeichnet, der pr2 benannt wird. Anschließend werden zwei Einfügemarkenbereiche (prip1 und prip2) verwendet, um den Testbereich zu durchlaufen und die Zeichenformatierung mit der von pr1 zu vergleichen. Wenn sie exakt übereinstimmen, wird der Eingabebereich (angegeben von ppr) aktualisiert, um auf den Text des Testbereichs zu zeigen, und die Funktion gibt die Anzahl der Zeichen im übereinstimmenden Bereich zurück. Zwei ITextFont-Objektepf1 und pf2werden im Zeichenformatierungsvergleich verwendet. Sie sind an die Insertionspunktranges prip1 und prip2 befestigt.

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 Barrierefreiheitsunterstützung über die ITextSelection - und ITextRange-Schnittstellen . 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 dargestellt:

  • Über die Laufobjekttabelle
  • Über die EM_GETOLEINTERFACE Nachricht, die für Fenster-basierte Rich-Edit-Instanzen funktioniert, vorausgesetzt, der Client befindet sich im selben Prozessraum (es ist kein Marshaling erforderlich)

Weitere Informationen finden Sie in der Microsoft Active Accessibility-Spezifikation. Nachdem Sie ein Objekt von einer Bildschirmposition abgerufen haben, können Sie für eine ITextDocument-Schnittstelle verwenden und die RangeFromPoint-Methode aufrufen, um ein leeres Bereichsobjekt an der cp abzurufen, das der Bildschirmposition entspricht.

Schnittstelle der laufenden Objekttabelle

Eine ausgeführte Objekttabelle (ROT) teilt mit, 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 eine TOM-Instanz mit einem Fenster mithilfe eines Monikers im ROT registriert werden. Sie erstellen den Moniker aus einer Zeichenfolge, die den Hexadezimalwert seines HWND enthält. Im folgenden Codebeispiel wird gezeigt, wie dies funktioniert.

// 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 Nachricht bietet eine weitere Möglichkeit, eine IUnknown-Schnittstelle für ein Objekt an einer bestimmten Bildschirmposition abzurufen. Wie in "Interface from Running Object Table" beschrieben, erhalten Sie einen HWND für die Bildschirmposition und senden diese Nachricht dann an diesen HWND. Die EM_GETOLEINTERFACE-Nachricht ist speziell für Rich-Edit und gibt einen Zeiger auf eine IRichEditOle-Schnittstelle in der Variablen zurück, die von lParam adressiert wird.

Hinweis: Wenn ein Zeiger zurückgegeben wird (stellen Sie sicher, dass lParam vor dem Senden der Nachricht auf null gesetzt wird), können Sie die Methode IUnknown::QueryInterface aufrufen, um eine ITextDocument-Schnittstelle zu erhalten. 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 interessanten Orten ankommen. In der folgenden Tabelle werden die nützlichsten Methoden beschrieben.

Methode Wie es die Barrierefreiheit fördert
GetSelection- Diese Methode ermittelt die aktive Auswahl, die für eine Vielzahl von ansichtsorientierten Zwecken verwendet werden kann, z. B. Hervorheben von Text und Scrollen.
RangeFromPoint- Wenn diese Methode für eine aktive Auswahl verwendet wird, wird garantiert ein Bereich abgerufen, der einer bestimmten Ansicht zugeordnet ist.
erweitern Vergrößert einen Textbereich so, dass alle darin enthaltenen Teileinheiten vollständig enthalten sind. Erweitert z. B. den Bereich, Expand(tomWindow) um den sichtbaren Teil des Bereichsabschnitts einzuschließen.
GetDuplicate Wenn diese Methode für eine aktive Auswahl verwendet wird, wird garantiert ein Bereich abgerufen, 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 Markiert Text bis zu einem angegebenen Punkt.

 

Zeichen-Übereinstimmungssätze

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

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

Cset Bedeutung
Ctype1 Kombination von CT_CTYPE1-Typen.
Ctype2 + tomCType2 Jeder 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ßschrift.
C1_LOWER 0x0002 Kleingeschrieben.
C1_DIGIT 0x0004 Dezimalstellen.
C1_SPACE 0x0008 Leerzeichen.
C1_PUNCT 0x0010 Interpunktion.
C1_CNTRL 0x0020 Steuerzeichen.
C1_BLANK 0x0040 Leere Zeichen.
C1_XDIGIT 0x0080 Hexadezimalziffern.
C1_ALPHA 0x0100 Beliebiges sprachliches Zeichen (alphabetisch, Silbenschrift oder ideographisch).
C1_DEFINED 0x0200 Ein definiertes Zeichen, jedoch keins der anderen C1_*-Typen.

 

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

CType2-Name Wert Bedeutung
Stark:
C2_LEFTTORIGHT 0x1 Von links nach rechts.
C2_RECHTSNACHLINKS 0x2 Von rechts nach links.
Schwach:
C2_EUROPENUMBER 0x3 Europäische Zahl, europäische Ziffer.
C2_EUROPESEPARATOR 0x4 Europäisches numerisches Trennzeichen.
C2_EUROPETERMINATOR 0x5 Europäischer numerischer Terminator.
C2_ARABICNUMBER 0x6 Arabische Nummer.
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 sollen Platzhalter für Erweiterungen der POSIX-Typen sein, die für die allgemeine Textverarbeitung oder für die C-Standardbibliotheksfunktionen erforderlich sind.

CType3-Name Wert Bedeutung
C3_NONSPACING 0x1 Nicht-positionierendes Zeichen.
C3_DIACRITIC 0x2 Diakritisches nichtabstandsbildendes Zeichen.
C3_VOWELMARK 0x4 Vokal-nichttrennendes Zeichen.
C3_SYMBOL 0x8 Symbol.
C3_KATAKANA 0x10 Katakana-Zeichen.
C3_HIRAGANA 0x20 Hiragana-Zeichen.
C3_HalbeBreite 0x40 Zeichen mit halber Breite.
C3_FULLWIDTH 0x80 Zeichen mit voller Breite.
C3_Ideogramm 0x100 Ideografisches Zeichen.
C3_KASHIDA 0x200 Arabisches Kashida-Zeichen.
C3_ALPHA 0x8000 Alle sprachlichen Zeichen (alphabetisch, silbisch und ideografisch).
C3_NICHTZUTREFFEND 0x0 Nicht zutreffend.

 

Ein Edit Development Kit (EDK) könnte pVar-Indexdefinitionen für die folgenden Bereiche enthalten, die im Unicode-Standard beschrieben sind.

Zeichensatz Unicode-Bereich Zeichensatz Unicode-Bereich
ASCII 0x0 – 0x7f ANSI (Amerikanisches Institut für Normung) 0x0 – 0xff
ASCIIPrint 0x20 – 0x7e Lateinisch1 0x20 – 0xff
Latin1Supp 0xa0 – 0xff LatinXA 0x100 – 0x17f
LateinischXB 0x180 – 0x24f IPAX 0x250 – 0x2af
SpaceMod 0x2b0 – 0x2ff Kombinierend 0x300 – 0x36f
Griechisch 0x370 – 0x3ff BasicGreek 0x370 – 0x3cf
GreekSymbols 0x3d0 – 0x3ff Kyrillisch 0x400 – 0x4ff
Armenisch 0x530 – 0x58f Hebräisch 0x590 – 0x5ff
BasicHebrew 0x5d0 – 0x5ea HebräischXA 0x590 – 0x5cf
HebräischXB 0x5eb – 0x5ff Arabisch 0x600 – 0x6ff
BasicArabic 0x600 – 0x652 ArabicX 0x653 – 0x6ff
Devanagari 0x900 – 0x97f Bangla 0x980 – 0x9ff
Gurmukhi 0xa00 – 0xa7f Gujarati 0xa80 – 0xaff
Odia 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 Hochsubscript 0x2070 – 0x209f
Währung 0x20a0 – 0x20cf CombMarkSym 0x20d0 – 0x20ff
LetterLike 0x2100 – 0x214f NumberForms 0x2150 – 0x218f
Pfeile 0x2190 – 0x21ff MathOps 0x2200 – 0x22ff
MiscTech 0x2300 – 0x23ff StrgBilder 0x2400 – 0x243f
OptCharRecog 0x2440 – 0x245f EnclAlphaNum 0x2460 – x24ff
Box-Zeichnung 0x2500 – 0x257f Blockelement 0x2580 – 0x259f
GeometShapes 0x25a0 – 0x25ff Verschiedene Symbole 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 Privatnutzung 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
Besonderheiten 0xfff0 – 0xfffd