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 > -1) and (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.
|