Text- und TextRange-Steuerelementmuster

Beschreibt Richtlinien und Konventionen für die Implementierung von ITextProvider, ITextProvider2 und ITextRangeProvider, einschließlich Informationen zu Eigenschaften und Methoden. Mit dem Text-Steuerelementmuster können Anwendungen und Steuerelemente ein einfaches Textobjektmodell verfügbar machen, sodass Clients Textinhalte, Textattribute und eingebettete Objekte aus textbasierten Steuerelementen abrufen können.

Um das Text-Steuerelementmuster zu unterstützen, implementieren Steuerelemente die Schnittstellen ITextProvider und ITextProvider2 . Steuerelementtypen, die das Text-Steuerelementmuster unterstützen sollten, umfassen die Steuerelementtypen Bearbeiten und Dokument sowie alle anderen Steuerelementtypen, mit denen der Benutzer Text eingeben oder schreibgeschützten Text auswählen kann.

Das Text-Steuerelementmuster kann mit anderen Microsoft Benutzeroberflächenautomatisierung-Steuerelementmustern verwendet werden, um verschiedene Typen eingebetteter Objekte im Text zu unterstützen, einschließlich Tabellen, Hyperlinks und Befehlsschaltflächen.

Die Schnittstellen ITextProvider und ITextProvider2 enthalten eine Reihe von Methoden zum Abrufen von Textbereichen. Ein Textbereich ist ein Objekt, das eine zusammenhängende Textspanne ( oder mehrere, zusammenhängende Textspannen) in einem Textcontainer darstellt. Eine ITextProvider-Methode ruft einen Textbereich ab, der das gesamte Dokument darstellt, während andere Textbereiche abrufen, die einen Teil des Dokuments darstellen, z. B. den markierten Text, den sichtbaren Text oder ein in den Text eingebettetes Objekt.

Ein Textbereichsobjekt wird durch das TextRange-Steuerelementmuster dargestellt, das über die ITextRangeProvider-Schnittstelle implementiert wird. Das TextRange-Steuerelementmuster stellt Methoden und Eigenschaften bereit, die verwendet werden, um Informationen über den Text im Bereich verfügbar zu machen, die Endpunkte des Bereichs zu verschieben, Text auszuwählen oder zu deaktivieren, den Bereich in die Ansicht zu scrollen usw.

Weitere Informationen zu den Text- und TextRange-Steuerelementmustern finden Sie unter Benutzeroberflächenautomatisierung Unterstützung für Textinhalt.

Ab Windows 8.1 Können Anbieter die ITextRangeProvider2-Schnittstelle implementieren. Dadurch können Kontextmenüs aufgerufen werden, die einem Textbereich zugeordnet sind. Dies unterstützt Szenarien wie die Textautokorrektur oder die Auswahl von Kandidaten für den Eingabemethoden-Editor (IME).

Dieses Thema enthält folgende Abschnitte:

Implementierungsrichtlinien und -konventionen

