Bileşenlerin VCL tasarımı hakkında bir kaç bilgi verecek başka bir teknik de benden olsun

.
Kod: Tümünü seç
function FormBulOlustur(FormSinifi:TFormClass):TForm;
var i:Integer;
begin
Result:=nil;
i:=0;
while (i<Application.ComponentCount) and not Assigned(Result) do begin
if Application.Components[i] is FormSinifi then Result:=TForm(Application.Components[i]);
Inc(i);
end;
if not Assigned(Result) then Result:=FormSinifi.Create(Application);
end;
şeklinde bir kodla daha önce oluşturulmuş olan formlar incelenerek sonuca gidilir. Eğer parametre verilen sınıf daha önce oluşturulmuşsa onu bulur, yoksa oluşturur.
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
begin
with FormBulOlustur(TForm2) do begin
Show;
end;
end;
şeklinde de TForm2 hafızadan yok edilmediği sürece her seferinde aynı formu açar. Burada dikkat edilmesi gereken bir kaç nokta var.
Form2:=FormBulOlustur(TForm2) as TForm2; kodu ile de çalışılabilir fakat yukarıdaki örnekte böyle bir
Form2 ataması yapılmadığından bu forma
Form2 değişkeni ile erişilemez. Bir ikinci nokta ise her form en fazla bir kere oluşturulur. 2., 3. ve daha sonraki
FormBulOlustur kodları oluşturulmuş olan ilk formu bulup onu kullanacaktır. Tabi parametre verilen sınıfa göre
