Delphi Can

Orjinalini görmek için tıklayınız: Seçilmeyen satır
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhabalar,

Listview de "Selected.Index" ile satırların yerini değiştiriyorum. 
Başka satır seçmeme rağmen, değiştirdiğim satırın altındaki satırda seçilmiş gibi "Gri" oluyor. Çözüm için ne yapabilirim?




8zLQNr.png
Index değişimi yaptığınız kod bloğunda ListView1.BeginUpdate fonksiyonunu çağırın. İşlem tamamlandığı zaman, yani son satırda da ListView1.EndUpdate fonksiyonunu çağırın.
(13-08-2018, Saat: 11:00)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: [ -> ]Index değişimi yaptığınız kod bloğunda ListView1.BeginUpdate fonksiyonunu çağırın. İşlem tamamlandığı zaman, yani son satırda da ListView1.EndUpdate fonksiyonunu çağırın.

try finally arasında BeginUpdate ve Lists.EndUpdate kullanıyorum sizin yorumunuzdan sonra BeginUpdate ve Lists.EndUpdate kodların yerini değiştirdim ama yine olmadı  Huh


            
         Lists.BeginUpdate;
            if Selected <> Nil then
            begin
              Items.Delete(Selected.Index); // KAYIT SİLDİM
              Items.Insert(Idxn); // EKLEDİM
              Items[Idxn].Data['Onay'] := POn;
              Items[Idxn].Data['UrunName'] := Pnane;
              Lists.EndUpdate;
              for J := 0 to Items.Count - 1 do
              begin
                Items[J].Data['SiraNo'] := IntToStr(J + 1);
              end;
            end;
          finally

          end;
(13-08-2018, Saat: 11:58)ahmetb Adlı Kullanıcıdan Alıntı: [ -> ]
(13-08-2018, Saat: 11:00)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: [ -> ]Index değişimi yaptığınız kod bloğunda ListView1.BeginUpdate fonksiyonunu çağırın. İşlem tamamlandığı zaman, yani son satırda da ListView1.EndUpdate fonksiyonunu çağırın.

try finally arasında BeginUpdate ve Lists.EndUpdate kullanıyorum sizin yorumunuzdan sonra BeginUpdate ve Lists.EndUpdate kodların yerini değiştirdim ama yine olmadı  Huh


            
         Lists.BeginUpdate;
            if Selected <> Nil then
            begin
              Items.Delete(Selected.Index); // KAYIT SİLDİM
              Items.Insert(Idxn); // EKLEDİM
              Items[Idxn].Data['Onay'] := POn;
              Items[Idxn].Data['UrunName'] := Pnane;
              Lists.EndUpdate;
              for J := 0 to Items.Count - 1 do
              begin
                Items[J].Data['SiraNo'] := IntToStr(J + 1);
              end;
            end;
          finally

          end;

With do kullanımı bazen sorun çıkartabiliyor. Event içinde parametre dahi olsa tam adını yazın. Lists.Items.Delete... If Lists.Selected... gibi.
(13-08-2018, Saat: 12:11)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: [ -> ]
(13-08-2018, Saat: 11:58)ahmetb Adlı Kullanıcıdan Alıntı: [ -> ]try finally arasında BeginUpdate ve Lists.EndUpdate kullanıyorum sizin yorumunuzdan sonra BeginUpdate ve Lists.EndUpdate kodların yerini değiştirdim ama yine olmadı  Huh


            
         Lists.BeginUpdate;
            if Selected <> Nil then
            begin
              Items.Delete(Selected.Index); // KAYIT SİLDİM
              Items.Insert(Idxn); // EKLEDİM
              Items[Idxn].Data['Onay'] := POn;
              Items[Idxn].Data['UrunName'] := Pnane;
              Lists.EndUpdate;
              for J := 0 to Items.Count - 1 do
              begin
                Items[J].Data['SiraNo'] := IntToStr(J + 1);
              end;
            end;
          finally

          end;

With do kullanımı bazen sorun çıkartabiliyor. Event içinde parametre dahi olsa tam adını yazın. Lists.Items.Delete... If Lists.Selected... gibi.

With do kaldırdım yine olmadı.
"Lists.EndUpdate" doğru yerde mi?
Kodların bir bölümü.


procedure TForm1.ListSDragDrop(Sender: TObject; const Data: TDragObject;
  const Point: TPointF);
var
  PSn: String;
begin
  try
    Obj := ObjectAtPoint(Screen.MousePos);
    if (Obj <> Nil) and (ListS.Selected <> Nil) and (ListS = Sender) then
    begin
      Idxn := GetIndexAtPos(ListS, Point);
      if (Idxn <> -1) and (ListS.Items.Count > 0) then
      begin
        ListS.BeginUpdate;
        try
          PSn := ListS.Items[ListS.Selected.Index].Data['Onay'].AsInteger;
          if ListS.Selected <> Nil then
          begin
            ListS.Items.Delete(ListS.Selected.Index); // Sil
            ListS.Items.Insert(Idxn); // Ekle
            ListS.Items[Idxn].Data['Onay'] := PSn;
            ListS.Selected.Index := Idxn;
            for J := 0 to ListS.Items.Count - 1 do
            begin
              //ListS.Items[J].Data['SiraNo'] := IntToStr(J + 1);
            end;
          end;
        finally
          ListS.EndUpdate;
        end;
      end;
    end;
  except
  end;
end;
(13-08-2018, Saat: 13:40)uparlayan Adlı Kullanıcıdan Alıntı: [ -> ]"Lists.EndUpdate" doğru yerde mi?

Hocam kodları paylaştım sizce hatalı bir kodlama var mı?
(14-08-2018, Saat: 15:38)ahmetb Adlı Kullanıcıdan Alıntı: [ -> ]
(13-08-2018, Saat: 13:40)uparlayan Adlı Kullanıcıdan Alıntı: [ -> ]"Lists.EndUpdate" doğru yerde mi?

Hocam kodları paylaştım sizce hatalı bir kodlama var mı?


Yukarıdaki kodda bir çok nesne ve değişken tanımlı, veri tipleri sadece paylaştığınız kısım itibariyle anlaşılabilir durumda değil o nedenle bir yorum yapmak çok zor.

Mesela GetIndexAtPos nereden geliyor, ne yapıyor, nedir belli değil, Idxn, Obj bunların veri tipleri belirsiz...

try...except kısmı neden boş? niye hata mesajını baskılıyorsunuz? Psn string ama kod içinde bir yerde "AsInteger" diye değer atamaya çalışmışsın...

Bu kadar eksik ip ucuyla doğru sonuca ulaşmak zor...