Beachten Sie beim Implementieren des Text-Steuerelementmusters die folgenden Richtlinien und Konventionen:

  • Jedes Steuerelement, das den Zugriff auf Text ermöglicht (z. B. Texteingabe oder Auswählen von schreibgeschütztem Text), sollte das Text-Steuerelementmuster unterstützen.
  • Das Text-Steuerelementmuster kann mit jedem UI-Element verwendet werden, das Text darstellt, auch mit einer statischen Bezeichnung in einem Standard-Schaltflächensteuerelement. Sie ist jedoch nicht für statische Textsteuerelemente erforderlich, die nicht ausgewählt werden können oder über keine Einfügemarke verfügen.
  • Um sicherzustellen, dass vollständig auf Text zugegriffen werden kann, sollten Steuerelemente, die ITextProvider implementieren, auch die IValueProvider-Schnittstelle unterstützen. IValueProvider ergänzt ITextProvider durch eine programmgesteuerte Möglichkeit zum Ändern des Texts. Es bietet auch eine bessere Kompatibilität mit Hilfstechnologien-Clientanwendungen, einschließlich solcher, die auf Legacytechnologien wie Microsoft Active Accessibility basieren. Wenn beide Steuerelementmuster implementiert sind, sind das TextChanged-Ereignis (UIA_Text_TextChangedEventId) und das AutomationPropertyChanged-Ereignis (UIA_AutomationPropertyChangedEventId) für die Value-Eigenschaft (UIA_ValueValuePropertyId) gleichwertig. Beide Ereignisse müssen unterstützt werden.
  • Das Text-Steuerelementmuster unterstützt nur einen Textdatenstrom und einen Viewport pro Steuerelement. Wenn die Anwendung mehrere Dokumentansichten in Bereichen bietet, sollte jede Ansicht (Steuerelement) ITextProvider unabhängig unterstützen.
  • Die ITextProvider::GetSelection-Methode gibt möglicherweise einen einzelnen Textbereich zurück, der den aktuell ausgewählten Text darstellt. Wenn ein Steuerelement die Auswahl mehrerer, nicht zusammenhängender Textspannen unterstützt, sollte die GetSelection-Methode ein Array zurückgeben, das eine ITextRangeProvider-Schnittstelle für jede ausgewählte Textspanne enthält.
  • Das Text-Steuerelementmuster stellt die Einfügemarke als entarteten (leeren) Textbereich dar. Die ITextProvider::GetSelection-Methode sollte einen entarteten Textbereich zurückgeben, wenn die Einfügemarke vorhanden ist und kein Text ausgewählt ist. Weitere Informationen finden Sie unter Interoperabilität mit dem System Caret.
  • Die ITextProvider::GetVisibleRanges-Methode gibt möglicherweise einen einzelnen Textbereich zurück, wenn ein zusammenhängender Textbereich im Viewport sichtbar ist, oder sie gibt ein Array von unzusammengefächerten Textbereichen zurück, die mehrere teilweise sichtbare Textzeilen darstellen.
  • Die ITextProvider::RangeFromChild-Methode sollte einen entarteten Bereich zurückgeben, wenn das untergeordnete Element keinen Text enthält. Da ein eingebettetes Objekt Text enthalten kann, gibt die RangeFromChild-Methode möglicherweise nicht immer einen entarteten Textbereich zurück. Weitere Informationen finden Sie unter Verfügbarmachen eingebetteter Objekte Benutzeroberflächenautomatisierung.
  • Die ITextProvider::RangeFromPoint-Methode führt Treffertests im Dokumentbereich unter Verwendung der angegebenen Bildschirmkoordinaten durch. Der resultierende Textbereich sollte mit der Einfügemarke oder Auswahl konsistent sein, die sich beim Klicken auf die Position an den angegebenen Bildschirmkoordinaten ergeben würde. Wenn sich beispielsweise ein Bild an den angegebenen Bildschirmkoordinaten befindet, sollte der resultierende Textbereich dem Textbereich entsprechen, den die ITextProvider::RangeFromChild-Methode für das Bild abrufen würde. Wenn eine Clientanwendung einen Textbereich für die Position in der Mitte des System-Carets (die Einfügemarke) anfordert, sollte der resultierende Textbereich mit dem Speicherort des System caret identisch sein.
  • Die ITextProvider::D ocumentRange-Eigenschaft sollte immer einen Textbereich bereitstellen, der den gesamten Text enthält, der von der entsprechenden ITextProvider-Implementierung unterstützt wird.
  • Das UIA_Text_TextChangedEventId-Ereignis muss ausgelöst werden, nachdem eine Textänderung erfolgt, auch wenn die Änderung im Viewport nicht sichtbar ist. Beispielsweise sollte der Anbieter das Ereignis auch dann auslösen, wenn der Benutzer genau denselben Text über den markierten Text einfüge.
  • Die UIA_Text_TextSelectionChangedEventId muss immer dann ausgelöst werden, wenn sich die Textauswahl ändert oder wenn die Einfügemarke (Caretmarke) zwischen dem Text verschoben wird.

