Movendo Itens em um ListBox
Este pequeno exemplo mostra como mover itens de um ListBox usando o mouse. Este 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.
por Edison Costa