關於文字和 TextRange 控制項模式

控制項的文字內容是使用 文字 控制項模式公開的,其代表文字容器的內容做為文字資料流程。 Text 控制項模式需要支援 TextRange 控制項模式,才能公開格式和樣式屬性。 TextRange 控制項模式支援文字控制項模式,其方式是代表連續或多個不連續的文字範圍, (或範圍) 文字容器中的開頭和結束端點集合。 TextRange 控制項模式支援選取、比較、擷取和周遊等功能。

注意

文字控制項模式不提供插入或修改文字的方法。 不過,視控制項而定,這可以使用 Microsoft 消費者介面自動化控制項模式或直接鍵盤輸入來完成。 另外還有支援以程式設計方式變更文字的 TextEdit 模式。

 

本主題所述的功能對於輔助技術廠商及其終端使用者至關重要。 輔助技術可以使用消費者介面自動化來收集使用者的完整文字格式資訊,並透過TextUnit (字元、文字、線條或段落) 提供文字的程式設計流覽和選取。

本主題包含下列幾節:

消費者介面自動化 TextPattern 和文字服務架構

Text Services Framework (TSF) 是一種簡單且可調整的系統架構,可在桌面和應用程式中啟用自然語言服務和進階文字輸入。 除了為應用程式提供介面來公開其文字存放區之外,它也支援文字存放區的中繼資料。

TSF 是針對需要將輸入插入內容感知案例的應用程式所設計。 不過, 文字 控制項模式是唯讀解決方案,旨在為螢幕助讀程式和大括弧裝置提供文字存放區的優化存取權。

需要唯讀存取文字存放區的無障礙技術可以使用文字控制項模式,但需要 TSF 的功能才能進行內容感知輸入。

如需詳細資訊,請參閱 文字服務架構

控制項類型

消費者介面自動化編輯控制項類型和控制項類型必須支援文字控制項模式。 為了改善協助工具,Microsoft 建議 工具提示 和文字控制項類型也支援文字控制項模式,但並非必要專案。

提供者介面

消費者介面自動化提供者藉由實作ITextProvider 和 ITextRangeProvider介面來支援控制項的文字控制項模式。 這些介面會公開控制項中文字的詳細屬性資訊,並提供健全的導覽功能。

如果控制項不支援任何特定屬性,提供者就不需要支援所有文字屬性。

如果控制項支援文字選取或文字游標 (或系統插入號) ,提供者必須支援 ITextProvider::GetSelectionITextRangeProvider::Select 方法。 如果控制項不支援這項功能,則不需要支援其中一種方法。 不過,控制項必須藉由實作 ITextProvider::SupportedTextSelection 屬性來公開它支援的文字選取類型。

提供者必須一律支援 TextUnit 常數、 TextUnit_CharacterTextUnit_Document,以及它能夠支援的任何其他專案。

注意

提供者可能會依下列順序延遲至下一個支援的最大單位,以略過特定TextUnit的支援:TextUnit_CharacterTextUnit_Format、TextUnit_Word、TextUnit_Line、TextUnit_Paragraph、TextUnit_PageTextUnit_Document

 

用戶端介面

消費者介面自動化用戶端應用程式使用IUIAutomationTextPatternIUIAutomationTextRange介面來存取文字控制項的文字內容。 用戶端會使用 IUIAutomationTextPattern 來選取稱為 文字範圍的文字範圍,以及擷取範圍 之 IUIAutomationTextRange 介面的指標。 IUIAutomationTextRange介面可讓用戶端操作文字範圍,以及擷取範圍中文字的相關資訊,包括字型名稱、前景色彩、底線樣式等屬性。 如需詳細資訊,請參閱 文字屬性識別碼

效能

文字控制項模式依賴大部分功能的跨進程呼叫,因此它不會提供快取機制來改善處理內容時的效能。 您可以使用IUIAutomationElement::GetCachedPattern方法來存取 Microsoft 消費者介面自動化中的其他控制項模式。

改善效能的其中一個技巧是確保消費者介面自動化用戶端嘗試使用IUIAutomationTextRange::GetText方法擷取中等大小的文字區塊。 例如,使用 GetText 來擷取單一字元會產生每個字元的跨進程點擊,而呼叫 GetText 時不會指定最大長度會產生一個跨進程點擊,但根據文字範圍的大小而定,可能會有高延遲。

文字模式和虛擬化内嵌物件

可能的話, ITextProviderITextRangeProvider 的提供者實作應該支援檔的整個文字,包括檢視區以外的任何文字。 針對虛擬化的螢幕外文字或内嵌物件,提供者應該支援 VirtualizedItem 控制項模式 (IVirtualizedItemProvider) 。

如果在整個文字資料流程仍可使用時虛擬化檔, 則 ITextProvider::D ocumentRange 屬性會擷取包含整個檔的文字範圍。 不過,呼叫 ITextRangeProvider 方法會擷取虛擬物件的集合,這些物件代表檔中的所有内嵌物件。 若要與虛擬化内嵌物件互動,用戶端必須呼叫IVirtualizedItemProvider::Realize方法,讓專案能夠完全存取為消費者介面自動化元素。 用戶端必須遵循類似的程式,才能在內嵌資料表中使用格線元素,其中一部分的資料表是螢幕外和虛擬化的。

搭配文字控制項模式使用自訂控制項類型

雖然 文字 控制項模式支援許多文字屬性和内嵌物件,但無法事先定義所有可能的檔元素和簡報類型。 對於現有屬性或標準控制項類型不支援的檔元素,提供者可以使用自訂控制項類型消費者介面自動化所提供的擴充性功能。

對於以頁面簡報為基礎的應用程式和使用者介面,「page」 的界限和版面配置呈現也可以表示為具有自訂控制項類型 (LocalizedControlType="page") 的内嵌物件。 如此一來,内嵌物件就可以裝載其他無法輕易成為檔文字資料流程一部分的頁面元素,例如每個頁面的頁首和頁尾欄位,做為「頁面」内嵌物件的子系。 或者,每個「頁面」物件都可以獨立支援 文字 控制項模式,這適用于投影片放映簡報的撰寫工具或以頁面為基礎的桌面發佈環境等應用程式。

文字範圍的存留期

可能的話,提供者應該確保任何文字變更,例如刪除、插入和移動,都反映在相關聯的文字範圍中。 如果無法更新文字範圍,提供者應該引發 UIA_Text_TextChangedEventId 事件,通知用戶端文字範圍不再有效,而且必須擷取新的範圍。

概念

消費者介面自動化支援内嵌物件的方式

UI 自動化控制項模式概觀

文字內容的消費者介面自動化支援

使用文字型控制項

其他資源

Text Services Framework (TSF)