Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Sonraki bilgiler
#1
TStringList.Create Metodunu kullanarak Listviewdeki verileri kopyala yapıştır, işlemi için aşağıdaki kodlarla işlem yaptıracağım. 

 TStringListe verileri sorunsuz olarak alıyorum. Fakat sonraki kayıta geçince (with message 'access violation at 0x0098bec9: read of address 0x00000000') hatası alıyorum. Bu sorunu nasıl çözebilirim? 

   
 begin
      DDList := TStringList.Create;
      ListView1.BeginUpdate;
      try
        for I := Index to ListView1.Items.Count do
        begin
          // AItem := TListViewItem(ListView1.Selected); // seçili kayıt bilgileri geliyor

          AItem := TListViewItem(ListView1.Items[I]); // ???????

          for I := 0 to AItem.Objects.Count - 1 do
          begin
            DDList.Add(AItem.Objects[I].Data.AsString);
            showmessage(DDList.Text);
          end;
        end;
      finally
        DDList.Free;
        ListView1.EndUpdate;
      end;
Cevapla
#2
objects. count değil items. count olması gerekmez mi? nesnelerin sayısı sizin kontrolünüzde zaten, item sayısı değişken
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#3
(22-09-2018, Saat: 09:55)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.objects. count değil items. count olması gerekmez mi?  nesnelerin sayısı sizin kontrolünüzde zaten, item sayısı değişken

Hocam  items. count  ile yaptığımda verilere ulaşamıyorum.


Fakat sonraki kayıta geçince hata veriyor  
   for I := Index to ListView1.Items.Count do
        begin
         AItem := TListViewItem(ListView1.Items[I]); // ???????
Cevapla
#4
Daha önceki sorunuzda cevaplamışım.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#5
for döngüsünü "...Count - 1" şeklinde kullanın
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
WWW
Cevapla
#6
(22-09-2018, Saat: 09:42)ahmetb Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.TStringList.Create Metodunu kullanarak Listviewdeki verileri kopyala yapıştır, işlemi için aşağıdaki kodlarla işlem yaptıracağım. 

 TStringListe verileri sorunsuz olarak alıyorum. Fakat sonraki kayıta geçince (with message 'access violation at 0x0098bec9: read of address 0x00000000') hatası alıyorum. Bu sorunu nasıl çözebilirim? 

   
 begin
      DDList := TStringList.Create;
      ListView1.BeginUpdate;
      try
        for I := Index to ListView1.Items.Count do
        begin
          // AItem := TListViewItem(ListView1.Selected); // seçili kayıt bilgileri geliyor

          AItem := TListViewItem(ListView1.Items[I]); // ???????

          for I := 0 to AItem.Objects.Count - 1 do
          begin
            DDList.Add(AItem.Objects[I].Data.AsString);
            showmessage(DDList.Text);
          end;
        end;
      finally
        DDList.Free;
        ListView1.EndUpdate;
      end;

Merhaba,
1- Dıştaki döngü başlangıç değeri (i değişkeni), sıfırdan başlanmalı. for I := 0 to ...
2- Aynı döngünün bitiş değeri (ListView1.Items.Count), başlangıç sıfır olduğu için bitiş sayısı bir eksiltilmelidir. ListView1.Items.Count-1
3- İçteki döngü başlangıç değişken ile dış döngü başlangıç değişkenleri aynı olamaz. Her ikisi de i olarak tanımlanmış. 

Nihai hali aşağıdaki gibi olmalıdır. 
var
  AItem: TListViewItem;
 DDList: TStringList;
 I: Integer;
 j: Integer;
begin
 DDList := TStringList.Create;
 ListView1.BeginUpdate;
 try
   for I := 0 to ListView1.Items.Count-1 do
   begin
     // AItem := TListViewItem(ListView1.Selected); // seçili kayıt bilgileri geliyor

     AItem := TListViewItem(ListView1.Items[I]); // ???????

     for j := 0 to AItem.Objects.Count - 1 do
     begin
       DDList.Add(AItem.Objects[j].Data.AsString);
       showmessage(DDList.Text);
     end;
   end;
 finally
   DDList.Free;
   ListView1.EndUpdate;
 end;
end;
Bu düzeltmelerden sonra yaptığım testte herhangi bir hata uyarısı oluşmadı. ShowMessage'da item değerleri göründü.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#7
Objects siz eklemediğiniz sürece sadece 3 tane, Item, Detail, Bitmap olduğundan hiç döngüye girmeyin. Values ile mevcutları kullanın. count-1 fayda etmez malesef. Daha önceki sorunuzda açıkça yazmıştım.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#8
Evet hatırlıyorum ( AItem := ListView1.Items[I]; );

(22-09-2018, Saat: 10:26)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(22-09-2018, Saat: 09:42)ahmetb Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.TStringList.Create Metodunu kullanarak Listviewdeki verileri kopyala yapıştır, işlemi için aşağıdaki kodlarla işlem yaptıracağım. 

 TStringListe verileri sorunsuz olarak alıyorum. Fakat sonraki kayıta geçince (with message 'access violation at 0x0098bec9: read of address 0x00000000') hatası alıyorum. Bu sorunu nasıl çözebilirim? 

   
 begin
      DDList := TStringList.Create;
      ListView1.BeginUpdate;
      try
        for I := Index to ListView1.Items.Count do
        begin
          // AItem := TListViewItem(ListView1.Selected); // seçili kayıt bilgileri geliyor

          AItem := TListViewItem(ListView1.Items[I]); // ???????

          for I := 0 to AItem.Objects.Count - 1 do
          begin
            DDList.Add(AItem.Objects[I].Data.AsString);
            showmessage(DDList.Text);
          end;
        end;
      finally
        DDList.Free;
        ListView1.EndUpdate;
      end;

Merhaba,
1- Dıştaki döngü başlangıç değeri (i değişkeni), sıfırdan başlanmalı. for I := 0 to ...
2- Aynı döngünün bitiş değeri (ListView1.Items.Count), başlangıç sıfır olduğu için bitiş sayısı bir eksiltilmelidir. ListView1.Items.Count-1
3- İçteki döngü başlangıç değişken ile dış döngü başlangıç değişkenleri aynı olamaz. Her ikisi de i olarak tanımlanmış. 

Nihai hali aşağıdaki gibi olmalıdır. 
var
  AItem: TListViewItem;
 DDList: TStringList;
 I: Integer;
 j: Integer;
begin
 DDList := TStringList.Create;
 ListView1.BeginUpdate;
 try
   for I := 0 to ListView1.Items.Count-1 do
   begin
     // AItem := TListViewItem(ListView1.Selected); // seçili kayıt bilgileri geliyor

     AItem := TListViewItem(ListView1.Items[I]); // ???????

     for j := 0 to AItem.Objects.Count - 1 do
     begin
       DDList.Add(AItem.Objects[j].Data.AsString);
       showmessage(DDList.Text);
     end;
   end;
 finally
   DDList.Free;
   ListView1.EndUpdate;
 end;
end;
Bu düzeltmelerden sonra yaptığım testte herhangi bir hata uyarısı oluşmadı. ShowMessage'da item değerleri göründü.


Evet dediğiniz gibi iki döngü için (i) kullanamadan kaynaklanıyor. Döngüyü sıfırdan başlatmama nedeni ise istediğim satırdan başlasın diye.

Herkese teşekkür ederim yardımlarınız için...
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi