Condividi tramite


Come Automazione interfaccia utente espone oggetti incorporati

In questo argomento viene descritto come Microsoft Automazione interfaccia utente usa i pattern di controllo Text e TextRange per esporre oggetti incorporati (elementi figlio/discendenti) in un documento o un contenitore di testo.

Per Automazione interfaccia utente, un oggetto incorporato è qualsiasi elemento con limiti non testuali, ad esempio un'immagine, un collegamento ipertestuale, una tabella o un tipo di documento (foglio di calcolo di Microsoft Excel, file Di Microsoft Windows Media e così via).

Nota

Ciò differisce dalla definizione OLE COM (Component Object Model) (vedere Oggetti incorporati), in cui un elemento viene creato in un'applicazione e incorporato o collegato in un'altra applicazione. Se l'oggetto può essere modificato nell'applicazione originale è irrilevante nel contesto di Automazione interfaccia utente.

Oggetti incorporati e albero di automazione interfaccia utente

Gli oggetti incorporati vengono considerati come singoli elementi nella visualizzazione controllo dell'albero Automazione interfaccia utente. Vengono esposti come elementi figlio del contenitore di testo in modo che possano essere accessibili tramite lo stesso modello a oggetti di altri controlli in Automazione interfaccia utente.

Nella tabella seguente sono elencati esempi di elementi contenitore e non contenitore.

Elementi contenitore

Elementi non contenitore

  • Calendario
  • Combobox
  • DataGrid
  • Documento
  • Modifica
  • Raggruppa
  • Intestazione
  • HeaderItem
  • List
  • Menu
  • MenuBar
  • Riquadro
  • SplitButton
  • Tab
  • Tabella
  • Barra degli strumenti
  • Albero
  • TreeItem
  • Window
  • Collega
  • Caselle di controllo
  • Pulsante

L'immagine seguente mostra un contenitore di testo (documento) con una tabella e un'immagine incorporati.

illustrazione che mostra un documento con una tabella incorporata e un'immagine

La Automazione interfaccia utente visualizzazione contenuto del documento precedente è illustrata nel diagramma seguente.

diagramma della visualizzazione contenuto di automazione interfaccia utente di un documento con oggetti incorporati

Oggetti incorporati "Compatibili" e "Non compatibili"

Alcuni provider di Automazione interfaccia utente usano lo stesso archivio di testo per ogni oggetto TextPattern che contengono. Gli oggetti supportati dallo stesso archivio di testo del contenitore vengono definiti oggetti incorporati "compatibili". Questi oggetti possono essere oggetti TextPattern stessi e, in questo caso, i relativi intervalli di testo sono paragonabili agli intervalli di testo ottenuti dal relativo contenitore. In questo modo, i provider possono esporre informazioni client sui singoli oggetti TextPattern come se fossero uno dei provider di testo di grandi dimensioni.

Tuttavia, i provider possono usare archivi di testo diversi per oggetti TextPattern diversi incorporati all'interno di un contenitore TextPattern. Gli oggetti non supportati dall'archivio di testo del contenitore vengono definiti oggetti incorporati "non compatibili". Questi tipi di oggetti incorporati potrebbero essere o meno oggetti basati su TextPattern.

Nella tabella seguente sono elencati alcuni esempi di oggetti incorporati compatibili e non compatibili.

Oggetti Oggetti incorporati compatibili Oggetti incorporati non compatibili
Oggetti incorporati non TextPattern Pulsante in Microsoft Edge
Tabella dati in Microsoft Edge
Pulsante in RichTextBlock nel framework XAML di Microsoft
Immagini con testo alternativo in Microsoft Edge
ListView con ListItems in RichTextBlock nel framework XAML di Microsoft
Oggetti incorporati TextPattern Controllo di input di tipo "text" in Microsoft Edge
Tabella in un documento di Word
Elemento TextBox in un documento di Microsoft Word

Esposizione di oggetti incorporati

I pattern di controllo Text e TextRange espongono proprietà e metodi che facilitano la navigazione e l'esecuzione di query su oggetti incorporati.

Il contenuto testuale (o testo interno) di un contenitore di testo o di un oggetto incorporato, ad esempio una cella di tabella o un collegamento ipertestuale, viene esposto come un flusso di testo continuo sia nella vista di controllo che nella vista del contenuto dell'albero di Automazione interfaccia utente. I limiti dell'oggetto vengono ignorati. Se un client Automazione interfaccia utente recupera il testo da recitare, interpretare o analizzare in qualche modo, l'intervallo di testo deve essere controllato per casi speciali, ad esempio una tabella con contenuto testuale o altri oggetti incorporati. Chiamare IUIAutomationTextRange::GetChildren per ottenere un'interfaccia IUIAutomationElement per ogni oggetto incorporato e quindi chiamare IUIAutomationTextPattern::RangeFromChild per ottenere un intervallo di testo per ogni elemento. Questa operazione viene eseguita in modo ricorsivo fino a quando non è stato recuperato l'intero contenuto testuale.