Beachten Sie beim Implementieren des TextRange-Steuerelementmusters die folgenden Richtlinien und Konventionen:

  • Alle Methoden des TextRange-Steuerelementmusters sollten Textvorgänge unabhängig vom Sichtbarkeitszustand des Texts ausführen. Die Sichtbarkeit eines Textbereichs kann immer durch Abfragen des IsHidden-Textattributes (UIA_IsHiddenAttributeId) bestimmt werden.
  • Wenn möglich, sollte ein Anbieter sicherstellen, dass alle Textänderungen, z. B. Löschungen, Einfügungen und Verschiebungen, in den zugeordneten Textbereichsobjekten (Instanzen der ITextRangeProvider-Schnittstelle ) widergespiegelt werden und ein UIA_Text_TextChangedEventId-Ereignis auslösen. Clients können das Ereignis als Hinweis verwenden, um redaktionelle Änderungen zu bestätigen, die am Text eines Steuerelements vorgenommen wurden.
  • Alle Textbereichsobjekte, die von den Methoden ITextRangeProvider::Compare, CompareEndpoints und MoveEndpointByRange verwendet werden, müssen Peers derselben Text-Steuerelementmusterimplementierung sein.
  • Obwohl nicht erforderlich, kann der pRetVal-Wert , der von der ITextRangeProvider::CompareEndpoints-Methode abgerufen wird, den Abstand zwischen den beiden Endpunkten in Zeichen (TextUnit_Character) angeben. Clientanwendungen sollten jedoch nicht von der Genauigkeit von pRetVal über den positiven oder negativen Wert hinaus abhängen.
  • Die Methoden ITextRangeProvider::ExpandToEnclosingUnit, Move und MoveEndpointByUnit erfordern eine sorgfältige Berücksichtigung der angegebenen Texteinheit. Weitere Informationen finden Sie unter Bearbeiten einer TextRange nach Texteinheit.
  • Informationen zu Implementierungsanforderungen im Zusammenhang mit den Methoden ITextRangeProvider::Select, AddToSelection und RemoveFromSelection finden Sie unter Auswählen von Text in einem Textbereich.
  • Die Methoden ITextRangeProvider::FindText und FindAttribute suchen vorwärts oder rückwärts nach einer einzelnen übereinstimmenden Textzeichenfolge oder einem einzelnen Textattribut. Sie sollten NULL zurückgeben, wenn keine Übereinstimmung gefunden wird.
  • Die ITextRangeProvider::GetAttributeValue-Methode muss die Adresse zurückgeben, die von der Funktion UiaGetReservedMixedAttributeValue oder UiaGetReservedNotSupportedValue abgerufen wurde, wenn das zugeordnete Attribut im Bereich variiert oder wenn das Attribut vom Textsteuerelement nicht unterstützt wird. Die TextRange-Steuerelementmusterspezifikation lässt das Hinzufügen neuer Text-Attributbezeichner oder das Ändern der Definition der vorhandenen Attribute nicht zu.
  • Wenn möglich, sollte die ITextRangeProvider::GetBoundingRectangles-Methode ein Array zurückgeben, das ein umgebendes Rechteck für jede vollständig oder teilweise sichtbare Textzeile in einem Textbereich enthält. Wenn dies nicht möglich ist, kann der Anbieter ein Array zurückgeben, das die umgebenden Rechtecke nur vollständig sichtbarer Linien enthält. Dies schränkt jedoch die Fähigkeit einer Clientanwendung ein, genau zu beschreiben, wie der Text auf dem Bildschirm dargestellt wird.
  • Die ITextRangeProvider::GetChildren-Methode sollte alle untergeordneten Elemente zurückgeben, die in einen Textbereich eingebettet sind, aber sie muss keine untergeordneten Elemente der untergeordneten Elemente zurückgeben. Wenn beispielsweise ein Textbereich eine Tabelle mit einer Anzahl untergeordneter Zellen enthält, gibt die GetChildren-Methode möglicherweise nur das Table-Element und nicht die Zellenelemente zurück. Aus Leistungs- oder Architekturgründen kann ein Anbieter möglicherweise nicht alle eingebetteten Objekte verfügbar machen, die in einem Dokument in der Automatisierungsstruktur gehostet werden. In diesem Fall sollte der Anbieter zumindest die Aufzählung untergeordneter Objekte über die GetChildren-Methode unterstützen und optional das VirtualizedItem-Steuerelementmuster für die Entvirtualisierung unterstützen.
  • Die ITextRangeProvider::GetEnclosingElement-Methode gibt in der Regel den Textanbieter zurück, der den Textbereich bereitstellt. Wenn der Textanbieter jedoch untergeordnete Objekte wie Tabellen oder Hyperlinks unterstützt, kann das einschließende Element ein Nachfolger des Textanbieters sein. Das von GetEnclosingElement zurückgegebene Element sollte das Element sein, das dem angegebenen Textbereich am nächsten kommt. Wenn sich der Textbereich beispielsweise in einer Zelle einer Tabelle befindet, sollte GetEnclosingElement die enthaltende Zelle anstelle des Tabellenelements zurückgeben.
  • Die ITextRangeProvider::GetText-Methode sollte den Nur-Text im Bereich zurückgeben. Weitere Informationen finden Sie unter Abrufen von Text aus einem Textbereich.
  • Beim Aufrufen von ITextRangeProvider::ScrollIntoView sollte der Text im Viewport des Textsteuerelements ausgerichtet werden, wie durch den alignToTop-Parameter angegeben. Obwohl es keine Anforderung in Bezug auf horizontale Ausrichtung gibt, sollte der Textbereich horizontal und vertikal sichtbar sein. Bei der Auswertung des alignToTop-Parameters muss ein Anbieter die Ausrichtung des Textsteuerelements und die Flussrichtung des Texts berücksichtigen. Wenn alignToTop beispielsweise für ein vertikal ausgerichtetes Textsteuerelement true ist, das Text enthält, der von rechts nach links fließt, sollte der Anbieter den Textbereich an der rechten Seite des Viewports ausrichten.
  • Wenn der Textbereich in eine eingebettete Tabelle wechselt, sollte beim Durchlaufen eines Dokuments durch TextUnit_Line jede Textzeile in einer Zelle als Zeile behandelt werden.

