mantikli bir döngü yapisi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
mantikli bir döngü yapisi
nasil bir baslik yazacagimi bilemedim kusura bakmayin.
form icindeki tüm editlere döngü ile ulasip bunlarin text ve/veya renklerini degistirmem gerekiyor.
edit ler pagecontrol, panel veya panel icindeki panelin icinde olabilir.
yani her bilesenin bir sub bileseni olabilir.
sinirsiz sub taramasi yapacak bir döngü kurmaliyim.
degerli fikirlerinizi ve vaktinizi rica ediyorum.
saygilarimla
form icindeki tüm editlere döngü ile ulasip bunlarin text ve/veya renklerini degistirmem gerekiyor.
edit ler pagecontrol, panel veya panel icindeki panelin icinde olabilir.
yani her bilesenin bir sub bileseni olabilir.
sinirsiz sub taramasi yapacak bir döngü kurmaliyim.
degerli fikirlerinizi ve vaktinizi rica ediyorum.
saygilarimla
kıdemsiz üye
delphi yardımında söle bir örnek var ama
Kod: Tümünü seç
var
I: Integer;
Temp: TComponent;
begin
for I := ComponentCount - 1 downto 0 do
begin
Temp := Components[I];
if not (Temp is TControl) then
begin
RemoveComponent(Temp);
DataModule2.InsertComponent(Temp);
end;
end;
end;
Siz hayal edin...Biz yapalım TuannaSoft...
hocam arama yaptim fakat arkadaslar tek döngü ile bir parent üzerinde tarama yapmislar. benim ihtiyacim olan cok daha farkli.
öyle alengirli bir sey yapmaliyim ki, tarama yapilan alan daki bilesenlerin bir sub bileseni var ise o bilesenin kontrolleri de taranacak ve taranan kontrollerin de sub bilesenleri varsa onlar da taranacak.
x tane componentcount yada controlcount döngüsü kurmak yerine daha kisa yoldan halletmeliyim.
öyle alengirli bir sey yapmaliyim ki, tarama yapilan alan daki bilesenlerin bir sub bileseni var ise o bilesenin kontrolleri de taranacak ve taranan kontrollerin de sub bilesenleri varsa onlar da taranacak.
x tane componentcount yada controlcount döngüsü kurmak yerine daha kisa yoldan halletmeliyim.
kıdemsiz üye
Cevaplara baktım...ikra yazdı:hocam Allah razi olsun.
tam manasi ile isimi görmedi. yada ben kodun hakkini veremedim.
gep nesnelerin oluşturulup bırakılması ile
bulunan compoenentin ben özelliklerini nasıl değiştirecem o yok...
sanırım söle yaparsın dedim ya
bileşenlerine bir tag no ve index vererek ulaşmaya çalış...bence...
tam nasıl olacak kod yazmak lazım derim bakalım buluruz bir seyler...
aslinda yapmak istedigim sey programlama uslubüne aykiri.
dbedit bilesenlerini kullanmiyorum. bunun yerine normal edit bilesenleri kullaniyorum.
edit leri taratarak isimlerine göre fieldbyname(tedit(components).name).asstring seklinde bir islem ile iclerini dolduruyorum.
tabii bu her form üzerinde bu sekilde olacagi icin
edit1.text = fieldbyname('isim').AsString yerine bir döngü ile isimi kolaylastirip tüm formlar icin ayni prosedürü cagirmak istiyorum.
bu nedenle hangi editi yakaladigim önemli degil. tag i index i vesairesi ne olursa olsun. benim icin önemli olan hangi form icinde oldugu ve isminin ne oldugu.
dbedit bilesenlerini kullanmiyorum. bunun yerine normal edit bilesenleri kullaniyorum.
edit leri taratarak isimlerine göre fieldbyname(tedit(components).name).asstring seklinde bir islem ile iclerini dolduruyorum.
tabii bu her form üzerinde bu sekilde olacagi icin
edit1.text = fieldbyname('isim').AsString yerine bir döngü ile isimi kolaylastirip tüm formlar icin ayni prosedürü cagirmak istiyorum.
bu nedenle hangi editi yakaladigim önemli degil. tag i index i vesairesi ne olursa olsun. benim icin önemli olan hangi form icinde oldugu ve isminin ne oldugu.
kıdemsiz üye

dbedit nesnesi kullanmiyorum. aslinda bunun sebebi bir arastirma.
deadlock vs gibi hatalar meydana geliyor. bende bunlari asmak icin su an bir proje üzerine caslisiyorum. eger basarili olur isem ebediyyen dbedit nesnelerine bay bay diyecegim.
normal edit ler icerisine field lerin value leri yüklenecek.
daha sonra istedigin gibi degistirdikten sonra editlerin icini, kayit tusuna basacaksin ve kirilir ise eger kayit gerceklestirilemedi hatasi verecek.
he aslinda bunu dbedit te de yapabiliriz diyeceksin. ben dataset leri de runtime create ediyorum. vt ile ilgili hic bir sey visual degil.
dedigim gibi yalnizca bir arastirma. bu projeyi sonuna kadar gelistirip karsilastirma yapmak istiyorum.
kıdemsiz üye
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
Merhabalar,
Recursive arama ile bunu yapmak mümkün. Aşağıdaki kod işine yarayacaktır en azından sana fikir verecektir.
Bu örnekte form içindeki tüm ama tüm TEdit sınıfındaki (ister panel ister tabSheet içinde olsun) Edit'leri arar ve edit.text = '' ise rengini kırmızı yapar. Ayrıca boş olan edit2lrin içine bir de mesaj yazar.
Bu daldırgaç metodunda Button1'in içinde bulunan ikinci alt procedure dikkat ediniz. Button1 procedurun altında olmalıdır. Gerçi dilerseniz dışarıyada alabilirsiniz. Bu sizin bileceğiniz iş..
Kolay gelsin..
Recursive arama ile bunu yapmak mümkün. Aşağıdaki kod işine yarayacaktır en azından sana fikir verecektir.
Kod: Tümünü seç
procedure TForm3.Button1Click(Sender: TObject);
procedure BulDegistir(C : TComponent);
var i : integer;
A : TComponent;
begin
for i := 0 to C.ComponentCount - 1 do
begin
// eğer C içinde başka kontroller varsa
// C içindekileride taramak için yeniden BulDegistir diyoruz.
// Recursive döngü başlıyor..
A := C.Components[i];
if A.ComponentCount > 0 then
BulDegistir(A)
else
begin
if A.ClassName = 'TEdit' then
begin
//burada editboxlar boş ise kırmızı olarak
//boyuyorum..
if TEdit(A).Text = '' then
begin
TEdit(A).Color := clRed;
TEdit(A).Text := 'abi bunları doldur';
end
else
TEdit(A).Color := clWhite;
end;
end;
end;
end;
begin
BulDegistir(Self);
end;
Bu daldırgaç metodunda Button1'in içinde bulunan ikinci alt procedure dikkat ediniz. Button1 procedurun altında olmalıdır. Gerçi dilerseniz dışarıyada alabilirsiniz. Bu sizin bileceğiniz iş..
Kolay gelsin..