Nota

Un intervallo degenerato (o compresso) è il punto in cui l'endpoint iniziale e l'endpoint finale sono uguali. Gli intervalli degenerati vengono spesso usati per indicare la posizione del cursore di testo tramite i metodi ITextProvider GetSelection e GetCaretRange .

Il diagramma seguente mostra un flusso di testo con oggetti incorporati e i relativi intervalli di intervallo.

diagramma che mostra un flusso di testo con oggetti incorporati e i relativi intervalli di intervalli

Oggetti incorporati e TextUnit

Un oggetto ITextProvider può essere attraversato e da un oggetto TextUnit specificato. I provider che contengono oggetti incorporati possono essere attraversati nello stesso modo, ma gli oggetti incorporati influiscono sull'attraversamento. Ecco alcuni aspetti da tenere presenti:

  • Qualsiasi oggetto incorporato non compatibile è rappresentato dal carattere di sostituzione U+FFFC nell'archivio di testo del TextPattern dell'elemento contenitore. Viene anche considerato sia un'unità di caratteri che un'unità di parola.
  • Gli oggetti incorporati compatibili possono essere costituiti da più caratteri e parole.
  • L'elemento contenitore è l'elemento più in basso che si estende sull'intero intervallo di testo.
  • Gli elementi figlio di un intervallo sono anche elementi figlio di un elemento contenitore parzialmente o completamente racchiuso nell'intervallo.
  • Idealmente (soprattutto nel caso di elementi contenitore come Table) un limite di parola non supera il limite dell'oggetto. Nell'esempio seguente l'unità di parola "Bar" non contiene alcuna posizione di testo esterna al </td> tag (<br \> non fa parte della parola "Bar").
<table style="width:100%">
  <tr>
    <th>Name</th>
    <th>Notes</th>
  </tr>
  <tr>
    <td>Eve Jackson</td>
    <td>Foo Bar</td>
  </tr>
</table>
<br/>
  • In generale, <br \> viene trattato come una singola parola in modo che non vada oltre un limite di linea.
  • Un'eccezione alla regola precedente è la posizione in cui un'unità di testo di Word contiene oggetti completi all'interno di se stesso. Ad esempio, <p>Hello <a href="#">link</a> here.</p>, che include contenitori inline, ha le parole "Hello", "link " e "here". Dove "link" ha un oggetto TextPattern come elemento contenitore e un oggetto collegamento come figlio.
  • Nel caso delle unità Character, l'oggetto è l'elemento contenitore (le unità di testo come questa non devono contenere elementi figlio).
  • Gli oggetti annotazione non devono essere rappresentati come oggetto incorporato. Ad esempio, la presenza di altri identificatori author in un documento coautore.
  • Gli oggetti incorporati occupano almeno una posizione del cursore, l'annotazione è solo metadati.
  • Ogni limite di oggetto (inizio e fine) è rappresentato da un'interruzione di formato nell'intervallo di documenti TextPattern.
  • Per HTML, ogni tag HTML non comporta necessariamente un oggetto Automazione interfaccia utente. Ad esempio, il contenuto all'interno dei tag di enfasi non deve essere rappresentato come elemento, ma piuttosto come flusso di testo in cui UIA_IsItalicAttributeId restituisce TRUE.
  • L'endpoint iniziale è inclusivo ed è l'endpoint preferito mentre l'endpoint finale è esclusivo. Ciò è utile per quando l'intervallo viene degenerato e gli endpoint Start e End appartengono alla stessa posizione per tale intervallo.

Confronto di oggetti incorporati

Gli oggetti TextPattern annidati che si trovano in una relazione figlio simile e condividono lo stesso archivio di testo di backup vengono chiamati confrontabili. In questo caso, è possibile confrontare gli intervalli di uno degli oggetti TextPattern usando ITextRangeProvider::Compare e ITextRangeProvider::CompareEndpoints. Entrambi generano un valore numerico valido che specifica la posizione relativa.

Un oggetto non TextPattern incorporato in un oggetto TextPattern è paragonabile a TextPattern se l'oggetto ha un intervallo valido in TextPattern (ITextProvider::RangeFromChild) e il contenuto dietro l'intervallo di testo non è vuoto e non è un carattere sostitutivo.