Erforderliche Member für ITextProvider

Die folgenden Eigenschaften und Methoden sind für die Implementierung der ITextProvider-Schnittstelle erforderlich.

Erforderliche Member Memberart Hinweise
DocumentRange Eigenschaft Keine
SupportedTextSelection Eigenschaft Keine
GetSelection Methode Keine
GetVisibleRanges Methode Keine
RangeFromChild Methode Keine
RangeFromPoint Methode Keine
UIA_Text_TextChangedEventId Ereignis Keine
UIA_Text_TextSelectionChangedEventId Ereignis Keine

 

Die folgenden zusätzlichen Eigenschaften und Methoden sind für die Implementierung der ITextProvider2-Schnittstelle erforderlich.

Erforderliche Member Memberart Hinweise
GetCaretRange Methode Keine
RangeFromAnnotation Methode Keine

 

Erforderliche Member für ITextRangeProvider

Die folgenden Eigenschaften und Methoden sind für die Implementierung der ITextRangeProvider-Schnittstelle erforderlich.

Erforderliche Member Memberart Hinweise
AddToSelection Methode Keine
Klon Methode Keine
Vergleichen Methode Keine
CompareEndpoints Methode Keine
ExpandToEnclosingUnit Methode Keine
FindAttribute Methode Keine
Findtext Methode Keine
GetAttributeValue Methode Keine
GetBoundingRectangles Methode Keine
GetChildren Methode Keine
GetEnclosingElement Methode Keine
Gettext Methode Keine
Verschieben Methode Keine
MoveEndpointByUnit Methode Keine
MoveEndpointByRange Methode Keine
Select Methode Keine
ScrollIntoView Methode Keine

 

