Create edilen formu tekrar create etmeme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Create edilen formu tekrar create etmeme

Mesaj gönderen kahraman1285 »

Mrb.
Arama yaptım ama istediğim sonuca ulaşamadım.

Kod: Tümünü seç

with Tform1.Create(Application) do
  begin
      show;
  end;
koduyla projeyle birlikte autocreate edilmeyen formları run timeda create etmek için üstteki kodu kullanıyorum.

Fakat formu bir kere create ettikten sonra kod ikinci defa çalıştığında zaten create edilmiş formu tekrar create etmesin istiyorum.

Teşekkürler..
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

başka yollarıda verdır eminim ama ben olsam global bir değişkene (her form için ayrı değişken tanımlayıp) form create edilirken 1 değeri veririm form açan butona tıklandığında değişken 1 ise sadece show 1 den farklı ise create ederek show yaparsın.
Kullanıcı avatarı
Trial_Cooder
Üye
Mesajlar: 236
Kayıt: 17 Nis 2006 04:44

Mesaj gönderen Trial_Cooder »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Assigned(Form2) then
  begin
    Form2 := TForm2.Create(self);
    Form2.WindowState := wsNormal;
    Form2.Show;
  end
  else
    Form2.BringToFront;
end;
işini görür
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

cevaplar için teşekkürler...
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

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 :wink:
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla