Delphi Can

Orjinalini görmek için tıklayınız: Listbox insert
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
Merhaba;

İki adet listboxsım var listbox2'den listbox1'e insert işlemi yaptırmak istiyorum. 
Ancak sıkıntı şu sadece listbox2'de dizayn ettiğim gibi listbox1'e nasıl insert metoduyla aktara bilirim. 


procedure TfrmCustomList.Button3Click(Sender: TObject);
begin
ListBox1.Items.Insert(0, ListBox2.Selected.StylesData['Urunler'].AsString);


// ListBox2.Selected.StylesData['Fiyat'].AsString  ????

// ListBox2.Selected.StylesData['Icerik'].AsString ????
end;


Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Dizayn aşamasında yaptığınız özelleştirmeleri kod üzerinden gerçekleştirerek dizaynı uygulayan bir fonksiyon oluşturun. Aynı fonksiyonu aktif formun oluşma yada ekranda aktif olma aşamasında tetikleyin. Böylece ListBoxItem üzerinden stil taşımanıza gerek kalmayacaktır.
Her Item ekleme işlemini takiben aynı döngü içinde eklenen itemin
            StyleLookup        := ListBoxItemStyleAdi;
           OnApplyStyleLookup := ListBoxStyleLookup;

gibi ITEM'lerin başvuracağı style atamalarını yapın 

en sonunda döngü bitince de Repaint gibisinden işlem görecek  
ListBox.ApplyStyleLookup;

komutunu verin.

sonuç : 
ce4jnvh26dfrdsf9r3k1.gif
(26-08-2018, Saat: 12:58)mrmarman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Her Item ekleme işlemini takiben aynı döngü içinde eklenen itemin
            StyleLookup        := ListBoxItemStyleAdi;
           OnApplyStyleLookup := ListBoxStyleLookup;

gibi ITEM'lerin başvuracağı style atamalarını yapın 

en sonunda döngü bitince de Repaint gibisinden işlem görecek  
ListBox.ApplyStyleLookup;

komutunu verin.

sonuç : 
ce4jnvh26dfrdsf9r3k1.gif


Huh  Kafam karıştı;

Insert işlemi sırasında diğer (Fiyat veya Icerik)'ği inserte nasıl dahil edebilirim?

procedure TfrmCustomList.Button3Click(Sender: TObject);
begin
ListBox1.Items.Insert(0, ListBox2.Selected.StylesData['Urunler'].AsString);
 
 // ListBox2.Selected.StylesData['Fiyat'].AsString  ????
 
// ListBox2.Selected.StylesData['Icerik'].AsString ????
end;

Lisviewde bu kadar basitken, ListBox için bu mümkün değil mi?  Rolleyes
Listview1.Items.Insert(5);
Listview1.Items[5].Data['Fiyat'] := Listview2.Selected....
Listview1.Items[5].Data['Icerik'] :=Listview2.Selected....
Eklerken aslında Item'in TEXT property'sine ekleme yapmış oluyorsunuz. "Urunler"'e değil.

Şöyle deneyebilirsiniz.
    ListBox1.Items.Insert(0, 'herhangi bir text');
   With ListBox1.ItemByIndex(0) do // hani (0) nolu Item'e insert yapmışsın ya o bakımdan...
   begin
     StylesData['Urunler'] := ListBox2.Selected.StylesData['Urunler'].AsString;
     StylesData['Fiyat']   := ListBox2.Selected.StylesData['Fiyat'].AsString;
     StylesData['Icerik']  := ListBox2.Selected.StylesData['Icerik'].AsString;
     StyleLookup        := ListBox2.Selected.StyleLookup;
   end;


ListView ile karşılaştırmayın hiç isterseniz..  ListView VCL tarafında güçlü ancak FMX tarafında ise TListBox tabi bu benim kişisel iddiam...  Fikirler farklı olabilir.

Şu ListBox Item için StyleLookup yanında bir de veri atama işlemini ListBoxItem için OnApplyStyleLookup kısmında kullanmaya başlayın tadından yenmez  Big Grin

Şu an sadece tecrübe eksikliği yaşıyorsunuz, bir süre sonda farklı düşüneceğinize eminim.
Smile
(26-08-2018, Saat: 17:52)mrmarman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Eklerken aslında Item'in TEXT property'sine ekleme yapmış oluyorsunuz. "Urunler"'e değil.

Şöyle deneyebilirsiniz.
    ListBox1.Items.Insert(0, 'herhangi bir text');
   With ListBox1.ItemByIndex(0) do // hani (0) nolu Item'e insert yapmışsın ya o bakımdan...
   begin
     StylesData['Urunler'] := ListBox2.Selected.StylesData['Urunler'].AsString;
     StylesData['Fiyat']   := ListBox2.Selected.StylesData['Fiyat'].AsString;
     StylesData['Icerik']  := ListBox2.Selected.StylesData['Icerik'].AsString;
     StyleLookup        := ListBox2.Selected.StyleLookup;
   end;


ListView ile karşılaştırmayın hiç isterseniz..  ListView VCL tarafında güçlü ancak FMX tarafında ise TListBox tabi bu benim kişisel iddiam...  Fikirler farklı olabilir.

Şu ListBox Item için StyleLookup yanında bir de veri atama işlemini ListBoxItem için OnApplyStyleLookup kısmında kullanmaya başlayın tadından yenmez  Big Grin

Şu an sadece tecrübe eksikliği yaşıyorsunuz, bir süre sonda farklı düşüneceğinize eminim.
Smile



İlginize teşekkür ederim.
Kodları düzenledim fakat bu sefer başka bir durum ortaya çıktı.
Butona tıkladığımda 2. bir insert daha oluşuyor; Bu oluşan 2. insert bilgileri ise style deki textlerin içindeki bilgileri.
Bu oluşan 2. insertin oluşmasını nasıl engelleyebilirim?.

procedure TfrmCustomList.Button3Click(Sender: TObject);
var
  Item: TListBoxItem;
begin
  Item := TListBoxItem.Create(Nil);
  Item.Parent := ListBox1;
  Item.StyleLookup := 'OzelItem';
  ListBox1.BeginUpdate;
  try
    begin
      ListBox1.Items.Insert(0, IntToStr(ListBox2.Selected.Index));
      With ListBox1.ItemByIndex(0) do
      begin
   StylesData['Urunler'] := ListBox2.Selected.StylesData['Urunler'].AsString;
     StylesData['Fiyat']   := ListBox2.Selected.StylesData['Fiyat'].AsString;
     StylesData['Icerik']  := ListBox2.Selected.StylesData['Icerik'].AsString;
     StyleLookup        := ListBox2.Selected.StyleLookup;
      end;
    end;
  finally
    ListBox1.EndUpdate;
  end;
end;
Merhaba.

Bu kodda sadece bir Insert görünüyor. Kodlarınız içindeki başka EVENT'leri bir daha gözden geçirin. DragDrop vb. için MouseDown/MouseUp olaylarını özellikle mercek altına alın. Muhtemelen oralardan bir Insert tetikleniyor olabilir. Değerlendirmem bu şekilde.

Ayrıca foruma hoş geldiniz. Diğer başlıktaki sorunuz askıda kalmış. Verilen cevaplar için olumlu ya da olumsuz sonuç bildirirseniz aynı başlığa / soruya başvuran katılımcılar fikir sahibi olabilirler.

Başarılar.

EK: Ayrıca kodunuzu biraz sadeleştirelim. ITEM tanımlaması burada görev almamış. Aşağıdaki şekilde yeterli.

begin
 if ListBox2.Selected = nil then Exit;
 ListBox1.BeginUpdate;
 try
   ListBox1.Items.Insert(0, IntToStr(ListBox2.Selected.Index));
   With ListBox1.ItemByIndex(0) do
   begin
     StylesData['Urunler'] := ListBox2.Selected.StylesData['Urunler'].AsString;
     StylesData['Fiyat']   := ListBox2.Selected.StylesData['Fiyat'].AsString;
     StylesData['Icerik']  := ListBox2.Selected.StylesData['Icerik'].AsString;
     StyleLookup           := ListBox2.Selected.StyleLookup;
   end;
 finally
   ListBox1.EndUpdate;
 end;
end;

bir de ListBox'ların ITEM.TEXT property'leri iş görüyorsa şu şekilde Insert satırını değiştirebilirsiniz.

    ListBox1.Items.Insert(0, ListBox2.Selected.Text);

2. Insert durumunu geç fark ettim sorunu, çözdüm ancak foruma yazabilecek kadar vaktim kalmamıştı.
Kusura bakmayın.

Cevaplar için teşekkür ederim.
Merhaba.

Listbox2'den listbox1'e sürükle bırak,  insert durumu çözdüm. Fakat bu sefer başka bir sıkıntı ile karşılaştım.
listbox1 içinde (Allowdrag) ile yukarı aşağıya satır taşımak istediğimde 2. bir satır daha ekleniyor. Bu durumu nasıl çözebilirim?
procedure TfrmCustomList.ListBox1DragDrop(Sender: TObject;
  const Data: TDragObject; const Point: TPointF);
var
  X, Y: Single;
  Button: TMouseButton;
  Item, Row: TListBoxItem;
begin
  Item := TListBoxItem.Create(Nil);
  Item.Parent := ListBox1;
  Item.StyleLookup := 'OzelItem';
  ListBox1.BeginUpdate;
  try
    if Assigned(Sender as TListBox) then
    begin
      Row := ListBox1.ItemByPoint(Point.X, Point.Y);
      if Assigned(Row as TListBoxItem) and (Button = TMouseButton.mbLeft) then
      begin
        With ListBox1.ItemByIndex(Row.Index) do
        begin
        StylesData['Urunler'] := ListBox2.Selected.StylesData['Urunler'].AsString;
        StylesData['Fiyat']   := ListBox2.Selected.StylesData['Fiyat'].AsString;
       StylesData['Icerik']  := ListBox2.Selected.StylesData['Icerik'].AsString;
       StyleLookup           := ListBox2.Selected.StyleLookup;
        end;
      end;
    end;
  finally
    ListBox1.EndUpdate;
  end;
end;
kaynak Listbox ile hedef Listbox aynı ise işlem yapmasın şeklinde bir if ile Exit verin o kadar.
Sayfalar: 1 2