İmage Değeri True Olanların Sayısını Bulma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
xCRaZYEmrEx
Üye
Mesajlar: 13
Kayıt: 06 Kas 2014 12:51

İmage Değeri True Olanların Sayısını Bulma

Mesaj gönderen xCRaZYEmrEx »

Merhabalar sizlere bir sorum olacak yardımcı olacak arkadaşlara şimdiden teşekkür ederim.
Benim yapmak istediğim image değeri 27 ile 43 arasında olan resimlerin visible değeri True ise doğru sayısını 1 arttırmak ve bu doğru değeri bir label e atamak.
Örnek verecek olursak:
-------------------------------- Doğru
image27.visible:=True -------- 1
image29.visible:=True -------- 2
....
image43.visible:=True -------- n

Kodu çalıştırdığımda a:='image'+i+'.visible='; ve if a=True then satırlarında hata veriyor.
Hatalar : Incompatible types: 'String' and 'Integer'
Incompatible types

Kod: Tümünü seç

procedure TForm2.BitBtn5Click(Sender: TObject);
var
i,a,dogru:integer;
begin
dogru:=0;
i:=27;
while i<=43 do
begin
a:='image'+i+'.visible=';
if a=True then
begin
dogru:=dogru+1;
end;
i:=i+2;
end;
Label18.Caption:=inttostr(dogru);
Efe
Üye
Mesajlar: 56
Kayıt: 09 Kas 2014 11:14

Re: İmage Değeri True Olanların Sayısını Bulma

Mesaj gönderen Efe »

bir "Metin" değerle "Tamsayı" bir değeri birleştirmeye çalışıyorsun.
Tip dönüşümü yapmalısınız.

a:='image'+i+'.visible='; //hata burada

Çözüm

a:='image'+IntToStr(i)+'.visible=';
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: İmage Değeri True Olanların Sayısını Bulma

Mesaj gönderen Lord_Ares »

a:='image'+i+'.visible=';

a değişkeni inter bir değer ve sen buna baştan a:='image' diyerek integer bir değişkene string yüklemeye çalışıyorsun , daha sonra da tekrar integer bir değer birleştirip sonra tekrar '.visable=' diyerek string yüklemeye çalışıyorsun. Epey karıştırmışsınız. Ufak bir düzeltme de bulunmak isityorum Efe arkadaşımızın gözünden kaçmış olabilir.
Efe arkadaşımızın verdiği çözüm şuan için hata verebilir sebebi A değişkeni integer tipinde dolayısı ile yine string tipte bir veri aktaramayacaksın. A değişkeninin tipini string yaparsan kod sorunsuz çalışacaktır.
En son Lord_Ares tarafından 09 Ara 2014 12:59 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
xCRaZYEmrEx
Üye
Mesajlar: 13
Kayıt: 06 Kas 2014 12:51

Re: İmage Değeri True Olanların Sayısını Bulma

Mesaj gönderen xCRaZYEmrEx »

Efe yazdı:bir "Metin" değerle "Tamsayı" bir değeri birleştirmeye çalışıyorsun.
Tip dönüşümü yapmalısınız.

a:='image'+i+'.visible='; //hata burada

Çözüm

a:='image'+IntToStr(i)+'.visible=';
Öncelikle ilgilendiğin için teşekkürler. Kodları şu şekilde değiştirdim.

Kod: Tümünü seç

var
i,a,dogru:integer;
begin
dogru:=0;
i:=27;
while i<=43 do
begin
a:=strtoint('image'+inttostr(i)+'.visible=');
if a=True then
begin
dogru:=dogru+1;
end;
i:=i+2;
end;
Label18.Caption:=inttostr(dogru);
Bu seferde if a=True then satırında Incompatible types hatası veriyor.
Peki bu hatayı nasıl çözebilirim ?
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: İmage Değeri True Olanların Sayısını Bulma

Mesaj gönderen Lord_Ares »

a değişkeni boolean bir tip değil dolayısı ile if a= true diyemezsiniz hata bundan kaynaklı A integer bir tip if ile kullanıcaksanız A>1 den veya A=1 şeklinde kullanabilirsiniz.
xCRaZYEmrEx
Üye
Mesajlar: 13
Kayıt: 06 Kas 2014 12:51

Re: İmage Değeri True Olanların Sayısını Bulma

Mesaj gönderen xCRaZYEmrEx »

Lord_Ares yazdı:a değişkeni boolean bir tip değil dolayısı ile if a= true diyemezsiniz hata bundan kaynaklı A integer bir tip if ile kullanıcaksanız A>1 den veya A=1 şeklinde kullanabilirsiniz.
Öncelikle yardımlarınız için teşekkürler
Eğer yanlış anlamadıysan bu şekilde değiştirmemi söylüyorsunuz.

Kod: Tümünü seç

var
i,dogru:integer;
a:string;
begin
dogru:=0;
i:=27;
while i<=43 do
begin
a:='image'+inttostr(i)+'.visible=';
if a=1 then
begin
dogru:=dogru+1;
end;
i:=i+2;
end;
Label18.Caption:=inttostr(dogru);
Bu şekilde if a=1 then satırında Incompatible types:'String' and 'Integer' hatası veriyor.
NOT: a<1 şeklindede denedim değişen bişey olmadı. - a:='image'+inttostr(i)+'.visible='; sonundaki '=' i silip de denedim değişen bişey olmadı.
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: İmage Değeri True Olanların Sayısını Bulma

Mesaj gönderen xozcanx »

Merhaba;
Hata yapılan nokta şu aslında öncelikle Form üzerindeki image nesneleri tespit edilmeli ve bunların True False durumlarını kontrol etmelisiniz.
Aşağıdaki şekilde Form üzerindeki tüm Timage nesnelerini kontrol eder ve True, False değerlerini kontrol edip labele yazar.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  i,gizli,gorunur : integer;
begin
  gizli:=0; gorunur:=0;
  for i := 0 to ComponentCount-1 do
  begin
    if( Components[ i ] is TImage )then
    begin
      if  (Components[ i ] as Timage).Visible=False then
        gizli:=gizli+1
      else
      gorunur:=gorunur+1
    end;
  end;
  Label1.Caption:='Gizli Resim Sayısı: '+IntToStr(gizli);
  Label2.Caption:='Görünür Resim Sayısı: '+IntToStr(gorunur)
end;
Aşağıdaki şekilde ise sizin istediğiniz aralıktakileri kontrol edip Labele yazar umarım yapmak istediğiniz budur!

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  i,gizli,gorunur : integer;
begin
  gizli:=0; gorunur:=0;
  for i := 1 to ComponentCount-1  do
  begin
    if( Components[ i ] is TImage )then
    begin
      if (i>27) and (i=<43) then
      Begin
        if  (Components[ i ] as Timage).Visible=False then
          gizli:=gizli+1
        else
        gorunur:=gorunur+1;
      End;
    end;
  end;
  Label1.Caption:='Gizli Resim Sayısı: '+IntToStr(gizli);
  Label2.Caption:='Görünür Resim Sayısı: '+IntToStr(gorunur);
end;
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: İmage Değeri True Olanların Sayısını Bulma

Mesaj gönderen thelvaci »

Bahsettiğiniz Image'ler eğer form üzerinde bulunan TImage nesneleri ise; tamamen farklı bir yöntem izlemeniz gerekir. Öncelikle, kullandığınız dili öğrenerek başlayabilirsiniz. Ardından da; yapmaya çalıştığınız şey için aşağıdaki gibi bir kod kullanabilirsiniz;

Kod: Tümünü seç

var
   iCounter : Integer;
   Found     : Integer;
begin
  Found := 0;

  for iCounter := 0 to ComponentCount - 1 do
    if Components[iCounter] is TImage then
      if TImage(Components[iCounter]).Visible then Inc(Found);

  ShowMessage(InttoStr(Found) + ' adet görünen image var.!');
end;
Cevapla