Bu kod bloğunu parametrik yapmak mümkünmüdür;

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikut

Bu kod bloğunu parametrik yapmak mümkünmüdür;

Mesaj gönderen ikut »

Merhaba;

Formların çoğunu dynamic olarak create edip sonra serberst bırakıyorum. Ancak şunu merak ettim aşağıdaki kod boloku parametrik hale getirebilebilirmi. Sorun sağdaki design time adı ama nasıl olur diye merak ettim;

Kod: Tümünü seç

  FrmWrkGrid:=TFrmWrkGrid.Create(Self);
  try
     FrmWrkGrid.ShowModal;
  finally
     FrmWrkGrid.Free;
  end;

benim yapmak istediğim ise formgosteryoket(frmaa) gibi birşey vereceğim o formu create edip gösterecek ve yok edecek ama o formu hangi classtan create edeceğini nerden gösterebiliriz.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Öncelikle bu yapı genel kullanım için pek sağlıklı değil onu belirtmekte fayda var.Soruna gelince, "Call Form" tekniği için TComponentClass sınıfını kullanman gerekir.Parametrikten kastın ne olduğunu tam anlamadım ama ilgili formu TComponentClass olarak parametre geçersen create eder ve işlem bitiminde Free edersin vs.

Kolay gele..
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

TFormClass

Mesaj gönderen sabanakman »

Bunu kendi ihtiyaçlarına göre değiştirebilirsin.

Kod: Tümünü seç

function Goster(const FormSinifi:TFormClass;const Modal:Boolean=True;const ModalSonraYokEt:Boolean=False):TForm;
begin
  try
    Result:=FormSinifi.Create(Application);
    if Modal then Result.ShowModal else Result.Show;
    if Modal and ModalSonraYokEt then FreeAndNil(Result);
  except
    Result:=nil;
  end;
end;
Bunun bir sakıncası Form1:=TForm1.Create(Application); şeklindeki bir kodda forma erişmek için Form1 kullanılablir ama burada fonksiyonda oluşan form biz belirtmediğimiz sürece değişken üzerinden erişilemez. Örnek:

Kod: Tümünü seç

Form1:=Goster(TForm1);{<- ekranda modal görünür ve kapanınca free olmayacaktır. Form1 değişkeninde ise oluşan form kalacaktır.}
Goster(TForm2,True,True);{<-biçimi ise sadece ekranda göstermede kullanılabilir ama bu form Form2 değişkenine aktarılmadığı için Form2.Left vs. şekillerde kullanılamaz.}
bunu değişkene aktarabilmek için başka bir fonksiyon da yazılabilir.

Kod: Tümünü seç

function GosterEk(var Form;const FormSinifi:TFormClass;const Modal:Boolean=True; const ModalSonraYokEt:Boolean=False):TForm;
begin
  try
    Result:=FormSinifi.Create(Application);
    TForm(Form):=Result;
    if Modal then Result.ShowModal else Result.Show;
    if Modal and ModalSonraYokEt then FreeAndNil(Result);
  except
    Result:=nil;
  end;
  TForm(Form):=Result;
end;
kullanırken ise

Kod: Tümünü seç

GosterEk(Form1,TForm1);
GosterEk(Form2,TForm2,True,True);
şeklinde kullanılırsa bir sorun çıkmaz ve Form1, Form2 değişkenleri üzerinden de form kullanılabilir(onCreate olaylarından sonra. Zaten borlandın kendi mimarisinde de bu şekilde).
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ikut

Mesaj gönderen ikut »

aLonE CoDeR yazdı:Öncelikle bu yapı genel kullanım için pek sağlıklı değil onu belirtmekte fayda var.Soruna gelince, "Call Form" tekniği için TComponentClass sınıfını kullanman gerekir.Parametrikten kastın ne olduğunu tam anlamadım ama ilgili formu TComponentClass olarak parametre geçersen create eder ve işlem bitiminde Free edersin vs.

Kolay gele..
Neden sağlıklı değil bilgi vermen mümkünmü ?
Cevapla