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).