TListView Sürükle Bırak ile Birden Fazla Nesneyi Yeniden Düz

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
RamazanG
Üye
Mesajlar: 73
Kayıt: 16 Tem 2010 03:38

TListView Sürükle Bırak ile Birden Fazla Nesneyi Yeniden Düz

Mesaj gönderen RamazanG »

Makale: Zarko Gajic.
Çeviri: Ramazan Gülbahar.

TListView Sürükle Bırak ile Birden Fazla Nesneyi Yeniden Düzenlemek

Resim

Çoğu MP3 (ya da herhangi bir multimedia) oynatıcı aşşağıdaki kodu kullanarak çalma listesini düzenlemeye olanak verir.

TlistView İle Birden Fazla Nesneyi Sürükle Bırak

Formun OnCreate olayında, ListView çoklu nesne seçimi ayarlanır, görünüş sitili report olarak ayarlanır, satır seçimi ayarlanır(enable row selection) ve otomatik sürükle özelliği verilir(automatic dragging).

ListView için OnDragOver, sadece belirtilen Source = Sender objesine uygun olanları kabul edecek.
OnDragDrop seçili nesnelerde olacak değişiklikleri ve yerlerini belirliyecek.

Form.OnCreate

Kod: Tümünü seç

procedure TListViewForm.FormCreate(Sender: TObject) ;
begin
  ListView1.DragMode := dmAutomatic;
  ListView1.RowSelect := true;
  ListView1.MultiSelect := true;
  ListView1.ViewStyle := vsReport;
end;
ListView OnDragDrop

Kod: Tümünü seç

procedure TListViewForm.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer) ;
var
  currentItem, nextItem, dragItem, dropItem : TListItem;
begin
  if Sender = Source then
  begin
    with TListView(Sender) do
    begin
      dropItem := GetItemAt(X, Y) ;
      currentItem := Selected;
      while currentItem <> nil do
      begin
        nextItem := GetNextItem(currentItem, SdAll, [IsSelected]) ;
        if Assigned(dropItem) then
          dragItem := Items.Insert(dropItem.Index)
        else
          dragItem := Items.Add;
        dragItem.Assign(currentItem) ;
        currentItem.Free;
        currentItem := nextItem;
      end;
    end;
  end;
end;
ListView OnDragOver

Kod: Tümünü seç

procedure TListViewForm.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean) ;
begin
  Accept := Sender = ListView1;
end;
Evet hepsi bu kadar. GetNextItem metodu IsSelected değişkeninin son değişkeni sağladığı zaman, geriye sonraki seçili nesneyi döndürecek. GetItemAt metodu seçili nesneleri istediğimiz yere ekler.
Cevapla