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; |