procedur içinden form create etmek ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
coder_24
Üye
Mesajlar: 17
Kayıt: 01 Oca 2008 05:16

procedur içinden form create etmek ?

Mesaj gönderen coder_24 »

mr arkadaşlar formda yeniyim aynizamanda delphide de yeniyim
acaba şöle bişi yapabilirmiyiz

Kod: Tümünü seç

 procedure formyap(a:Tform,b:T...)
begin
if a=nil
begin
a:=a.craete(ownerform);
a.show;
end
else
a.show
end;
end;
Şimdiden teşekkürler..[/code]
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

bu yazdığınız kodu deneyerek cevabı alabilirsiniz.
Kullanıcı avatarı
coder_24
Üye
Mesajlar: 17
Kayıt: 01 Oca 2008 05:16

Bir Problem Vaaa

Mesaj gönderen coder_24 »

yazdığım kodda

Kod: Tümünü seç

if a=nil then



kısmı çalışmıyor
yani hep form create ediliyor show olmuyor
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

şu şekilde deneyin

Kod: Tümünü seç

Procedure Tform1.Form_Yap(A:Tform);
Begin
     If A=Nil Then begin
        A:=Tform.Create(nil);
        A.ShowModal;
        A.Free;
     End else begin
        A.ShowModal;
     end;
end;
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Bir formu oluşturup kullandıktan sonra bu formu yok etmek bu formu gösteren değişkeni boşaltmaz. O hala aynı adresi gösterir. Halbuki bellekte form yoktur. Çünkü yok edilmiştir. O değişkeni if a=nil... biçiminde kontrol edersek o zaman bir hataya düşmüşüz ki kurtarabilene aşk olsun :wink: . Formu free ederken değikeni de nil yapmaya dikkat etmek gerek.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
coder_24
Üye
Mesajlar: 17
Kayıt: 01 Oca 2008 05:16

Bir problem daha vaaa....

Mesaj gönderen coder_24 »

Show ile showmodal arasında ne fark var

Kod: Tümünü seç

A.Free 

Kod: Tümünü seç

yapınca show 
olmuyor ama

Kod: Tümünü seç

showmodal
oluyor
birde
A niye hep nil
oluyor
Normal form create ederken,
örnek

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
begin
Form1:=Tform1.create(self)
Form1.show
end;
Form1 nil olmuyor burda ?
A Nil Oluyor Anlayamadım
Acemi olmamdan geliba...:-)
sineyk
Üye
Mesajlar: 4
Kayıt: 03 Oca 2008 12:51

Mesaj gönderen sineyk »

TForm.Show formu gösterdikten sonra program çalışması devam ederken TForm.ShowModal'da akış form kapanana kadar bekler yanlış hatırlmıyorsam.

Diğer konu; Project Source penceresinde bahsettiğiniz formu create eden kodu ( Application.CreateForm(TForm, Form); mesela) silip bir de öyle deneyin. Sadece bir öneri.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

@coder_24;
Form1 Global bir değişken olduğu için nil olmuyor.
ama a değişkeni sizin yazdığınız procedure içinde tanımlı olduğu için procedure den çıkıp tekrar girdiği zaman a değişkeni nil oluyor.

kodlarınızda a değişkenine gelen değerin nerden geldiğini tam olarak göremedim. o yüzden bu ihtimalide göz önünde bulundurup kodlarınızı gözden geçirin.

kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
coder_24
Üye
Mesajlar: 17
Kayıt: 01 Oca 2008 05:16

Mesaj gönderen coder_24 »

var
raporlar:Traporlar;
a:Tform;

Kod: Tümünü seç

procedure formyap(b:TFormclass) 
begin 
if a=nil 
begin 
a:=b.craete(ownerform); 
a.show; 
end 
else 
a.show 
end; 
end; 

Kod: Tümünü seç

a:=odemeler;
formyap(Todemeler );

     
kodu böyke yaptım yine olmadı enson
şöle yaptım
işimi çözdü ama hala kafan diğer yaptığımın niye olmadığında
[code:Tform;

Kod: Tümünü seç

procedure formyap(b:TFormclass) 

a:=b.craete(ownerform); 
try
a.showmodal; 
finally
a.showmodal; 
end; 
tapi formları onclose action:=cafreee;formx:=nil; yaptım
olduişte ama dedimya hala kafam yukardaki yazdığım kodda
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

hocam sizin için mahsuru yoksa ne yapmak istediğini yazarmısınız.
ona göre yardımcı olalım
F.Atagun
Üye
Mesajlar: 158
Kayıt: 01 Oca 2008 01:56

Mesaj gönderen F.Atagun »

Hocam açmak için

Kod: Tümünü seç

Application.CreateForm(TForm18,Form18);
if Form18=nil then
Application.CreateForm(TForm18,Form18);
Form18.Show;


Kapatmak içinse

Kod: Tümünü seç

Form18.Release;
Şeklinde deneyin lütfen
Kullanıcı avatarı
coder_24
Üye
Mesajlar: 17
Kayıt: 01 Oca 2008 05:16

Mesaj gönderen coder_24 »

ademcicek adli üye için söyleyem

ben datamodule public olan bir procedur tanımlayıp formları ordan create
etmeyi denemek istedim
il başta oldu data module unit eklemeden yaptım bunu oldu fakat
fakat if a= nil ile kontrollu bir şekilde olmadı sonra datamodulden normal forma taşıdım işi belki datamodulden olmuyodur diye fakat form içinde private tanımladığımda da olmadı if a= nil çalışmadı
burda amacım formları tek bir satırda create etmek ama olmadı.Bende
Yukarda dediğim gibi try finally kullanrak çözdüm ama tanmin kar bir çözüm gibi gelmedi bana.
Caylaq arkadaşın yöntemini deniğicem...
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

Global bir unite bende şu fonksiyonu yazdım.ve hep bunu kullanırım.showmodal ile açacaksan bu fonksiyon sorunsuz çalışıyor.

Kod: Tümünü seç

function TGlobal.FormAc(AClass: TFormClass): Integer;
var
  WW: TForm;
begin
  WW := AClass.Create(Application);
  Result := WW.ShowModal;
  WW.Free;
end;
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

sabanakman yazdı:Bir formu oluşturup kullandıktan sonra bu formu yok etmek bu formu gösteren değişkeni boşaltmaz. O hala aynı adresi gösterir. Halbuki bellekte form yoktur. Çünkü yok edilmiştir. O değişkeni if a=nil... biçiminde kontrol edersek o zaman bir hataya düşmüşüz ki kurtarabilene aşk olsun :wink: . Formu free ederken değikeni de nil yapmaya dikkat etmek gerek.
Çözüm @sabanakmanın'ın cevabında..
fsencamlar
Üye
Mesajlar: 1
Kayıt: 02 Tem 2017 01:20

Re: procedur içinden form create etmek ?

Mesaj gönderen fsencamlar »

Uzun zaman olmuş ama belki işine yarayan olur ben şu şekilde kullanıyorum.

Procedure xFormAc(FormClas: TFormClass ; FormAdi : TForm ) ;
begin
if FormAdi=nil then Application.CreateForm(FormClas,FormAdi);
FormAdi.Show;
end;


Formu Kapatırken nil ediyorum.
Cevapla