components

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
korendon1971
Üye
Mesajlar: 52
Kayıt: 03 May 2005 06:16

components

Mesaj gönderen korendon1971 »

Herkese merhaba hemen sorunuma geçmek istiyorum.
böyle bir tanımlamam var.

butonlar=array[1..50]of tbutton
var
abutton:butonlar
a,n:integer;

amacım abuton'a formdaki butonları yazdırmak. button1,button2,button3v.b

for a:=0 to componentcount-1 do
begin
if components[a]is tbutton then begin n:=n+1;abutton[n]:=??????
end;

components kullanarak bunu becermedim.
ama bilgisayarda denedim teker teker abutton[1]:=button1;abutton[2]:=button2;diye yazdırılabiliyor
amacım abutonu kullanarak işlem yapmak istiyorum
örneğin abutton[1].caption v.b gibi Herkese sevgi ve saygılar....
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Kod: Tümünü seç

for a:=0 to componentcount-1 do 
begin 
if components[a] is tbutton then 
begin 
abutton[a]:=Tbutton(components[a]).name;
end; 
Bu şekilde olur herhalde denemedim vede şüpheliyim ama sana bir fikir verir.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
korendon1971
Üye
Mesajlar: 52
Kayıt: 03 May 2005 06:16

Mesaj gönderen korendon1971 »

Teşekkür ederim.Ben bunu denedim.Componentin ismiyle işlem yaptıramıyorsun.
Master43
Üye
Mesajlar: 73
Kayıt: 17 Ara 2004 12:05

Mesaj gönderen Master43 »

Teşekkür ederim.Ben bunu denedim.Componentin ismiyle işlem yaptıramıyorsun.
@vedatkaba yanlışlıkla Name yamış zaten, Name'i sil birdene banada çalışır gibi geldi ayrıca buttonların tag propertysini kulanarakta olabilir, buttonların tag'ını forma koymadan ayarlamalısın (veya runtime farketmez)

abutton[button1.tag].caption := '1. butonum';

gibi bir yöntemide dene, sana bi fikir verir belki
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Bileşeni create etmeden diziye yükleyebileceğinizi zannetmiyorum.sizin orda yaptığınız nasıl olmuş onuda anlamadım ..

abutton[1]:=button1; diyerek oldu diyorsunuz ama nasıl...create etmeden olmaz gibime geliyor.[/code]
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
korendon1971
Üye
Mesajlar: 52
Kayıt: 03 May 2005 06:16

Mesaj gönderen korendon1971 »

name silinerek sorun hakikaten halledildi.Bende anlamadım ama isterseniz
deneyin create kullanmadan yazılabiliyor.
Her ikinizede çok TEŞEKKÜR EDERİM SEVGİ VE SAYGILARLA.................
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Kod: Tümünü seç

  BtnNum:=0;
  for a := 0 to componentcount - 1 do
    if components[a] is tbutton then
    begin
      inc(BtnNum);
      if BtnNum>50 then
      begin
        //butun dizisi 50 elemanlı tanımlandıgı icin
        //51. eleman varsa hata verecektir.
        break;
      end;
      abutton[BtnNum] := components[a];
    end;
bu sekilde formu tarayarak uzerindeki butonları diziye atmıs oluyorsun
BtnNum, eklenen buton sayısı, bunu da degisken olarak tanımlaman lazım tabiki.

hangi butona nasıl eriseceksin simdi...

abutton[11] ile o butona erisip istedigin islemi yapabilirsin
ama sıra numarasını bilmiyorsan Name ozelligini yada captionlarını teker teker karsılastırarak erismen gerek.

Not: TButon tipindeki degisken aslında bir pointerden ibaret
hafızada create edilmis bir butonun ismi bir TButon degiskene direk atanınca aslında o butonun hafızadaki adresini bu pointer icine yazmıs oluyorsunuz.
ÜŞENME,ERTELEME,VAZGEÇME
ibr_ozdemir
Üye
Mesajlar: 25
Kayıt: 27 Nis 2005 02:09

Mesaj gönderen ibr_ozdemir »

kolay gelsin
tanımladığın butonlar değişkeni zaten bir dizi değilmi
değişkenden değişken türetmişsin :shock: nasıl çalıştı anlayamadım
şöyle tekrar denermisin
--
procedure DugmeleriBul(var Dizi:array of TButton);
var
sayac,dsayisi:integer;
begin
dsayisi:=0;
for sayac:=0 to componentcount-1 do
begin
if components[sayac] is TButton then
begin
dizi[dsayisi]:=(components[sayac] as TButton);
dsayisi:=dsayisi+1;
end;
if dsayisi>50 then
exit;
end;
end;
--

daha güzel ve sağlıklı bir yöntem ise şu olabilir:
--
var
Dugmeler:TList; //global değişken

for sayac:=0 to componentcount-1 do
if components[sayac] is tbutton then
dugmeler.add(components[sayac]);
--
not:bu kodları denemedim hata verirse birlikte bulmaya çalışırız.
Cevapla