Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Kalıtılmış Formu Değişkende Tutarak Dinamik Create Etmek
#5
(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.
Cevapla


Bu Konudaki Yorumlar
Cvp: Kalıtılmış Formu Değişkende Tutarak Dinamik Create Etmek - Yazar: LastCoder - 11-10-2019, Saat: 19:48

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Wink Tüm forum arkadaşlarıma merhaba, sizi davet etmek istiyorum emailx45 8 1.442 05-11-2025, Saat: 20:53
Son Yorum: emailx45
Question Dinamik butonlarda event tanımı mnk 11 1.652 31-01-2025, Saat: 09:16
Son Yorum: mrmarman
  FastReport Dinamik Sayıya Göre Etiket Bastırma [ÇÖZÜLDÜ] bünyamin68 2 752 09-01-2025, Saat: 13:47
Son Yorum: bünyamin68
  MdiChield formu aynı projede show ve showmodal ile çağırma nevzatc 6 1.009 07-12-2024, Saat: 19:08
Son Yorum: nevzatc
  video player olan formu kapatma tekrar acma sorunu sadikacar60 3 773 26-11-2024, Saat: 16:39
Son Yorum: esistem



Konuyu Okuyanlar: 1 Ziyaretçi