Oggetti TextPattern incorporati e Document TextUnit

Per gli oggetti TextPattern incorporati, l'unità Document riconosce solo il contenuto contenuto contenuto all'interno di tale elemento.

Gerarchia di elementi Word TextPattern

  • L'elemento del documento implementa TextPattern e Document restituisce l'intero intervallo di documenti di Word.
  • Le singole pagine del documento implementano TextPattern e Document restituisce il contenuto di tali singole pagine (anche se le pagine condividono lo stesso archivio di testo con l'intero documento TextPattern).

Controlli di input di testo e pagine Web in Edge

  • L'elemento riquadro della pagina Web principale implementa TextPattern ed espone l'intero contenuto della pagina Web.
  • I singoli controlli di input di testo supportano TextPattern in cui un intervallo di documenti rappresenta il testo contenuto in ogni campo di input (anche se condividono lo stesso archivio di testo con l'intera pagina Web).

Scenari comuni

Questa sezione presenta esempi di scenari comuni che coinvolgono oggetti incorporati: collegamenti ipertestuali, immagini e tabelle. Negli esempi seguenti la parentesi graffa sinistra ({) rappresenta l'endpoint iniziale dell'intervallo di testo e la parentesi graffa destra (}) rappresenta l'endpoint finale.

L'intervallo di testo seguente contiene un collegamento ipertestuale di testo incorporato.

{L'URL https://www.microsoft.com è incorporato nel testo}.

La chiamata dei metodi IUIAutomationTextRange::GetText, GetEnclosingElement, GetChildren e IUIAutomationTextPattern::RangeFromChild determina i comportamenti descritti nella tabella seguente.

Metodo chiamato Risultato
IUIAutomationTextRange::GetText Restituisce la stringa "L'URL https://www.microsoft.com è incorporato nel testo".
IUIAutomationTextRange::GetEnclosingElement Restituisce l'elemento più interno Automazione interfaccia utente che racchiude l'intervallo di testo, in questo caso l'elemento di automazione che rappresenta il provider di testo stesso.
IUIAutomationTextRange::GetChildren Restituisce un elemento Automazione interfaccia utente che rappresenta il controllo collegamento ipertestuale.
IUIAutomationTextPattern::RangeFromChild, dove l'elemento Automazione interfaccia utente è stato restituito dal metodo IUIAutomationTextRange::GetChildren precedente. Restituisce l'intervallo che rappresenta "https://www.microsoft.com".

L'intervallo di testo seguente si estende parzialmente su un collegamento ipertestuale di testo incorporato.

L'URL https://{www} è incorporato nel testo.

La chiamata ai metodi IUIAutomationTextRange::GetText, GetEnclosingElement e GetChildren comporta i comportamenti descritti nella tabella seguente.

Metodo chiamato Risultato
IUIAutomationTextRange::GetText Restituisce la stringa "www".
IUIAutomationTextRange::GetEnclosingElement Restituisce l'elemento Automazione interfaccia utente più interno che racchiude l'intervallo di testo. In questo caso, il controllo collegamento ipertestuale.
IUIAutomationTextRange::GetChildren Restituisce NULL perché l'intervallo di testo non si estende sull'intera stringa URL.

L'intervallo di testo seguente si estende parzialmente sul contenuto di un contenitore di testo. Il contenitore di testo contiene testo incorporato che non fa parte dell'intervallo di testo.

{URL} https://www.microsoft.com è incorporato nel testo.

La chiamata dei metodi IUIAutomationTextRange::GetText, GetEnclosingElement e Move determina i comportamenti descritti nella tabella seguente.

Metodo chiamato Risultato
IUIAutomationTextRange::GetText Restituisce la stringa "L'URL".
IUIAutomationTextRange::GetEnclosingElement Restituisce l'elemento più interno Automazione interfaccia utente che racchiude l'intervallo di testo, in questo caso, l'elemento che rappresenta il provider di testo stesso.
IUIAutomationTextRange::Move Sposta l'intervallo di testo su "https://" perché il testo del collegamento ipertestuale è costituito da singole parole. In questo caso, il collegamento ipertestuale non viene considerato come oggetto singolo.
L'URL {http} è incorporato nel testo.

Esempio di immagine 1: intervallo di testo che contiene un'immagine incorporata

L'intervallo di testo seguente contiene un'immagine incorporata di una navetta.

{L'immagine illustrazione di una navetta è incorporata nel testo}.

La chiamata dei metodi IUIAutomationTextRange::GetText, GetEnclosingElement, GetChildren e IUIAutomationTextPattern::RangeFromChild determina i comportamenti descritti nella tabella seguente.

Metodo chiamato Risultato
IUIAutomationTextRange::GetText Restituisce la stringa "L'immagine è incorporata nel testo". Qualsiasi testo ALT associato all'immagine non è incluso nel flusso di testo.
IUIAutomationTextRange::GetEnclosingElement Restituisce l'elemento più interno Automazione interfaccia utente che racchiude l'intervallo di testo, in questo caso, l'elemento che rappresenta il provider di testo stesso.
IUIAutomationTextRange::GetChildren Restituisce un elemento Automazione interfaccia utente che rappresenta il controllo immagine.
IUIAutomationTextPattern::RangeFromChild dove l'elemento Automazione interfaccia utente è stato restituito dal metodo IUIAutomationTextRange::GetChildren precedente. Restituisce l'intervallo degenerato.

Esempio di immagine 2: intervallo di testo che si estende parzialmente sul contenuto di un contenitore di testo

L'intervallo di testo seguente si estende parzialmente sul contenuto di un contenitore di testo. Il contenitore di testo contiene un'immagine incorporata che non fa parte dell'intervallo di testo.

{L'immagine} illustrazione di una navetta è incorporata nel testo.

La chiamata dei metodi IUIAutomationTextRange::GetText, GetEnclosingElement e Move determina i comportamenti descritti nella tabella seguente.

Metodo chiamato Risultato
IUIAutomationTextRange::GetText Restituisce la stringa "L'immagine".
IUIAutomationTextRange::GetEnclosingElement Restituisce l'elemento più interno Automazione interfaccia utente che racchiude l'intervallo di testo, in questo caso, l'elemento che rappresenta il provider di testo stesso.
IUIAutomationTextRange::Move con parametri di (TextUnit_Word, 2). Sposta l'estensione dell'intervallo di testo a "è". Poiché solo gli oggetti incorporati basati su testo sono considerati parte del flusso di testo, l'immagine in questo esempio non influisce su IUIAutomationTextRange::Move o sul relativo valore restituito, in questo caso 2.

Tabella

Esempio di tabella 1: ottiene il contenitore di testo dal contenuto di una cella

La tabella seguente ottiene il contenitore di testo dal contenuto di una cella.

Cella con immagine Cella con testo
illustrazione di una navetta X
illustrazione dello spazio e di un telescopio Y
illustrazione di un microscopio Z

La chiamata dei metodi IUIAutomationGridPattern::GetItem, IUIAutomationTextPattern::RangeFromChild e IUIAutomationTextRange::GetEnclosingElement determina i comportamenti descritti nella tabella seguente.

Metodo chiamato Risultato
IUIAutomationGridPattern::GetItem con parametri (0, 0). Restituisce l'elemento Automazione interfaccia utente che rappresenta il contenuto della cella della tabella, in questo caso l'elemento è un controllo di testo.
iuiautomationtextpattern::rangefromchild restituisce l'intervallo dell'immagine illustrazione di una navetta.
GetEnclosingElement per l'oggetto restituito dal metodo IUIAutomationTextPattern::RangeFromChild precedente. Restituisce l'elemento Automazione interfaccia utente che rappresenta la cella della tabella. In questo caso, l'elemento è un controllo di testo che supporta il pattern di controllo TableItem .
IUIAutomationTextRange::GetEnclosingElement per l'oggetto restituito dal metodo GetEnclosingElement precedente. Restituisce l'elemento Automazione interfaccia utente che rappresenta la tabella.
IUIAutomationTextRange::GetEnclosingElement per l'oggetto restituito dal metodo GetEnclosingElement precedente. Restituisce l'elemento Automazione interfaccia utente che rappresenta il provider di testo stesso.

Esempio di tabella 2: ottiene il contenuto di testo di una cella

La tabella nell'esempio precedente ottiene il contenuto di testo di una cella.

La chiamata dei metodi IUIAutomationGridPattern::GetItem e IUIAutomationTextPattern::RangeFromChild comporta i comportamenti descritti nella tabella seguente.

Metodo chiamato Risultato
IUIAutomationGridPattern::GetItem con parametri (1,1). Restituisce l'elemento Automazione interfaccia utente che rappresenta il contenuto della cella della tabella. In questo caso, l'elemento è un controllo di testo.
IUIAutomationTextPattern::RangeFromChild dove l'elemento Automazione interfaccia utente è l'oggetto restituito dal metodo IUIAutomationGridPattern::GetItem precedente. Restituisce "Y".

Quando si passa attraverso un documento TextUnit_Line, se l'intervallo di testo entra in una tabella incorporata, ogni riga di testo in una cella deve essere considerata come una riga.

Informazioni concettuali