Die folgenden zusätzlichen Eigenschaften und Methoden sind für die Implementierung der ITextRangeProvider2-Schnittstelle erforderlich.

Erforderliche Member Memberart Hinweise
ShowContextMenu Methode Siehe Abschnitt "Implementieren von ShowContextMenu"

 

Dem TextRange-Steuerelementmuster sind keine Ereignisse zugeordnet.

Unterstützende Textbereiche

In diesem Abschnitt wird beschrieben, wie ein Anbieter verschiedene Methoden der ITextRangeProvider - und ITextRangeProvider2-Schnittstellen implementieren sollte, um das TextRange-Steuerelementmuster zu unterstützen.

Bearbeiten eines Textbereichs nach Texteinheit

Die ITextRangeProvider-Schnittstelle stellt mehrere Methoden zum Bearbeiten und Navigieren von Textbereichen in einem textbasierten Steuerelement bereit. Die Methoden ITextRangeProvider::Move, MoveEndpointByUnit und ExpandToEnclosingUnit verschieben einen Textbereich oder einen seiner Endpunkte um die angegebene Texteinheit, z. B. Zeichen, Wort, Absatz usw. Weitere Informationen finden Sie unter Benutzeroberflächenautomatisierung Texteinheiten.

Trotz ihres Namens erweitert die ITextRangeProvider::ExpandToEnclosingUnit-Methode nicht unbedingt einen Textbereich. Stattdessen "normalisiert" es einen Textbereich, indem die Endpunkte so verschoben werden, dass der Bereich die angegebene Texteinheit umfasst. Der Bereich wird erweitert, wenn er kleiner als die angegebene Einheit ist, oder gekürzt, wenn er länger als die angegebene Einheit ist. Es ist wichtig, dass die ExpandToEnclosingUnit-Methode Textbereiche immer auf konsistente Weise normalisiert. Andernfalls wären andere Aspekte der Textbereichsbearbeitung nach Texteinheit unvorhersehbar. Das folgende Diagramm zeigt, wie ExpandToEnclosingUnit einen Textbereich normalisiert, indem die Endpunkte des Bereichs verschoben werden.

Diagramm der Endpunktpositionen des Textbereichs vor und nach einem Aufruf von expandtoenclosingunit

Wenn der Textbereich am Anfang einer Texteinheit beginnt und am Anfang der nächsten Texteinheitsgrenze endet, wird der Endendpunkt an die nächste Texteinheitsgrenze verschoben (siehe 1 und 2 im vorherigen Diagramm).

Wenn der Textbereich am Anfang einer Texteinheit beginnt und bei oder nach der nächsten Einheitsgrenze endet, bleibt der Endendpunkt oder wird zurück zur nächsten Einheitsgrenze nach dem Startendpunkt verschoben (siehe 3 und 4 in der vorherigen Abbildung). Wenn mehr als eine Texteinheitsgrenze zwischen dem Anfangs- und Endendpunkt vorhanden ist, wird der Endendpunkt zurück zur nächsten Einheitsgrenze nach dem Startendpunkt verschoben, was zu einem Textbereich mit einer Längeneinheit führt.

Wenn der Textbereich in der Mitte der Texteinheit beginnt, wird der Anfangsendpunkt zurück an den Anfang der Texteinheit verschoben, und der Endendpunkt wird nach Bedarf vorwärts oder rückwärts zur nächsten Einheitsgrenze nach dem Startendpunkt verschoben (siehe 5 bis 8 im vorherigen Diagramm).

Wenn die ITextRangeProvider::Move-Methode aufgerufen wird, normalisiert der Anbieter den Textbereich durch die angegebene Texteinheit und verwendet dabei dieselbe Normalisierungslogik wie die ExpandToEnclosingUnit-Methode . Anschließend verschiebt der Anbieter den Bereich um die angegebene Anzahl von Texteinheiten rückwärts oder vorwärts. Beim Verschieben des Bereichs sollte der Anbieter die Grenzen aller eingebetteten Objekte im Text ignorieren. (Die Einheitsgrenze selbst kann jedoch durch das Vorhandensein eines eingebetteten Objekts beeinflusst werden.) Das folgende Diagramm veranschaulicht, wie die Move-Methode einen Textbereich Einheit für Einheit über eingebettete Objekte und Texteinheitengrenzen verschiebt.

