Delphi Can

Orjinalini görmek için tıklayınız: Kod İle Formu Create Etme
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Arkadaşlar merhaba,

Form1 ve Form2 isminde iki form var. Form1 ana form durumunda ve Form2 auto create edilmiyor.

Form1'de bir butona aşağıdaki kodu yazarak form2'yi create ediyorum. 
   if Form2 = Nil then
      Form2 := TForm2.create(self) ;
   ShowMessage('1');


Form2'nin onshow olayınada aşağıdaki kodu yazıyorum.
ShowMessage('2') ;

Form1 de butona bastığımda form2 create edildiğinde "form2.show" ifadesini yazmamış olmama rağmen Form2 görünüyor ve Form2'nin onshow olayı çalışıyor.

Yani önce "2" mesajı sonrada '1' mesajı görünüyor. Oysaki ben önce butonda yazdığım tüm komutların çalışmasını sonra da form2'nin onshow olayındaki komutların çalışmasını istiyorum.

Bu sorunu nasıl çözebilirim? Nerede yanlış yapıyorum acaba?
Formu Create ederken 

 

      if Form2=nil
         Application.CreateForm(TForm2,Form2);
         Form2.Show;

veya

if Assigned(Frm_Mesaj )=False then
Begin
Frm_Mesaj := TFrm_Mesaj.Create(self);
Frm_Mesaj.ShowModal;
End;
Kullanabilirsiniz.


Formu Kapatırken OnCLose kısmına 

Form2 := nil ; 
ACtion := cafree ;

eklerseniz sorun olmayacaktır.

daha önce formunda geçmişti bakmak isterseniz 

https://www.delphican.com/showthread.php...orm+create

Örnek Video için

https://www.youtube.com/watch?v=qsbEgiqVxp8&t=562s
Hocam teşekkür ederim. Ancak sorun formu Create veya Nil etmekte değil. Sorun form create edilince otomatik show olması. Yani ben Form2'yi Create edince "Form2.Show" yazmadan Form2 show oluyor ve Form2'nin OnShow olayı çalışıyor.
Geçici bir çözümdür ama şimdilik aklıma gelen 
ormun visible özeliğini false yapabilirsiniz veya Show yerine formu başlangıçta "Form2.Hide" edebilirsiniz.


https://stackoverflow.com/questions/8598...ng-them-to
(03-12-2021, Saat: 10:43)Bay_Y Adlı Kullanıcıdan Alıntı: [ -> ]Geçici bir çözümdür ama şimdilik aklıma gelen 
ormun visible özeliğini false yapabilirsiniz veya Show yerine formu başlangıçta "Form2.Hide" edebilirsiniz.


https://stackoverflow.com/questions/8598...ng-them-to

Evet işte tam olarak sorun bu ama tam olarak çözüm bulunamamış. MDI form yapısında formun visible özelliği false yapılamıyor.
Sadece bir öneri:
"Butona yazdığınız tüm kodlar" Form2 ile alakalı değilse (mesajınızdan bu husus anlaşılmıyor) şu şekilde basit bir kullanım düşünülebilir.

   
if Form2 = Nil then
begin
 ShowMessage('1');   // <<--- 
 // diğer yapılacak işlemler
 Form2 := TForm2.create(self) ;
end;

Form2'yi create ettiğim satırdan sonra form2 ile alakalı kod satırları var.  Form2'nin onshow olayında da yine Form2 ile ilgili kodlar var. Çalışmasını istediğim kod sırası şu şekilde.

1- Form2'nin create edildiği satır
2- Create satırından sonraki kod satırları
3- Form2'nin onshow olayındaki kodlar

Ancak işlemler bu sıra ile yürümüyor.

Gerçekleşen sıra ;

1- Form2'nin create edildiği satır
2- Form2'nin onshow olayındaki kodlar
3- Create satırından sonraki kod satırları

Bu çalışma sırası da sorun çıkmasına neden oluyor.
(03-12-2021, Saat: 22:24)sunbeki Adlı Kullanıcıdan Alıntı: [ -> ]Form2'yi create ettiğim satırdan sonra form2 ile alakalı kod satırları var.  Form2'nin onshow olayında da yine Form2 ile ilgili kodlar var. Çalışmasını istediğim kod sırası şu şekilde.

1- Form2'nin create edildiği satır
2- Create satırından sonraki kod satırları
3- Form2'nin onshow olayındaki kodlar

Ancak işlemler bu sıra ile yürümüyor.

Gerçekleşen sıra ;

1- Form2'nin create edildiği satır
2- Form2'nin onshow olayındaki kodlar
3- Create satırından sonraki kod satırları

Bu çalışma sırası da sorun çıkmasına neden oluyor.

Merhaba,
Eğer sadece mesaj göstermekle ilgili ise, Form1 üzerinden 1.nci mesaha parametre vermeyeceksen, ShowMessage('1') satırını Form2 nin OnCreate olayına ShowMessage('2'); satırını da Form2 nin OnShow olayına yaz sorun çözülür. Diğer şekilde Form2 yi create ettiğin an gösterim olayıda hemen akabinde gerçekleşmekte olacağından sıralama bozulur.
Form2'nin Visible property'si True'dur. False yaparsanız istediğiniz şekilde olur. Form2'yi Mdi child yapmayı denediyseniz bu özelliği otomatik true yapar.
Merhaba,

Alternatif olarak aşağıdaki yöntem işinizi çözebilir duruyor. Formu ilk create edildikten sonra bir kez Form2 onshow komutlarını atlamasını sağlamalısınız.

var Form2CreateEdildimi : Boolean;

Gerçekleşen sıra ;
1- Form2'nin create edildiği satır
Form2CreateEdildimi := False;

2- Form2'nin onshow olayındaki kodlar
if Form2CreateEdildimi = True then begin .... end;

3- Create satırından sonraki kod satırları
Form2CreateEdildimi := True;