Auto- create forms & Available forms

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Auto- create forms & Available forms

Mesaj gönderen bgoktas »

1.Projelerimizde kullandığımız formlar açılışta fazla zaman kaybettirmemesi için mi formları kendimiz cretae ediyoruz.
2.Available forms durumunda, formu show veya showmodalla çalıştırdığımız zamanmı create ediliyor.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

1. Hem o hem de gereksiz yere belki hic acilmiyacak bir forumu create edip degerli olan memory'de ona yer ayırmamış oluyoruz.
2. Hayır, o zaman siz ilgili formu gostermeden once create etmelisiniz... Yani create edilmemiş bir formun show metodu access violation hatası verecektir. Cunku henuz ortada yoktur. Once create edilmesi lazim...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

fahrettin yazdı:Once create edilmesi lazim...
sonrada memoryden free ile hüppeerr silinmesi

Kod: Tümünü seç

var
  PrmForm: TPrmForm;
begin
PrmForm :=TPrmForm.Create(Application);
try
   PrmForm.ShowModal;
finally
  PrmForm.Free;
end;
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

1. madde tamam
2.madde hususunda; ben şöyle yapıyorum; avaliable formsda bir çok form var ama ben bunları çağırırken direk show ile çağırıyorum. hiçbir sorun çıkartmıyor. :?: :?: :?:
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

bgoktas yazdı:2.madde hususunda; ben şöyle yapıyorum; avaliable formsda bir çok form var ama ben bunları çağırırken direk show ile çağırıyorum. hiçbir sorun çıkartmıyor. :?: :?: :?:
:? Olmaması lazım...... Bir gariplik var ama .....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Sorunu anladım galiaba, Ben auto create' den avaliable ye aldığım zaman dpr'den create satırını iptal etmesi gerekiyor. Ama etmiyor :?:
create edildiği için sorun çıkmıyor. Neden iptal etmediği hususunda aklıma şöyle birşey geliyor; dpr dosyasında progress bar ilerletmesi olduğundan ilgili satırı bulamıyor olabilir.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

kesinlikle......
Project source'a ilave kodlar yazıldığında bu durum olabiliyor.....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Teşekürler, birşey daha öğrendim.Hayırlı Cuma'lar
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhabalar, Yazdığım saate göre hayırlı geceler.

Forumda ararken lazım olan bu konuyu gördüm. Şimdi yaptığım çalışmada açılıştaki ilk form olan menü formu haricindeki tüm oluşturduğum formları avaliab olarak taşıdım ve söylediğiniz gibi access violation hata mesajı alıyorum. Bu durumdan kurtulmak için ne yapmam lazım.

açıklanmış ama acemi olduğum için neyin nereye yazılacağı ile birlikte açıklarsanız sevinirim.

saygı ve sevgilerle
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

mesela frmAna adında otomatik create edilen bir ana formumuz ve frmIkinci form adında manul create edilen ikinci bir formumuz olsun.
frmAna formunda yer alan button1 düğmesine tıklayınca frmIkinci formun görünmesini istiyoruz.

Kod: Tümünü seç

procedure TfrmAna.Button1Click(Sender: TObject);
begin
if frmIkinci <> Nil Then
  frmIkinci := TfrmIkinci.Create(self); 

 frmIkinci.ShowModal;
 FreeAndNil(frmIkinci); //işimiz bittikten sonra formu hafızadan siliyoruz
end;
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

bunlara + ilaveten şunu deneyin.

projenizin dpr' sinde herhangi bir oynama yaptıysanız.(mesela progress bar hareketi falan) avalaible yapsanız bile, delphhi ilgili formun create satırını silemez ve formu program çalışırken cretae eder. Sizde üstüne bir daha create ettiniz mi hatayı alırsınız.

İyi Günler.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Kod: Tümünü seç

procedure TMenu.BitBtn4Click(Sender: TObject);
begin
  if VeriGirisMenu <> Nil Then
  VeriGirisMenu := TVeriGirisMenu.Create(self);

  VeriGirisMenu.ShowModal;
  FreeAndNil(VeriGirisMenu); //işimiz bittikten sonra formu hafızadan siliyoruz

end;
bu şekil kendi formuma uyarladım hata verdi.

create kısmımda bir tane formum var menu formu ayrıca bu menu formu aynı zamanda main form. diğer formlar avaliab da. yukarıdaki kodu yazıp çalıştırınca uzun bir accsess violation hatası

VeriGirisMenu.ShowModal; kısmı maviye boyanıyor

ardından tekrar run yapınca;

access violation at address 004ee232 in module 'Olayyeri_Inceleme.exe'.Read of address 00000000.

hatasını veriyor ve formu açmıyor.

acaba hata menu formunun hem main form hemde create formda olmasındanmı başka bişimi
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

afedersin kodu yanlış yazmışım.
<> işareti yerine = işareti koyman gerekir.

Kod: Tümünü seç

if VeriGirisMenu = Nil Then 
  VeriGirisMenu := TVeriGirisMenu.Create(self); 
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

if VeriGirisMenu = Nil Then
yerine

if not Assigned(VeriGirisMenu) Then
kullanabilirsiniz.
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

@gmikri nin kodunu uygulayın, ayrıca

Kod: Tümünü seç

initialization
   VeriGirisMenu := nil;
runtime create edilecek class ların variable larını, eğer create edilip edilmediğini kontrol edip sonrasında gerekiyorsa create edilecekse mutlaka nil ile sıfırlayın

kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla