adını string olarak bildiğin bi formu create etmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ozz_deniz
Üye
Mesajlar: 39
Kayıt: 16 Ağu 2003 11:32
Konum: Antalya

adını string olarak bildiğin bi formu create etmek

Mesaj gönderen ozz_deniz »

sevgili abilerim,
forumda hakkatten aradım bulamadım,

şimdi, adı string olarak db den gelen bi formu create etmek, showmodal gösterip free etmek istiyorum,

Yani

Aplication.CreateForm(TDenemeFrm,DenemeFrm) yerine

Aplication.CreateForm(Q1TFRM.Value,Q1FRM.Value)

aynı şey formu show etmek içinde geçerli,
ertug
Üye
Mesajlar: 82
Kayıt: 10 Ara 2004 05:41

Mesaj gönderen ertug »

Merhaba,

Hemen bir uygulama yapalım. Yeni bir proje oluşturup, gelen forma ilave olarak ikinci bir form ekleyin. (Form1)in üzerine bir düğme (Button1) koyun. (Form2)nin üzerine bir adet ListBox koyun.

Öncelikle formları kaydetmelisiniz. Bunun için proje koduna:

Kod: Tümünü seç

program Project1;

uses
  Forms,
  Classes,  //<- ilave
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  //Application.CreateForm(TForm2, Form2); //<- bu satırı çıkarın
  RegisterClass(TForm2); //<- Form2 sınıfını kaydetmek için
  Application.Run;
end.

(Form1)deki düğmenin (OnClick) olayına aşağıdaki kodu yazın.

procedure TForm1.Button1Click(Sender: TObject);
var
  aForm: TForm;
  aFormClass: TFormClass;
begin
  aFormClass := TFormClass(FindClass('TForm2'));
  aForm := aFormClass.Create(Application);
  aForm.Show;
end;
Uygulamayı çalıştırın. Düğmeye basınca (Form2) karşınıza gelecektir. Ancak string'den oluşturacağınız her form için RegisterClass yapmalısınız. Bu arada (Form2)ye ListBox koymamızın sebebi sadece test amaçlıdır.

Umarım yardımcı olur.
Ertuğ Kaya

*** Kodlarınızı [ CODE ] tagı içine alın.mege
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Arkadaşlar, neden böyle bir şeye ihtiyaç oluyor acaba ?

Teşekkürler...
ozz_deniz
Üye
Mesajlar: 39
Kayıt: 16 Ağu 2003 11:32
Konum: Antalya

Neden ihtiyaç duydum?

Mesaj gönderen ozz_deniz »

Explorer tarzı bir ana menü var, menü db den geliyor, adam tıkladığı zaman bir seçeneği, onun formu hangisi ise create edilip gösterilmesi lazım, ben form ismini biliyorum, başka bir yolunu bulamadığım içinde hiçte sevmediğim

if MyFormName = 'hede' then Application.CreateForm(THede,Hede);
if MyFormName = 'hodo' then Application.CreateForm(THodo,Hodo);
...
...
...

yolu ile bu işi hallediyorum, e 50 nin üstünde form olduğu için procedure ye her form eklediğimde git bi satır daha ekle,

yani anlayacağınız bi programcı için çok amele bi yöntem,
ne demiş abilerimiz, source şiir gibi olmalıdır...
ozz_deniz
Üye
Mesajlar: 39
Kayıt: 16 Ağu 2003 11:32
Konum: Antalya

Ertug yardim

Mesaj gönderen ozz_deniz »

usta yazdığın yöntem işe yarıyor,
ancak gelen formu kendi kapatından kapatmayıpta formun üzerine kapat tuşu koyup

DenemeForm.Close; dersen av geliyor, zannedersem bu formun create sinin farklı olmasından kaynaklanıyor ve ona özel bi close yazmak gerekiyor;

burda bi yardımın gerekiyor zannedersem;
ozz_deniz
Üye
Mesajlar: 39
Kayıt: 16 Ağu 2003 11:32
Konum: Antalya

ertug saol

Mesaj gönderen ozz_deniz »

denemefrm.close yerine sadece close;

çok eskiden hep böyle yapardım, nasılda akıl edemedim,

usta çok saol
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Açıklamanız için teşkkürler :)
ertug
Üye
Mesajlar: 82
Kayıt: 10 Ara 2004 05:41

Mesaj gönderen ertug »

oguzozturk74 yazdı:Arkadaşlar, neden böyle bir şeye ihtiyaç oluyor acaba ?
Kişisel görüşüm, ne işe yaradığını bilmediğiniz kodları çok fazla kafaya takmamanız. Zamanı geldiğinde ne işe yaradığını zaten tecrübe edeceksiniz. Bunun için bu tarz şeyler hakkında çok fazla düşünmeyin, programcılıktan soğuyabilirsiniz. Daha uygun düşünce tarzı, elinizdeki işi nasıl yapabileceğiniz olmalı.
ozz_deniz yazdı:DenemeForm.Close; dersen av geliyor, zannedersem bu formun create sinin farklı olmasından kaynaklanıyor ve ona özel bi close yazmak gerekiyor;
Sorunu çözmüşsünüz ancak genel olarak AV hatasının tanıtılmamış veya yok edilmiş bir nesneye ulaşmaktan kaynaklandığını söylemeliyim.

Kod: Tümünü seç

  aForm := nil;
  aForm.Create(Application); //AV
  aForm.Show; //AV
  aForm := TForm.Create(Application);
  aForm.Show; 
  aForm.Free;
  aForm.Show; //AV
ozz_deniz yazdı:çok saol
Birşey değil. Esas bu forumun oluşmasında ve yürütülmesinde emeği geçenlere teşekkür edin.

Ertuğ Kaya
Cevapla