Arrastar Dados para ListBox ou ListView


Você já precisou arrastar elementos de um controle usando o mouse e movê-los para outro controle ? O exemplo clássico é mover elementos de um controle Listbox - Listbox1-para outro - Listbox2 - usando os eventos OLEDragDrop OLeStartDrop

O evento OLEDragDrop ocorre quando um arrastamos um componente entre dois controles somente quando a propriedade OLEDropMode.

Bom vamos começar, precisaremos de: 
3 - TListView

>> Vamos colocar os três TListView lado a lado;
>> Marque as propriedades;

ViewStyle = vsList
DragMade = dmAutomatic


No evento ListView1DragDrop
procedure TFMultiSelect.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source is TListView then
    TListView(Sender).EndDrag(True);
end;

ListView1DragOver
procedure TFMultiSelect.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TListView;
end;

ListView1EndDrag
procedure TFMultiSelect.ListView1EndDrag(Sender, Target: TObject; X, Y: Integer);
var
  Item: TListItem;
  i: Integer;
begin
  if (Sender is TListView) and (Target is TListView) then begin
    Item := TListView(Target).GetItemAt(X, Y); 
    for i := 0 to TListView(Sender).Items.Count - 1 do begin 
      if TListView(Sender).Items[i].Selected then 
        TListView(Target).AddItem(TListView(Sender).Items[i].Caption, TListView(Sender).Selected); 
    end;
    for i := TListView(Sender).Items.Count - 1 downto 0 do
      if TListView(Sender).Items[i].Selected then begin 
        TListView(Sender).Selected.Delete; 
        TListView(Target).Update; 
        TListView(Sender).Update; 
      end; 
  end; 

end;

0 comentários:

Postar um comentário