Available olan formları nasıl liste halinde alabilirim....

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hacker_10-ur
Üye
Mesajlar: 27
Kayıt: 05 Oca 2008 10:05

Available olan formları nasıl liste halinde alabilirim....

Mesaj gönderen hacker_10-ur »

Arkadaşlar Acil!!!!
Yaptığım programda formları sonradan create etmek istiyorum

Registerclass methodunu kullanarak yapmayı denedim fakat işe yaramadı

Program çalışır haldeyken Available edilmiş formların listesini almam gerekiyor create etmem lazım açılan formu hafızadan release koduyla geri silmem lazım... programın hafızada fazla yer tutmaması gerekiyor....

Yardımlarınız için şimdiden TEŞEKKÜR EDERİM...
DELPHI - C ++
PASCAL - TURBO C
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

bunun listeyle alakası yok.

yapman gereken

Kod: Tümünü seç


  formx:=tfromx.create(self)
  try 
     formx.showmodal;
  finally
     formx.free
  end;
bunun daha detaylı sürümünü verecekler olabilir ancak genel mantık bu. birde bu uygulamanın genel boyutuna yani exe boyutuna çok etki etmez ancak kullandığı hafıza miktarını etkiler.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
hacker_10-ur
Üye
Mesajlar: 27
Kayıt: 05 Oca 2008 10:05

Mesaj gönderen hacker_10-ur »

üstad tam istediğimi anlatamadım ben herhalde!!!!

anlatmak istediğim şu misal veriyorum ben var olan formları otomatik değilde manuel create etmek istiyrum. ve ben bu formların classlarını almak istiyorum

örnek olarak düşüncem view sourcede kayıtlı olan unitler misal unit1 in 'unit1.pas'; ben programda var olan ama create edilmemiş formların listesini alıp if then metotlarıyla karşılaştırarak create edip ondan sona release metodu hafızadan kaldırmak istiyorum yani benim anlatmak istediğim programın booyutu değil hafızadaki boyutu...

bende yaklaşık 156 tane form var ve ekleyeceğim dahada form var ben bunu bir döngü ile bitirmek istiyorum bana sadece lazım olan view source de create edilmemiş classların listesi ondan sona for döngüsüyle tek tek registerclass koduyla create etmek ... anlayacağınız bana sadece available listesi lazım....
DELPHI - C ++
PASCAL - TURBO C
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

aksine. tam olarak derdinizi anlıyorum. zaten bende eşitliğin sağını doğru dürüst verecek bir kod bulamadığım için o bloku kullanıyorum. zaten benim örneğimdede belirttiğim gibi amaç hafıza kullanımını düşürmek.

forumdan başkaları daha değişik yanıtlar verebilirler ancak bende bu konuyu çok araştırdım forumdada sordum. net bir ynaıt veya yöntem çıkmadı.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
hacker_10-ur
Üye
Mesajlar: 27
Kayıt: 05 Oca 2008 10:05

Mesaj gönderen hacker_10-ur »

ilgilendiğiniz için teşekkürler arkadaşım....

fakat aklıma takılan bir soruu....

programı bütün formları create olarak açığımda hafızadaki boyut normal..
DİKKAT!!! bütün formlar otomatik create ediliyor ve hafızadaki boyut normal....

ancak içlerinden bir formu show ettiğimde o form hafızada yer çoğalıyor....

misal Form1.release; dediğimde create edilen formu tamamiyle kaldırıyor..

şuanda aradığım kod create edilmiş hali ile hafızada yer kaplamayan formlar show edildikten sonra hafızada yer alıp form kapandığında hala yer tutması..... release free vb kodlar yerine başka bir kod varmı acaba

çünkü saçma geliyor formlar create edildiğinde hafızada yer tutmazken açılıp kapandığında yer tutuyor.. bunun mutlaka bir kodu vardır diye düşünüyorum....
DELPHI - C ++
PASCAL - TURBO C
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

Merhaba bu bence windowsun iç mekanizması. birazda sistem kaynağı sorunu sanırım. örneğin bir uygulama simge durumuna küçültülmüş ikende açık değilmi sonuçta. ancak bu durumda iken daha az sistem kaynağı tüketiyor.

formun hafızada boş boş durması ayrı olay windows içinde kontrolü ele alıp aktif form alması daha ayrı bir olay.

yinede başkaları daha teknik bilgiler verebilir...
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

for döngüsüyle tek tek registerclass koduyla create etmek
bu şekilde create ettiğin zaman hafızada yer kaplamayacakmı.
formu ihtyacın olduğu zaman create et işin bittiği zamanda free et.

birde

Kod: Tümünü seç

application.components
den faydalanarak formları bulabilirsin. formların nil olup olmadıklarını kontrol ederekde create edilip edilmediklerini bulabilirsin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

aslangeri yazdı:
for döngüsüyle tek tek registerclass koduyla create etmek
bu şekilde create ettiğin zaman hafızada yer kaplamayacakmı.
formu ihtyacın olduğu zaman create et işin bittiği zamanda free et.

birde

Kod: Tümünü seç

application.components
den faydalanarak formları bulabilirsin. formların nil olup olmadıklarını kontrol ederekde create edilip edilmediklerini bulabilirsin.
kolay gelsin.
işte bu güzel bir bilgiydi.

yada editleri bulan kod başlığında millete akıl verirken bunu ben neden düşünemedimki:(
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
hacker_10-ur
Üye
Mesajlar: 27
Kayıt: 05 Oca 2008 10:05

Mesaj gönderen hacker_10-ur »

arkadaşlar formu create etmezsek application.components de görünmez...

onu bende yapardım

Kod: Tümünü seç

var 
i:integer;
begin
for i:=0 to aplication.componentcount-1 then
  if application.components[i] is tform then
  if TForm(application.components[i]).name='Form1' then
    tform(application.components[i]).show;
end;
dediğinizle ancak bunu yaparım yani anlayacağınız o da olmazzz.....
zaten create edilmişse bunu yapabilirsiniz....
DELPHI - C ++
PASCAL - TURBO C
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Selamlar.

Delphi'de bahsettiğin gibi create edilen ya da edilmeyen formları getiren bir metod yok zira kendisi de bunu dpr dosyasından yönetmekte. Formun create edilmesiyle show edilmesi arasındaki temel hafıza değişimi nedeni elbetteki formun ve üzerindeki nesnelerin paint edilmesi (minimize edildiğinde haliyle paint yordamı kullanılmıyor). FreeAndNil ile formu/nesneyi hafızadan atabilirsin ancak windows bu konuda senin beklediğin tepkiyi yine de vermeyecek zira bellek yönetiminde ihtiyaç oldukça kullanım ve revizyon sözkonusu olur genelde...

Kolay gele.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Ek olarak illa bunu yapmak istiyorsan da create edilmeyen formların bir listesini herhangi bi list nesnesinde tutarak oradan create etmektir, forumda bununla ilgili bir mevzu geçmişti FormClass şeklinde arayarak sonuca ulaşabilirsin. Benzer bir örnek de delphiabout.com'da mevcut...
Kullanıcı avatarı
hacker_10-ur
Üye
Mesajlar: 27
Kayıt: 05 Oca 2008 10:05

Mesaj gönderen hacker_10-ur »

İlgileriniz İçin Teşekkürler. arkadaşlar....
DELPHI - C ++
PASCAL - TURBO C
Cevapla