Movendo itens de um ListView para uma lixeira

 

Adicione no formulário um ListView (Win32) e dois Images (Additonal). Adicione alguns itens no ListView e altere a propriedade DragMode  para dmAutomatic. Para cada Image adicione uma figura, sendo uma para “lixeira vazia” e outra para “lixeira cheia”.

No Image com a lixeira cheia, altere a propriedade Visible para False. Precisamos codificar dois eventos do componente que irá “receber o arraste do mouse”, nesse caso o Image com a lixeira vazia. No evento OnDragOver do Image digite o seguinte código:

 

Accept := Source is TListView;

if Accept then

begin

  Image1.Visible := False;

  Image2.Visible := True;

end;

 

Estamos alterando o parâmetro Accept (do tipo Boolean), apenas se o componente (Source) que esta sendo arrastado, seja do tipo TListView. Se alterássemos para True o parâmetro, sem verificar o Source, qualquer componente poderia ser arrastado para o Image.

Caso o parâmetro seja verdadeiro, mostramos a lixeira cheia e escondemos a imagem da lixeira vazia. No evento OnDragDrop podemos perguntar se o usuário deseja excluir o item e então excluí-lo, através do seguinte código:

 

if MessageDlg('Tem certeza que deseja excluir?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then

  ListView1.DeleteSelected;

 

Rode a aplicação e arraste os itens para a lixeira.