tlistview eleman eklemek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

tlistview eleman eklemek

Mesaj gönderen Serhan01 »

merhaba

arkadaşlar aşağıdaki kod hata veriyor bir türlü çözemedim. hata nedir acaba?

Kod: Tümünü seç

procedure TForm1.btnEkleClick(Sender: TObject);
const
  s:integer=0;
begin


  if lstv.Items.Count=0 then
    begin
        s:=0;

      lstv.Items.Add;

      lstv.Items[s].Caption:=ed1.Text;
      lstv.Items[s].SubItems.Add(cb1.text);
      lstv.Items[s].SubItems.Add(datetostr(dtp1.Date));

      s:=s+1;
    end;

end;
teşekkürler.
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: tlistview eleman eklemek

Mesaj gönderen PROGRAMADOR »

s'yi const yapıp değerini değiştiriyorsunuz.

Kod: Tümünü seç

const
  s:integer=0;
yerine

Kod: Tümünü seç

var
  s:integer;
begin
s:=0;
diyerek koda devam edin.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: tlistview eleman eklemek

Mesaj gönderen G.Arkas »

Bir ListView'e o şekilde veri ekleyemezsiniz. Aşağıda ki kod işinizi görür.

Kod: Tümünü seç

var
List:TListItem;
begin
List := lstv.Items.Add;
List.Caption := ed1.Text;
List.SubItems.Add(cb1.text);
List.SubItems.Add(datetostr(dtp1.Date));
Resim
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: tlistview eleman eklemek

Mesaj gönderen PROGRAMADOR »

Öyle de ekleniyor. Siz List:TListItem; diyerek listitem tanımlamış oldunuz. Arkadaş örneğinde tanımlama yapmadan uzun uzun listitem kodunu yazmış. Değişen bir şey yok.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: tlistview eleman eklemek

Mesaj gönderen G.Arkas »

Çok şey değişir eklenecek veri 1 satırdan fazlasıysa ve değişkense ne olacak? Her Item sayısını tespit etmek için bazı döngü ve kurallar kullanacak. Bu da Performans açısından Debug yaptığımızda 55-60 ms' ye tekabil eder ki bu büyük bir problemdir bence. Ama eğer tek satır kullanımı söz konusuysa elbette sorun yok.

İyi çalışmalar...
Resim
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

Re: tlistview eleman eklemek

Mesaj gönderen Serhan01 »

arkadaşlar cevaplar için teşekkürler. yukardaki örneğe bir kitapta rastlamıştım ve o zaman delphiye başladığım ilk gün olduğu için kodun çalışmamasına aval aval bakmıştım sadece. gerçi üzerinden çok fazla zaman geçmedi henüz ama dün delphi sitelerinde dolaşırken aynı örneğe rastladım yine ve neydi acaba kurcalayayım dedim. şu anda en azından const bir verinin değiştirilemeyeceğini ve problemin ordan kaynaklandığını tahmin ettim.

ama şu anda listview e eleman ekleme konusunda başka bir problem var. başka bir konu açmadan burdan devam edeyim. yukardaki kodu tam çalışır hale getirmeye çalıştım. getirdim ama cinsiyet seçimi var formda ve ben bu seçimin boş bırakılmasını veya her ikisininde seçilmesini istemiyorum. dolayısıyla listeye elemanların eklenmesini if döngüsü ile şarta bağladım. cinsiyet seçiminde problem olduğunda showmessage ile uyarı yapıyorum. buraya kadar problem yok ama bu uyarının arkasından listeview e boş bir satır ekleniyor. bu boş satırın eklenmesinin nedeni nedir?

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin

  with lstw1.Items.Add do
  begin
     if (chckb1.Checked=true) and (chckb2.Checked=true) then
      begin
        showmessage('ikisini birden seçme');
      end

      else if (chckb1.Checked=false) and (chckb2.Checked=False) then
        begin
          showmessage('cinsiyet seçimi yap');
        end
      else if chckb1.Checked=true then
        begin
          caption:=ed1.Text;
          subitems.Add(cb1.Text);
          subitems.Add(datetostr(dtp1.Date));
          subitems.Add(chckb1.Caption);
        end
        else
          begin
          caption:=ed1.Text;
          subitems.Add(cb1.Text);
          subitems.Add(datetostr(dtp1.Date));
          subitems.Add(chckb2.Caption);
        end;

  end;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: tlistview eleman eklemek

Mesaj gönderen mrmarman »

Yanlış bilgi kalmasın diye bir doğrulama yapmak istedim. Yukarıdaki şekilde bşr cons tanımında hata verir ancak ikinci bir kullanım alanı daha vardır.

Const da aslında bir değişkendir. Sadece ikinci bir emre kadar değişmemesi nedeniyle sabit denmiştir. {$j+} {$j-} direktifleri arasındaki constlara procedure veya fonksiyon içerisinde değer atayabilir ve değiştirebilirsiniz. Hata almazsınız.

Function veya procedure ilk defa çalıştığında ilk değer ne ise onu alır, aynı fonksiyon veya procedure yeniden başvurduğunuzda en son verilen değer neyse bu defa ondan başlar.

Global bir değilken gibi davranır ama sadece aynı procedure veya Function içinden erişilebilir.
Resim
Resim ....Resim
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

Re: tlistview eleman eklemek

Mesaj gönderen Serhan01 »

mrmarman usta açıklama için çok teşekkürler. peki yukardaki kodların listview e boş bir satır eklemesinin neden ne olabilir?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: tlistview eleman eklemek

Mesaj gönderen mrmarman »

cevap basit. peşin peşin satır ekleyip ondan sonra if'leri sorgulamışsın. demek ki şartların hiçbirine uymayan bir durum söz konusu ki boş kalıyor. aynı durum devam ettiği sürece bir tane de boş satır eklet beş tane de...

iflerden sonra true durumu oluşursa add demen gerekirdi.
Resim
Resim ....Resim
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

Re: tlistview eleman eklemek

Mesaj gönderen Serhan01 »

tecrübe başka bir olay tabi. :) usta teşekkürler. problem çözülmüştür.
Cevapla