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

webmaster@clubedelphi.com.br