ListBox - usando drag e drop na mesma listbox

Top  Previous  Next

Movendo Itens Em Uma ListBox

 

Este pequeno exemplo mostra como mover itens de uma ListBox usando o mouse. Esta ListBox se comportará de forma semelhante às listas de músicas que se encontram no Windows Media Player e WinAmp. 

Os passos abaixo devem ser seguidos na ordem em que aparecem para que o exemplo funcione.

 

1) Configure a propriedade DragMode da ListBox para dmAutomatic;

 

2) Em seguida, será necessário escrever os códigos para os eventos OnDragOver e OnDragDrop da ListBox.Para isso, clique na guia Events do Object Inspector (caso o Object Inspector não esteja visível, pressione F11). Procure o evento OnDragOver e dê um clique duplo na coluna à sua frente. Isso fará com que a procedure do evento seja exibida. O código é o seguinte:

 

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, 

                 Y: Integer; State: TDragState; var Accept: Boolean); 

var 

    DropIndex: Integer; 

    TempStr : String; 

begin 

    with TListBox(Sender) do 

    begin 

         DropIndex := ItemAtPos(Point(X,Y), True); 

         if (DropIndex > -1and (DropIndex <> ItemIndex) then 

         begin 

              TempStr := Items[DropIndex]; 

              Items[DropIndex] := Items[ItemIndex]; 

              Items[ItemIndex] := TempStr; 

              ItemIndex := DropIndex; 

         end

    end

end

 

3) Agora, faça o mesmo para o evento OnDragDrop: 

 

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, 

                Y: Integer); 

var 

    DropIndex: Integer; 

begin 

    DropIndex := TListBox(Sender).ItemAtPos(Point(X,Y),False); 

    with TListBox(Source) do 

    begin 

        TListBox(Sender).Items.Insert(DropIndex, Items[ItemIndex]); 

        Items.Delete(ItemIndex); 

    end

end

 

 

Obs.: Este código permite que o item que está sendo movido seja visto enquanto é arrastado para outra posição dentro da lista. Para inserir itens na lista a fim de testar o exemplo, basta acessar a propriedade Items da ListBox e clicar no pequeno botão com três pontos na coluna em frente a ela.