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ı: 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
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
WWW
Cevapla
#6
(22-09-2018, Saat: 09:42)ahmetb Adlı Kullanıcıdan Alıntı: 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ü.
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ı:
(22-09-2018, Saat: 09:42)ahmetb Adlı Kullanıcıdan Alıntı: 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


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Frame'den bir sonraki frame geçmek hbulus 1 291 20-10-2023, Saat: 15:00
Son Yorum: yhackup
  FmxPasLibVlcPlayer sonraki klibe geçiş ekank 11 4.463 18-04-2020, Saat: 18:28
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi