(11-10-2019, Saat: 15:32)sadettinpolat Adlı Kullanıcıdan Alıntı: create metodu virtual tanimlanmis bir metod değildir.
o nedenle create dediğinizde MyEditForm ' un turu ne ise (örnekte TFrmBaseEditForm) o turden bir nesne oluşturur.
MyEditForm:=FrmCariEditForm; yerine MyEditForm:=TFrmCariEditForm.create(self); derseniz istediğiniz olacaktır.
aşağıdaki makaleye gözatarsanız statik , dinamik , virtual metodların nasıl çalıştığı daha iyi anlaşılabilir.
http://www.tugrulhelvaci.com/?p=631
Çok teşekkürler.Bu söylediğiniz şekilde yaptığımda bellekte CariEditForm un varlığını kontrol ettiğimde form açık olmasına rağmen Free ve Nil olarak görünüyor.
Tekrar şartlı create yaptığımda (Başka bir yerden) , şöyleki Assigned(FrmCariEditForm) False veya FrmCariEditForm=nil ise true dönüyor ve dolayısıyla bir CariEdit form daha create oluyor ve adıda FrmCariEditForm_1 oluyor. Ama tekrar bir daha bu kontrolü yaptığımda ise ancak o zaman Assigned(FrmCariEditForm) True veya FrmCariEditForm=nil ise False dönüyor ve üçüncü kez CariEditForm create olayını, yani FrmCariEditForm_2 oluşmasını engelleyebiliyorum.
Bunun neden olduğunu anlayamadım ancak aslında yapmak istediğim olay sanırım Bahadır Alkaç arkadaşımız önermiş.
Deneyip bilgi vereceğim.
Çok teşekkürler....
(11-10-2019, Saat: 15:45)Bahadir.Alkac Adlı Kullanıcıdan Alıntı: Merhaba,
İstediğiniz işlemi yapmak için aşağıdaki değişiklikleri yapmanız gerekiyor:
BaseListForm.pas dosyasına aşağıdaki tanımı ekleyin:
type // Aşağıdaki satır eklenecek TfrmBaseListFormClass = class of TFrmBaseListForm; TFrmBaseListForm = class(TForm) ...
Kullanıma örnek olsun diye de ana formdaki Button1.Click kodunu aşağıdaki gibi değiştirin:
procedure TFrmAna.Button1Click(Sender: TObject); var FormClass: TfrmBaseListFormClass; BaseListForm: TFrmBaseListForm; begin FormClass := TFrmCariListForm; Application.CreateForm(FormClass, BaseListForm); BaseListForm.ShowModal; end;
Aynı işlemi edit sınıfları için de yapabilirsiniz.
Eğer formun sınıfını da run-time'da bulmak istiyorsanız o zaman FindClass kullanmanız gerekiyor, ama FindClass ile sınıfı bulabilmeniz için önce RegisterClass ile register etmelisiniz. Bunun için de benim tavsiyem sınıfın yazıldığı unit'in initialization kısmında yapmanızdır. Ama ben FindClass kullanmanızı tavsiye etmem, sonradan değişiklik yapması zor oluyor ve projede çalışan programcılar değiştikçe hatalar çıkmaya başlıyor.
İyi çalışmalar
Merhaba;
Maalsef yine BaseEdit Form açılıyor.CariEditForm açılmıyor.

