form kopyalama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

form kopyalama

Mesaj gönderen pasa_yasar »

programda aynı kodlara sahip bir kaç değişikliği olan formlarım var. bunlardan bir tane yapıp kopyalamak istiyorum. satış faturası,alış faturası gibi. formlar. kopyalama yapıp adlarını ve içindeki unitlerde adlarını değiştirdiğimde hata veriyor. kendi içinde kopyaladığım zaman ise kodlar yerine inherited geliyor. ben kodlarında olmasını istiyorum. bunun için ne yapabilirim.
iyi çalışmalar.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: form kopyalama

Mesaj gönderen emin_as »

Bir kaç şekilde yapabilirsin.

Rename yöntemi:
unsatis.pas ve unsatis.dfm dosyalarımız var.
unalisfat.pas olarak farklı kaydet diyoruz. Dfm de farklı kaydedilmiş oluyor. Eski dosyamız silinmez, ama ikisini aynı formda kullanamayız, çünkü formların name leri aynı, o nedenle farklı kaydet dedikten sonra, unalisfat daki formun isnini fmAlis olarak degistiriyoruz.

unsatis.pas dosyasi yine aynı yerde duruyor, ama project listesinde görünmeyecektir. Project listesindeyken add i tıklayıp, bu formu ekleyebiliriz. Dosya isimleri ve form name leri farklı oldugundan sorun çıkarmadan derlenecektir.

Parametre ile belirleme:
Tek bir formumuz vardır, forma bir tane boolean alan ekleriz. Bu alanı kontrol ederek, formun özelliklerini belirleriz.

Kod: Tümünü seç

TAlSatForm = class(TForm)
  private
    FAlsat    : boolean;
    procedure setAlsat(value:boolean);
    ....
   property  alismi : boolean read FAlismi write SetAlSat ;
end;
....
procedure  TAlSatForm.SetAlsat(value: boolean);
begin
  if FAlsat<> value then
  begin
     FAlsat:=value; 
    AlsatFormAyarlari;
  end;
end;

procedure TAlsatForm.AlsatFormAyarlari;
begin
  if FAlsat then  // alis formu
  begin
     Caption:='Alış Formu ';
     ibquery1:=' select * from alsat where tur = 1';
  end else
  begin
     Captiıon:='Satış Formu';
     ibquery1:=' select * from alsat where tur = 2';
  end;
end;  
Bu yöntem biraz daha ugraştırır görünse de aslında birinci yönteme göre daha avantajlıdır. Formlara yeni özellik katmak istersen veya hata düzeltmen gerekirse, tek yerde çalışırsın. İki tarafta da sürekli bu düzenlemeleri yapmak zorunda kalmazsın.

Son yöntem nesneye yönelik tasarımın nimetlerinde yararlanmadır. İskelet bir form hazırlarsın. Kayıt girişi, listelenemesi vs herşeyi bu formda tanımlarsın. Sadece formun dosya açarken ve bazı ayarları düzenlerken kullanılacak fonksiyonları virtual olarak tanımlarsın, bunları override edersin, ilgili formlarda sadece bu override ettigin kısımlarda degişiklik yaparsın. Yeni bir özellik eklediğinde her iki forma da eklenecektir. Nesneye yönelik tasarım yapmak zaman alır, ama hataları aza indirger ve çok daha saglıklı formlar hazırlamayı sağlar.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: form kopyalama

Mesaj gönderen vkamadan »

Merhabalar ,
@emin_as' ın yöntemlerine ek olarak benimde benzer formlar için sıkça kullandığım bir diğer yöntem "Depoya Ekleme" yöntemidir,
Tasarım anında şablon olarak kaydetmek istediğiniz formunuzun her hangi bir yerinde sağ tıklayıp "Add to Repository" komudunu verin, formunuz vereceğiniz isimle birlikte delphi form şablonlarına eklenecektir, herhangi bir projenizde kullanmak için, New-->Other seçeneğini verip (Genelde) Forms sekmesinde yer alan depolanmış formları görebilir ve dilediğiniz kadar ekleyebilirsiniz. Örneğin "frmSablon" olarak depoya attığınız formdan projenize yeni bir tane eklediğinizde projenize "frmSablon1" olarak eklenecektir.

İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla