Implementando no item Clique / Clique duas vezes para TListView

Delphi's O controle TListView exibe uma lista de itens em colunas com cabeçalhos e subitens de coluna, ou vertical ou horizontalmente, com ícones pequenos ou grandes.

Como a maioria dos controles Delphi, o TListView expõe o OnClick e OnDblClick Eventos (OnDoubleClick).

Infelizmente, se você precisar saber em qual item foi clicado ou clicado duas vezes, não poderá simplesmente manipular os eventos OnClick / OnDblClick para obter o item clicado.

O evento OnClick (OnDblClick) do TListView é acionado sempre que o usuário clica no controle - ou seja, sempre que o "clique" ocorre em algum lugar dentro da área do cliente do controle.

O usuário pode clicar dentro da exibição de lista, MAS "errar" qualquer um dos itens. Além disso, como a exibição em lista pode mudar sua exibição, dependendo da propriedade ViewStyle, o usuário pode ter clicado em um item, em uma legenda de item, em um ícone de item, "em nenhum lugar", em um ícone de estado do item, etc.

Nota: a propriedade ViewStyle determina como os itens são exibidos na exibição em lista: os itens podem ser exibidos como um conjunto de ícones móveis ou como colunas de texto.

instagram viewer

Exibição de lista. No item Clique em & ListView. No item, clique duas vezes

Para poder localizar o item clicado (se houver) quando o evento OnClick para a exibição de lista for disparado, é necessário determinar qual Os elementos da exibição em lista estão no ponto especificado pelos parâmetros X e Y - que é a localização do mouse no momento da "clique".

O TListiew's GetHitTestInfoAt A função retorna informações sobre o ponto especificado na área do cliente da exibição em lista.

Para garantir que o item tenha sido clicado (ou clicado duas vezes), é necessário chamar GetHitTestInfoAt e reagir apenas se o evento click ocorrer em um item real.

Aqui está um exemplo de implementação do evento OnDblClick do ListView1:

// manipula o ListView1 ao clicar duas vezesprocedimento TForm.ListView1DblClick(Remetente: TObject);
var
hts: THitTests;
ht: THitTest;
sht: corda;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
início
// posição do cursor do mouse relacionada ao ListView
ListViewCursosPos: = ListView1.ScreenToClient (Mouse. CursorPos);
// clique duas vezes onde?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// teste de sucesso "debug"
Legenda: = '';
para ht dentro hts Faz
início
sht: = GetEnumName (TypeInfo (THitTest), Inteiro (ht));
Legenda: = Formato ('% s% s |', [Legenda, sht]);
fim;
// localiza o item clicado duas vezes
E se hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] então
início
selectedItem: = ListView1.Selected;
// faça algo com o item clicado duas vezes!
Legenda: = Formato ('DblClcked:% s', [selectedItem. Legenda]);
fim;
fim;

No manipulador de eventos OnDblClick (ou OnClick), leia a função GetHitTestInfoAt, fornecendo a localização do mouse "dentro" do controle. Para obter a localização do mouse relacionada à exibição em lista, a função ScreenToClient é usada para converter um ponto (mouse X e Y) nas coordenadas da tela em coordenadas locais ou na área do cliente.

O GetHitTestInfoAt retorna um valor de THitTests tipo. O THitTests é um conjunto de THitTest valores enumerados.

O THitTest enumeração valores, com sua descrição, são:

  • htAbove - acima da área do cliente.
  • htBelow - abaixo da área do cliente.
  • htNowhere - dentro do controle, mas não em um item.
  • htOnItem - em um item, seu texto ou seu bitmap.
  • htOnButton - em um botão.
  • htOnIcon - em um ícone.
  • htOnIndent - na área recuada de um item.
  • htOnLabel - em um rótulo.
  • htOnRight - no lado direito de um item.
  • htOnStateIcon - em um ícone de estado ou bitmap associado a um item.
  • htToLeft - à esquerda da área do cliente.
  • htToRight - à direita da área do cliente.

Se o resultado da chamada para GetHitTestInfoAt for um subconjunto (conjuntos de Delphi!) de [htOnIcon, htOnItem, htOnLabel, htOnStateIcon], você pode ter certeza de que o usuário clicou no item (ou em seu ícone / ícone de estado).

Por fim, se o exposto acima for verdadeiro, leia o Selecionado propriedade da exibição em lista, ele retorna o primeiro item selecionado (se vários puderem ser selecionados) na exibição em lista. Faça algo com o item clicado / clicado duas vezes / selecionado ...

Certifique-se de baixar o código fonte completo para explorar o código e aprender adotando-o.

instagram story viewer