Form Yaratmada ince bir nüans, ama nasıl

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
comfort
Üye
Mesajlar: 214
Kayıt: 28 Ara 2004 06:37
Konum: İzmir
İletişim:

Form Yaratmada ince bir nüans, ama nasıl

Mesaj gönderen comfort »

Arkadaşlar bu aralar sorularım sıklaşıyor kusura bakmazsınız umarım.Bende bildiğim konularda başkalarına yardımcı olmaya çalışıyorum :wink: bilgi paylaştıkça artar.

Problemim şu: :duvar:
Programım bir mdi uygulaması.Diğer child formları runtime esnasında yaratıyorum.Tabii bazı kontroller gerekiyor :!: Yani form açıkmı açık değilse yarat göster açıksa öne getir .Fahrettin abi sağolsun bu konuda yazılar yazmış bunuda ondan öğrendim.Ama sorun bende ki form sayısının 100'ün üzerinde olması.Bende dedimki bir procedure yazayım bu kontrolleri o yapsın
gerekiyosa yaratsın gerekiyosa öne getirsin.(Kod tekrarından kurtulmak için)
Procedure Şöyle:

Kod: Tümünü seç

procedure TAnaSayfa.enter(KaynakForm,HedefForm:tform);
begin
  if HedefForm=nil then
    begin
      hedefform:=THedefForm.Create(self);
      HedefForm.Show;
   end
   else
      HedefForm.BringToFront;
end;
Burda problem THedefForm diye bir tipin olmaması tabii ki.
Bu procedure şu şekil çalışıyor:

Kod: Tümünü seç

procedure TAnaSayfa.GuncellemeSayfasiAcClick(Sender: TObject);
begin
enter(Anasayfa,Guncellemesayfası);
end;
Yani ben procedure içine kaynak form ile hedef formu gönderiyorum procedure bu formu bi şekilde benim karşıma getiriyor.Yani getirmiyor ama ben bunu istiyorum.Henüz bulamadım forumu araştırmaya devam ediyorum bilen arkadaşlar yardımcı olursa zamandan kazanırım Herkese Teşekkür Ediyorum

(Seminer Bekliyorum. Hatta gelen olursa İzmirde bir seminer olmazmı yer ve Bilgisayarlar benden 8) )
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Kod: Tümünü seç

type
  TFormClass = class of TForm;

procedure Enter(var AForm: Pointer; AFormType: TFormClass);
begin
  if not Assigned(AForm) then
  begin
    AForm:= AFormType.Create(nil);
    TForm(AForm).Show;
  end else
  begin
    TForm(AForm).Show;
    TForm(AForm).BringToFront;
  end;
end;
Projende TForm2 ve TForm3 var diyelim. Buna göre:

Enter(Pointer(Form2), TForm2);

Enter(Pointer(Form3), TForm3);

diyerek istediğini gerçekleştirebilirsin sanırım.
Kullanıcı avatarı
comfort
Üye
Mesajlar: 214
Kayıt: 28 Ara 2004 06:37
Konum: İzmir
İletişim:

Mesaj gönderen comfort »

coderlord bütün sorularıma sen cevap veriyorsun sana çok borçlandım İzmire gelirsen beklerim Ha unutmadan şunu deneyeyim
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Elimizden geleni yapıyoruz. 8) Kolay gelsin.
Kullanıcı avatarı
comfort
Üye
Mesajlar: 214
Kayıt: 28 Ara 2004 06:37
Konum: İzmir
İletişim:

Mesaj gönderen comfort »

CTRL+F9 yapınca (compile edince)

declaration of 'Enter' differs from previus declaration


hatası veriyo
Kullanıcı avatarı
comfort
Üye
Mesajlar: 214
Kayıt: 28 Ara 2004 06:37
Konum: İzmir
İletişim:

Mesaj gönderen comfort »

Kod: Tümünü seç

type
  TFormClass = class of TForm; 
Satırnı silince Düzgün çalıştı sence mantıklımı bu :?:
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

TFormClass sınıfı Forms.pas unitinde zaten var.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Forms unitinde aynı isimli ve aynı tipte bir tip olduğunu bilmiyordum. Şans eseri aynı adı vermişim. :) Bende hiç hata vermemişti. İlginç...

Her neyse mantığı anladın. class of TForm tipi ile TForm'dan türemiş bütün nesneler anlamına gelen bir parametre oluşturduk. Bu şekilde TForm1 TForm2 sınıfları da TForm sınıfından türediğinden, parametre olarak geçmen halinde bu nesneleri dinamik yaratabilirsin.
Cevapla