Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Drag drop id çakışması
#1
Selam, 

Aşağıdaki kodlarla (Listurun ve Listurunler) 2 faklı Listviewde sürükle bırak yapabiliyorum. 
Ancak ürünler listview deki id alanını sürükle bırak sırasında bilgilerinin diğer listviewe gelmesini istemiyorum, bunun sebebi güncelleme sırasında id çakışması gibi durumlarda sorun oluyor, bu durumu nasıl çözebilirim? 

procedure TForm1.ListurunDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  DragItem, DropItem, CurrentItem, NextItem: TListItem;
begin
  Listurun.Items.BeginUpdate;
  try
    if Sender = Source then
      with TListView(Sender) do
      begin
        DropItem := GetItemAt(X, Y);
        CurrentItem := Selected;
        while CurrentItem <> Nil do
        begin
          NextItem := GetNextItem(CurrentItem, SdAll, [IsSelected]);
          if DropItem = Nil then
            DragItem := Items.Add
          else
            DragItem := Items.Insert(DropItem.Index);
          DragItem.Assign(CurrentItem);
          CurrentItem.Free;
          CurrentItem := NextItem;
        end;
      end;
  finally
    Listurun.Items.EndUpdate;
  end;
end;
Cevapla
#2
(08-12-2017, Saat: 18:18)dilo Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSelam, 

Aşağıdaki kodlarla (Listurun ve Listurunler) 2 faklı Listviewde sürükle bırak yapabiliyorum. 
Ancak ürünler listview deki id alanını sürükle bırak sırasında bilgilerinin diğer listviewe gelmesini istemiyorum, bunun sebebi güncelleme sırasında id çakışması gibi durumlarda sorun oluyor, bu durumu nasıl çözebilirim? 

procedure TForm1.ListurunDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  DragItem, DropItem, CurrentItem, NextItem: TListItem;
begin
  Listurun.Items.BeginUpdate;
  try
    if Sender = Source then
      with TListView(Sender) do
      begin
        DropItem := GetItemAt(X, Y);
        CurrentItem := Selected;
        while CurrentItem <> Nil do
        begin
          NextItem := GetNextItem(CurrentItem, SdAll, [IsSelected]);
          if DropItem = Nil then
            DragItem := Items.Add
          else
            DragItem := Items.Insert(DropItem.Index);
          DragItem.Assign(CurrentItem);
          CurrentItem.Free;
          CurrentItem := NextItem;
        end;
      end;
  finally
    Listurun.Items.EndUpdate;
  end;
end;

Merhaba,

Bu tarz meselelerde varsayılan komponentlerle işinizi görmeniz çok zor bir durum. En azından tepkimeler ve yapmak istediklerinize karşı çıkacak çeşitli engelleri sırasıyla aşmanız gerekir. Şuanda karşılaştığınız engel gibi, daha ilerde birçok engel sizi bulacaktır. Acizane tavsiyem bir Package projesi oluşturun. Kullanacağınız tüm komponentlerdeki ihtiyaçlarınıza göre özelleştirmelerinizi yapın. TListView sınıfını miras alan size ait yeni bir TMyListView (isim size kalmış) sınıfı oluşturun. Tüm property ve function tanımlarınızı buraya yazın. Daha sonra Package olarak derlediğinizde ihtiyaçlarınıza tamamen karşılık veren, TListView'in çekirdek yapısını birebir kullanan, üzerinde de özelleştirdiğiniz alan, özellik, fonksiyon, tanım vb. yer alan güzel bir komponent oluşmuş olacaktır.

Konu ile ilgili Linkleri Görebilmeniz İçin Giriş yap veya Üye Olyazmış olduğum bilgilendirmeleri okumanız size avantaj sağlayacaktır.
{ talk is cheap show me the code. }
Cevapla
#3
Sorunu biraz faklı bir şekilde çözdüm diye bilirim listviewde iki farklı id alanı oluşturarak çözdüm. Teşekkürler.
Cevapla

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi