mantikli bir döngü yapisi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

mantikli bir döngü yapisi

Mesaj gönderen ikra »

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
kıdemsiz üye
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

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...
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

hocam Allah razi olsun.
tam manasi ile isimi görmedi. yada ben kodun hakkini veremedim.
kıdemsiz üye
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7604
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

:ara ComponentCount diye arattır, forumda çok örnek ve açıklama var.

Kolay gelsin.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

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.
kıdemsiz üye
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

ikra yazdı:hocam Allah razi olsun.
tam manasi ile isimi görmedi. yada ben kodun hakkini veremedim.
Cevaplara baktım...
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...
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

hocam tag yazmis olsam bile yine bir döngü ile bu bilesenlere ulasip tag larini kontrol etmem gerekli. ki, ben bilesenlere ulasabiliyor isem eger o halde tag lari kontrol etmenin de bir anlami kalmiyor :oops:
kıdemsiz üye
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

peki çalışma zamanında hangi bileşene ulaştığını nasıl anlayacaksın sen
Siz hayal edin...Biz yapalım TuannaSoft...
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

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.
kıdemsiz üye
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

bu şekilde bir kasıntı içine girmenin sebebi ne..peki hem veri tabanı ise ...
neden db edit değil ...?
Bu kulağı yakalamaak için baaşının arkaşından dolandırmak gibi bir sey
oluyor... (Bir kulak sahibi bir dev olursa...)
Siz hayal edin...Biz yapalım TuannaSoft...
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

:)
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
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

sen borlandın delphi 4 den sonra olan teknololojisine hayır diyorsun(Benim bildiğim ) bazıları bu Bu dataset meselesini yeni yeni yapıyor... ...neyse....dene bakalım ...
Siz hayal edin...Biz yapalım TuannaSoft...
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Merhabalar,

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 ö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..
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

Abi eline diline kalemine klavyene saglik. Allah razi olsun. tam aradigim sey. Biliyordum bir sekilde olabilecegini. hayal edilebilinen hic bir sey imkansiz degildir :wink:
kıdemsiz üye
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

bu ya işte sağ olsansın ya
Siz hayal edin...Biz yapalım TuannaSoft...
Cevapla