Kod yapınızda nesnelere procedure içerisinde başvuru yapmak yerine, procedure ve/veya function'lara ilişki kurmak istediğiniz nesneyi parametre olarak vermeyi tercih ederseniz, nesnelerin nerede olduğunun önemi kalmaz.
Örnek :
Aynı ekranda yer değişikliği kodu böyle olsun.
Procedure içerisinden direkt başvuru yapmak derken bunu kast ediyordum.
Dolayısıyla aynı Form1 altında bunu yazdınız. Başka formda yine lazım olsa ne yapmak lazımdı, aynı kodu yine yazmaktan öte button içerisinde belki de bir sürü dallanma yaparak CASE , IF vb ile alt sorgular yapmak zorunda kalıyoruz.
procedure TForm1.Button1Click(Sender: TObject);
var
aKonum : TPointF;
begin
aKonum := Rectangle1.Position.Point;
Rectangle1.Position.Point := Circle1.Position.Point;
Circle1.Position.Point := aKonum;
end;
- Aynısını şöyle yapsak nasıl olurdu.
procedure SwapObjects( aShape, bShape: TShape );
var
aKonum : TPointF;
begin
aKonum := aShape.Position.Point;
aShape.Position.Point := bShape.Position.Point;
bShape.Position.Point := aKonum;
end;
Kast ettiğim buydu. hangi formda olduğunuz önemini yitiriyor değil mi... Çünkü aShape dilerseniz Form1'de olsun dilerseniz Form2'de ; (
bu örnekteki değişiklik tipine göre aynı formda olmak kaydıyla) aynı SWAP objects procedure iş görecektir.
procedure TForm1.Button2Click(Sender: TObject);
begin
SwapObjects( Form1.Circle1, Form1.Rectangle1 );
end;
Şimdi bunu "Formlar Arasında" nasıl yaparız kısmı...
procedure SwapPositionAndParents( aShape, bShape: TShape );
var
aKonum : TPointF;
aFmxObject : TFmxObject;
begin
if aShape.Parent <> bShape.Parent then
begin
aFmxObject := aShape.Parent;
aShape.Parent := bShape.Parent;
bShape.Parent := aFmxObject;
end;
aKonum := aShape.Position.Point;
aShape.Position.Point := bShape.Position.Point;
bShape.Position.Point := aKonum;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
SwapPositionAndParents( Form1.Rectangle1, Form2.Circle1 );
end;
Burada hatırlatmam gereken ana unsur ( bu aynı zamanda performans kazandırıyor ) bilşenin OWNER'ı aynı kalmasıdır. Siz sadece PARENT'ini değiştiriyorsunuz. Form2'deki bilşenin sahipliği Form2'de kalır. Yani Kendisini Form1'de görürken Sahipliği Form2 olarak kalır. Bu da size bu oyun projenizde ekstra teyit mekanizması sunacaktır.
ÖZETLE:
Kod karmaşıklığı konusunu masaya yatırırsak, kodlarınızı yukarıda belirttiğim şekilde dinamik kurarsanız veya mevcut kodların dönüştürdükçe diyelim, sadeleşmiş olacaktır. Aynı ana formda kodlarınız olsun, sadece çalıştığında nesneler diğer formlardan çağrılıp yerini bulsun. Bu şekilde IDE performansı da artacaktır.