ListBox - usando drag e drop

Top  Previous  Next

Resumo: 

Um método bem simples de implementar uma ordenação de um 

ListBox através de Drag-Drop, utilizando apenas os eventos 

oferecidos pelo próprio componente TListBox.

 

Texto: 

Existem diversos métodos de implementar um ListBox com 

recurso de DragDrop para ordenação dos items. 

Entretanto, neste caso, demonstramos como realizar o mesmo 

efeito através dos eventos OnDragDrop e OnDragOver. 

Veja como é simples:

 

Primeiro, certifique-se que a propriedade DragMode seja dmAutomatic.

 

No evento OnDragOver só devemos aceitar um item arrastado 

do próprio ListBox, ou seja, se o parâmetro Sender for igual ao Source.

 

 

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

  State: TDragState; var Accept: Boolean);

begin

  Accept := (Sender = Source);

end;

 

Já no evento OnDragDrop, utilizamos o método ItemAtPos para descobrir qual item está sob o cursor do mouse, e alteramos a ordem com o método Move.

 

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

var

  i: Integer;

begin

  with TListBox(Sender) do

  begin

    if ItemIndex > -1 then

    begin

      i := ItemAtPos(Point(x,y),True);

      Items.Move(ItemIndex, i);

      ItemIndex := i;

    end;

  end;

end;