TlistView AddItem ile deger atarken Access Violation

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

TlistView AddItem ile deger atarken Access Violation

Mesaj gönderen neu84 »

S.a arkadaşlar, yaklaşık 10 tane listview kullanıcam bi formda, üst üste koyucam, combobaxtan bi seçim yaptıgımda ona göre gösterilecek bitanesi. listview çok oldugu için bi proc la halledebilirim diye düşündüm. ufak bi deneme yaptım ancak access violation hatası verdi, Add yapmadıgım için items.add; demedim; aşagıdaki kodda sizce ne eksigim yada yanlışım olabilir?

Kod: Tümünü seç

var
viewAdi:string;
begin
viewAdi:='ListView';
viewAdi:=viewAdi+Trim(Edit1.Text); //burada 1 yada 2 yada 3 yada... verilecek
TListView(viewAdi).AddItem('Deneme',TObject(viewAdi));
end;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: TlistView AddItem ile deger atarken Access Violation

Mesaj gönderen aslangeri »

s.a.
findcontrol kullanmalısın

Kod: Tümünü seç

tlstview(findcontrol(viewadi))...........
gibi birşey olmalı.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: TlistView AddItem ile deger atarken Access Violation

Mesaj gönderen neu84 »

aslangeri yazdı:s.a.
findcontrol kullanmalısın

Kod: Tümünü seç

tlstview(findcontrol(viewadi))...........
gibi birşey olmalı.
Tşk ederim.Hemen deniyorum
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: TlistView AddItem ile deger atarken Access Violation

Mesaj gönderen neu84 »

s.a,
Önerdiginiz kodu denedim, [DCC Error] Unit1.pas(161): E2010 Incompatible types: 'HWND' and 'string' diye bi hata verdi.
Kodum şu şekildeydi.

Kod: Tümünü seç

var
viewAdi:string;
begin
viewAdi:='ListView';
viewAdi:=viewAdi+Trim(Edit1.Text); //burada 1 yada 2 yada 3 yada... verilecek
TListView(FindControl(viewAdi)).AddItem('Deneme',TObject(viewAdi));
Birde bu şekilde denemek istedim, bunda da bu hatayı verdi.. [DCC Error] Unit1.pas(155): E2010 Incompatible types: 'HWND' and 'TObject'

Kod: Tümünü seç

var
viewAdi:TObject;
str:string;
begin
str:='ListView1';
viewAdi:=TObject.Create;
viewAdi:=TObject(str);
//viewAdi:=viewAdi+Trim(Edit1.Text);
TListView(FindControl(viewAdi)).AddItem('Deneme',TObject(str));
Bu sorunu aşabilecegim bi öneride de bulunurmusunuz lütfen..
ChangeoveR
Üye
Mesajlar: 29
Kayıt: 12 Mar 2008 03:29

Re: TlistView AddItem ile deger atarken Access Violation

Mesaj gönderen ChangeoveR »

Formunuza;

1 - Dilediginiz kadar ust uste gelecek sekilde ListView bileseni yerlestirin
2 - Bir adet combobox bileseni yerletirin
3 - Bir adet Edit bileseni yerlestirin
4 - Bir adet Button bileseni yerlestirin

Combobox bileseninin Items ozelligine "ListView" ifadesini girin. Edit bilesenine de programin calisma esnasinda "1,2,3,4,..." gibi sayilar girilecektir.

Ve programin kodu :

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
 var
  Bilesen_Adi : TComponentName;
begin

  Bilesen_Adi := trim(ComboBox1.Items.Text) + Trim(Edit1.Text);

  if FindComponent(Bilesen_Adi) <> nil then
  begin
  (FindComponent(Bilesen_Adi) as TListView).AddItem('deneme',TObject(Bilesen_Adi));
  (FindComponent(Bilesen_Adi) as TListView).BringToFront;
  end;

end;
Anladigim kadariyla yardimci olmaya calistim, calismalarinizda kolayliklar dilerim...
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: TlistView AddItem ile deger atarken Access Violation

Mesaj gönderen neu84 »

ChangeoveR yazdı:Formunuza;

1 - Dilediginiz kadar ust uste gelecek sekilde ListView bileseni yerlestirin
2 - Bir adet combobox bileseni yerletirin
3 - Bir adet Edit bileseni yerlestirin
4 - Bir adet Button bileseni yerlestirin

Combobox bileseninin Items ozelligine "ListView" ifadesini girin. Edit bilesenine de programin calisma esnasinda "1,2,3,4,..." gibi sayilar girilecektir.

Ve programin kodu :

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
 var
  Bilesen_Adi : TComponentName;
begin

  Bilesen_Adi := trim(ComboBox1.Items.Text) + Trim(Edit1.Text);

  if FindComponent(Bilesen_Adi) <> nil then
  begin
  (FindComponent(Bilesen_Adi) as TListView).AddItem('deneme',TObject(Bilesen_Adi));
  (FindComponent(Bilesen_Adi) as TListView).BringToFront;
  end;

end;
Anladigim kadariyla yardimci olmaya calistim, calismalarinizda kolayliklar dilerim...
Yardımınız için Çokkk teşekkür ederim.. Tam istedigim gibi.. Peki benim kullandıgım Controls ile FindComponent arasında ne fark var, neden bunda access violation hatası vermedi sizce?
Ve FindComponent(Bilesen_Adi) as TListView) şeklinde degilde TListview(FindComponent(Bilesen_Adi))) gibi cast edilmesi arasında ne fark var, hangi durumlarda hangisini kullanmak gerekiyor?
Cevapla