Delphi di Il controllo TListView visualizza un elenco di elementi in colonne con intestazioni di colonna e sotto-elementi, oppure in verticale o in orizzontale, con icone piccole o grandi.
Come la maggior parte dei controlli Delphi, TListView espone Al clic e OnDblClick (OnDoubleClick) eventi.
Sfortunatamente, se hai bisogno di sapere quale elemento è stato fatto clic o doppio clic non puoi semplicemente gestire gli eventi OnClick / OnDblClick per ottenere l'elemento cliccato.
L'evento OnClick (OnDblClick) per TListView viene generato ogni volta che l'utente fa clic sul controllo, ovvero ogni volta che si verifica il "clic" da qualche parte all'interno dell'area client del controllo.
L'utente può fare clic all'interno della visualizzazione elenco, MA "manca" uno qualsiasi degli elementi. Inoltre, poiché la visualizzazione elenco può modificarne la visualizzazione in base alla proprietà ViewStyle, l'utente potrebbe aver fatto clic su un oggetto, su una didascalia dell'articolo, sull'icona di un oggetto, "da nessuna parte", sull'icona di stato di un oggetto, eccetera.
Nota: la proprietà ViewStyle determina la modalità di visualizzazione degli elementi nella visualizzazione elenco: gli elementi possono essere visualizzati come un set di icone mobili o come colonne di testo.
Visualizzazione elenco. Sull'elemento Fare clic su & ListView. Sull'elemento Fare doppio clic
Per essere in grado di individuare l'elemento cliccato (se presente) quando viene attivato l'evento OnClick per la visualizzazione elenco, è necessario determinare quale gli elementi della vista elenco si trovano nel punto specificato dai parametri X e Y, ovvero la posizione del mouse al momento di "clic".
TListiew's GetHitTestInfoAt La funzione restituisce informazioni sul punto specificato nell'area client della vista elenco.
Per assicurarsi che l'elemento sia stato fatto clic (o doppio clic) è necessario chiamare GetHitTestInfoAt e reagire solo se si è verificato l'evento clic su un elemento effettivo.
Ecco un'implementazione di esempio dell'evento OnDblClick di ListView1:
// gestisce il doppio clic di ListView1procedura TForm.ListView1DblClick(Mittente: TObject);
var
hts: THitTests;
ht: THitTest;
sht: corda;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
inizio
// posizione del cursore del mouse relativa a ListView
ListViewCursosPos: = ListView1.ScreenToClient (Mouse. CursorPos);
// doppio clic dove?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// hit test "debug"
Didascalia: = '';
per HT nel hts fare
inizio
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Caption: = Format ('% s% s |', [Caption, sht]);
fine;
// trova l'elemento con doppio clic
Se hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] poi
inizio
selectedItem: = ListView1.Selected;
// fai qualcosa con l'elemento doppio clic!
Caption: = Format ('DblClcked:% s', [selectedItem. Didascalia]) ;
fine;
fine;
Nel gestore di eventi OnDblClick (o OnClick), leggi la funzione GetHitTestInfoAt fornendo la posizione del mouse "all'interno" del controllo. Per ottenere la posizione del mouse correlata alla vista elenco, la funzione ScreenToClient viene utilizzata per convertire un punto (mouse X e Y) nelle coordinate dello schermo in coordinate locali o dell'area client.
GetHitTestInfoAt restituisce un valore di THitTests genere. THitTests è un insieme di THitTest valori enumerati.
Il THitTest enumerazione i valori, con la loro descrizione, sono:
- htAbove - sopra l'area client.
- htBelow - sotto l'area client.
- htNowhere - all'interno del controllo, ma non su un oggetto.
- htOnItem - su un elemento, il suo testo o la sua bitmap.
- htOnButton - su un pulsante.
- htOnIcon - su un'icona.
- htOnIndent - sull'area rientrata di un elemento.
- htOnLabel - su un'etichetta.
- htOnRight - sul lato destro di un oggetto.
- htOnStateIcon - su un'icona di stato o bitmap associata a un elemento.
- htToLeft - a sinistra dell'area client.
- htToRight - a destra dell'area client.
Se il risultato della chiamata a GetHitTestInfoAt è a sottoinsieme (set di Delphi!) di [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] puoi essere sicuro che l'utente abbia fatto clic sull'elemento (o sulla sua icona / icona di stato).
Infine, se quanto sopra è vero, leggi il Selezionato proprietà della vista elenco, restituisce il primo elemento selezionato (se è possibile selezionare più elementi) nella vista elenco. Fai qualcosa con l'elemento cliccato / doppio clic / selezionato ...
Assicurati di scaricare il codice sorgente completo per esplorare il codice e imparare adottandolo.