Diagramm, das zeigt, wie die Move-Methode Bereichsendpunkte über Objekt- und Texteinheitsgrenzen hinweg verschiebt

Die ITextRangeProvider::MoveEndpointByUnit-Methode verschiebt einen der Endpunkte um die angegebene Texteinheit vorwärts oder rückwärts, wie in der folgenden Abbildung gezeigt.

Diagramm, das zeigt, wie moveendpointbyunit den Endpunkt eines Bereichs verschiebt

Die ITextRangeProvider::MoveEndpointByRange-Methode ermöglicht es einer Clientanwendung, einen Endpunkt eines Textbereichs auf denselben Speicherort wie der angegebene Endpunkt eines zweiten Textbereichs festzulegen.

Auswählen von Text in einem Textbereich

Die ITextRangeProvider-Schnittstelle enthält mehrere Methoden zum Steuern der Textauswahl in einem textbasierten Steuerelement.

Die ITextRangeProvider::Select-Methode sollte den Text markieren, der einem Textbereich entspricht, und die vorherige Auswahl (sofern vorhanden) aus dem Textsteuerelement entfernen. Wenn Select für einen entarteten Textbereich aufgerufen wird, sollte der Anbieter die Einfügemarke an die Position des Textbereichs verschieben, ohne Text auszuwählen.

Wenn ein Steuerelement die Auswahl mehrerer, nicht zusammenhängender Textspannen unterstützt, fügen die Methoden ITextRangeProvider::AddToSelection und RemoveFromSelection der Auflistung der ausgewählten Textbereiche Textbereiche hinzu und entfernen sie aus. Wenn das Steuerelement jeweils nur einen ausgewählten Textbereich unterstützt, der Auswahlvorgang jedoch zur Auswahl mehrerer zusammenhängender Textbereiche führen würde, sollte der Anbieter entweder einen E_INVALIDOPERATION Fehler zurückgeben oder die aktuelle Auswahl erweitern oder abschneiden. Die ITextProvider::SupportedTextSelection-Eigenschaft sollte angeben, ob ein Steuerelement die Auswahl einzelner oder mehrerer Textspannen oder gar keine unterstützt.

Wenn ein textbasiertes Steuerelement Texteinfügungen unterstützt, sollte der Aufruf von ITextRangeProvider::AddToSelection oder RemoveFromSelection für einen entarteten Textbereich im Steuerelement die Einfügemarke verschieben, aber keinen Text markieren.

Abrufen von Text aus einem Textbereich

Die ITextRangeProvider::GetText-Methode sollte den Nur-Text eines Textbereichs zurückgeben. Der Nur-Text sollte alle im Quelltext gefundenen Steuerzeichen enthalten, z. B. Wagenrückläufe und die Unicode-Markierung von links nach rechts (LRM). Der Nur-Text sollte keine Markuptags wie HTML enthalten, die im Quelltext vorhanden sein können. Außerdem sollten alle Escapecodes im Quelltext in die Nur-Text-Entsprechungen konvertiert werden. Beispielsweise sollte " " " in ein einfaches Leerzeichen konvertiert werden.

Wenn sich ein eingebettetes Objekt über einen Textbereich erstreckt, sollte der Nur-Text den inneren Text des Objekts enthalten, aber nicht den alternativen Text (die name-Eigenschaft des eingebetteten Objekts), da er möglicherweise mit dem beschreibenden inneren Text inkonsistent ist. Weitere Informationen finden Sie unter Verfügbarmachen eingebetteter Objekte Benutzeroberflächenautomatisierung.

Implementieren von ShowContextMenu

