Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Şartlı drag and drop
#1
Merhaba,

Anlatacaklarım biraz karışık olabilir kusura bakmayın şimdiden.

Forumda 3 adet TListView kullanıyorum duruma drag and drop yapmak istiyorum. Fakat çözemedim bir türlü.
Yardımlarınızı rica ederim.


1. ListView1 sadece kendi içinde drag and dpor yapacak.
2. ListView2 buda sadece kendi içinde drag and dpor yapacak.
3. ListView3 sadece ListView2'ye drag and dpor yapacak.

Umarım anlatmayı başarmışımdır.



procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  CurrentItem, NextItem, DragItem, DropItem: TListItem;
begin
  if (Sender is TListView) and (Source is TListView) then
  begin
    TListView(Sender).Items.BeginUpdate;
    try
      DropItem := TListView(Sender).GetItemAt(X, Y);
      CurrentItem := TListView(Source).Selected;
      While Assigned(CurrentItem) Do
      begin
        NextItem := TListView(Source).GetNextItem(CurrentItem, SdAll, [IsSelected]);
        if Assigned(DropItem) then
          DragItem := TListView(Sender).Items.Insert(DropItem.Index)
        else
          DragItem := TListView(Sender).Items.Add;
        DragItem.Assign(CurrentItem);
        if (Source = Sender) then
          CurrentItem.Free;
        CurrentItem := NextItem;
      end;
    finally
      TListView(Sender).Items.EndUpdate;
    end;
  end;
end;

procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Sender = ListView1;
end;
Cevapla
#2
Küçük bir karışıklık olmuş sanırım, Sender yerine Source yazarak geleni  kontrol edebilirsiniz. 

//1. ListView1 sadece kendi içinde drag and dpor yapacak.
//2. ListView2 buda sadece kendi içinde drag and dpor yapacak.
//3. ListView3 sadece ListView2'ye drag and dpor yapacak.

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

procedure TForm1.ListView2DragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
begin
 Accept := (Source = ListView2) or (Source = ListView3)
end;

procedure TForm1.ListView3DragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
begin
 Accept := False;
end;
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
(05-06-2020, Saat: 21:12)mrmarman Adlı Kullanıcıdan Alıntı: Küçük bir karışıklık olmuş sanırım, Sender yerine Source yazarak geleni  kontrol edebilirsiniz. 

//1. ListView1 sadece kendi içinde drag and dpor yapacak.
//2. ListView2 buda sadece kendi içinde drag and dpor yapacak.
//3. ListView3 sadece ListView2'ye drag and dpor yapacak.

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

procedure TForm1.ListView2DragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
begin
 Accept := (Source = ListView2) or (Source = ListView3)
end;

procedure TForm1.ListView3DragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
begin
 Accept := False;
end;

Çok teşekkür ederim +Rep
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Exclamation Dbgrid Şartlı Renklendirme erdemtaner 5 1.268 19-10-2022, Saat: 12:13
Son Yorum: erdemtaner
  Run Time paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak?(ÇÖZÜLDÜ) Hsavci 8 2.115 08-04-2021, Saat: 01:01
Son Yorum: Hsavci
  Dbgrid Drag&Drop İle Satır Sıralama TheEAK 6 2.883 18-03-2021, Saat: 14:50
Son Yorum: TheEAK
  Windows Gezgininden (DRAG DROP) woywod 6 2.264 23-12-2020, Saat: 12:59
Son Yorum: woywod
  [ÇÖZÜLDÜ] Drag Drop Hatası shooterman 7 3.716 26-06-2020, Saat: 12:44
Son Yorum: shooterman



Konuyu Okuyanlar: 1 Ziyaretçi