使用者介面自動化 文字單位
本主題描述Microsoft 使用者介面自動化 TextRange 控件模式所支援的文字單位。 使用者介面自動化 提供者和用戶端會使用文字單位來指定要移動或變更文字範圍大小的數量。
文字單位 API 元素
使用者介面自動化 API 包含下列方法,需要指定文字單位:
- ITextRangeProvider::Move
- ITextRangeProvider::ExpandToEnclosingUnit
- ITextRangeProvider::MoveEndpointByUnit
- IUIAutomationTextRange::Move
- IUIAutomationTextRange::ExpandToEnclosingUnit
- IUIAutomationTextRange::MoveEndpointByUnit
TextUnit 列舉會定義 使用者介面自動化 文字範圍所支援的文字單位。 若要指定文字單位,TextUnit 列舉的成員是在呼叫 ITextRangeProvider 或 IUIAutomationTextRange 方法時指定。 文字單位,從最小到最大,如下所示:
- TextUnit_Character
- TextUnit_Format
- TextUnit_Word
- TextUnit_Line
- TextUnit_Paragraph
- TextUnit_Page
- TextUnit_Document
如果特定文字型控件不支援指定的文字單位,提供者應該藉由取代控件支援的下一個較大的文字單位來回應。 例如,如果指定了TextUnit_Paragraph但不支援,則 方法可以替代TextUnit_Page或TextUnit_Document。
來源文字的語言特性使得提供者很難根據指定的文字單位來判斷文字界限。 如需判斷文字界限的說明,提供者可以使用 Uniscribe API 函式,例如 ScriptBreak。 如需詳細資訊,請參閱 Uniscribe。
端點包容性
文字單位端點可以做為 相同類型相鄰文字範圍的開始 端點和 結束 端點。 如果一個文字單位的結尾也是另一個文字單位的開頭,則包含 End 端點的範圍不會共用包含 Start 端點之相鄰範圍的任何屬性或物件。
例如,文字串流 「Hello world」 包含兩個字單位,具有不同的字型粗細屬性(一般和粗體)。 在此情況下,單位 「Hello」 一詞的 End 端點和 「world」 一詞的 Start 端點相同,這會產生下列結果:
- “Hello” 的範圍不會共用單字單位 “world” 的粗體屬性,也不會傳回字型粗細文字屬性的混合屬性值。
- “world” 的範圍具有單一字型粗細(粗體),且不會共用前一個字組 “Hello” 的字型粗細。
以下是另一個範例,其中文字數據流包含兩個單字單位,其中一個是連結: [Foo]() Bar
。 在此情況下,單字單位[Foo]()
的 End 端點和單字單位 「Bar」 的 Start 端點相同,這會產生下列結果:
- 連結屬於包含 「Foo」 的文字範圍。
- 連結是文字範圍 「Foo」 的子系,並由 ITextProvider 括住。
- 文字範圍 「Bar」 沒有子系,且由 ITextProvider 括住。
其他注意事項
具有相同類型之文字範圍之文字單位界限的變質(空白)範圍會假設緊接相鄰文字單位的屬性。
在具有相同類型之文字範圍之文字單位界限上呼叫 IUIAutomationTextRange::ExpandToEnclosingUnit,將變質範圍展開為下列文字單位。
文字單元描述
本節說明 使用者介面自動化 所支援的每個文字單位。
字元
TextUnit_Character是代表單一字元的文字語言單位。 字元的語言定義會因語言而異。 若為美式英文,字元通常會以空格或另一個字元框線,例如標點符號、數位或字母。
控制字元,例如歸位字元和 Unicode 由左至右標記 (LTM) 不應視為字元,但可能包含在根據字元文字單位正規化的文字範圍中。
標點符號和斷詞字元,例如空格應該視為字元。
格式
TextUnit_Format可用來根據文字的格式屬性來定位文字範圍的界限。 例如,如果文字範圍目前位於單字的單一字元上,請在呼叫 IUIAutomationTextRange::ExpandToEnclosingUnit 時指定TextUnit_Format,即可展開文字範圍,以包含與單一字元共用所有相同屬性的所有文字。 產生的文字範圍不一定包含整個單字。 此外,使用格式文字單位不會跨內嵌物件的界限展開文字範圍,例如影像或超連結。
與其他文字單位不同,包括小於本身的文字單位, TextUnit_Format 可以小於或大於其他單位。 例如,如果整個文件共用相同的文字屬性,而且不包含內嵌物件,則依TextUnit_Format展開文字範圍會建立包含整個檔的新範圍,同時依TextUnit_Word展開文字範圍會建立較小的範圍。
Word
TextUnit_Word是代表單一完整單字之文字的語言單位。 單字的語言定義會依語言而有所不同。 對於美國英文,單字通常會以空格或標點符號字元框線。
當 TextUnit_Word 用來設定文字範圍的界限時,產生的文字範圍應該包含任何出現在字尾的斷詞字元,但在下一個單字開頭之前。
線條
TextUnit_Line是一個文字單位,代表在控件檢視區中顯示的單行文字。 使用 TextUnit_Line 設定文字範圍的界限時,提供者應該在控件字元中斷行的點之後,或控件的檢視區將文字換行到新行之後立即設定界限。 界限應該設定新行開始的位置。
段落
TextUnit_Paragraph是代表完整段落之文字的語言單位。 段落應該在段落的第一個字元之前開始,而且通常會在最後一個字元之後結束。 段落後面的任何空白行都應該合併到段落中,除非文字來源中的某一行另有指示。 一般而言,段落的結束界限也會標示TextUnit_Line文字單位的結束界限。
頁
TextUnit_Page代表檔的完整文字頁面。 頁面的界限應該設定在頁面開始和結束的即時點。
Document
TextUnit_Document代表文字控制項模式所支援之文件的整個內容。 在包含文件的文字範圍之外,不應該有文字。 插入檔的任何物件,例如跨越頁面界限的註釋附註,都應該被視為檔的內嵌物件,而不是檔的文字內容的一部分。
其他潛在範圍
目前的 TextRange 控制件模式規格不允許將新的文字單位值新增至 TextUnit 列舉,也不會允許重新定義現有的文字單位值。 若要公開其他潛在範圍,例如標頭和註釋,提供者應該將這些範圍公開為具有相關聯文字範圍的內嵌物件。 如此一來,您也可以新增適當控件模式的支援。 此解決方案比定義新的文字單位更有彈性且可擴充。
相關主題
參考
ITextRangeProvider::GetChildren