ITextRangeProvider2::ShowContextMenu sollte immer das Kontextmenü am Anfang des Endpunkts des Bereichs anzeigen. Dies sollte dem entsprechen, was passieren würde, wenn der Benutzer die Kontextmenütaste oder UMSCHALT+ F10 mit der Einfügemarke am Anfang des Bereichs gedrückt hätte.

Wenn das Anzeigen des Kontextmenüs in der Regel dazu führen würde, dass die Einfügemarke an eine bestimmte Position verschoben wird, sollte dies auch für den programmgesteuerten Aufruf von ShowContextMenu für Benutzeroberflächenautomatisierung Unterstützung erfolgen.

Interoperabilität mit dem System Caret

Die ordnungsgemäße Unterstützung der Einfügemarke ist für viele Clientanwendungen von entscheidender Bedeutung, einschließlich solcher, die nicht auf Benutzeroberflächenautomatisierung basieren. Im Text-Steuerelementmuster wird die Einfügemarke durch einen entarteten (leeren) Textbereich an der Position des System-Carets dargestellt. Wenn die Einfügemarke verschoben wird, sollte ein Steuerelement das TextSelectionChanged-Ereignis (UIA_Text_TextSelectionChangedEventId) auslösen. Einige Clientanwendungen sind von diesem Ereignis abhängig, um die Position der Einfügemarke zu überwachen und die Textauswahl nachzuverfolgen.

Wenn ein Steuerelement markierten Text enthält, bietet der aktuelle Entwurf des Text-Steuerelementmusters keine Möglichkeit, die Position der Einfügemarke direkt einem bestimmten Textbereich zuzuordnen. Der Anbieter muss die Textauswahl nachverfolgen und die Position der Einfügemarke entsprechend festlegen. Da das Auswählen von Text in der Regel durch Verschieben der Einfügemarke erfolgt, während die UMSCHALT- oder STRG-TASTE gedrückt bleibt, oder beides, kann ein Anbieter die Textauswahl nachverfolgen, indem er den Zustand dieser Tasten überprüft, wenn sich die Auswahl ändert.

Da das Framework für die Barrierefreiheit integrierte Unterstützung für das System caret, aber nicht für ein benutzerdefiniertes Caret bereitstellt, sollten textbasierte Steuerelemente nach Möglichkeit die System caret verwenden. Steuerelemente, die ein benutzerdefiniertes Caretzeichen verwenden, können sicherstellen, dass auf das Caretzeichen zugegriffen werden kann, indem sie ein System caret erstellen, das die gleichen Dimensionen wie das benutzerdefinierte Caretzeichen aufweist, und das System caret an derselben Stelle auf der Benutzeroberfläche des Steuerelements wie das benutzerdefinierte Caretzeichen positionieren, d. h. an der Einfügemarke. Alternativ kann ein Steuerelement, das ein benutzerdefiniertes Caret verwendet, einen Microsoft Active Accessibility-Anbieter für OBJID_CARET implementieren, um Barrierefreiheitsinformationen direkt für Ihr benutzerdefiniertes Caretett bereitzustellen.

Weitere Informationen zum System caret finden Sie unter Carets.

Verwenden Sie die Tools Inspect und Accessible Event Watcher , um zu testen, ob Ihr Steuerelement die Position des System-Carets ordnungsgemäß verfügbar macht.

Die Bildschirmkoordinaten der Mitte der Caret-Bitmap des Systems sollten immer mit der Position der Einfügemarke übereinstimmen. Auf diese Weise kann ein Client die Caretbildschirmkoordinaten in einem Aufruf von ITextProvider::RangeFromPoint verwenden, um einen Textbereich abzurufen, der die Position der Einfügemarke genau darstellt.

Steuerelementtypen und deren unterstützte Steuerelementmuster

Textsteuerelementtyp

TextEdit-Steuerelementmuster

TextChild-Steuerelementmuster

Übersicht über Steuerelementmuster für Benutzeroberflächenautomatisierung

Benutzeroberflächenautomatisierung Unterstützung für Textinhalte

Übersicht über die Benutzeroberflächenautomatisierungs-Struktur