Açık olan formları ensondan başlayarak kapatma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
muttalip
Üye
Mesajlar: 71
Kayıt: 18 Haz 2003 08:58
Konum: İstanbul
İletişim:

Açık olan formları ensondan başlayarak kapatma

Mesaj gönderen muttalip »

Uygulamamda ana formdan açtığım diğer formları FormAdı.ShowModal diye açıyorum. A1 anaformum,A2 alt form,A3 ise A2'nin alt formu şeklinde alt alta birkaç form açıyorum. Bir timer tutuyorum.Süre dolduğu
zaman bu açılan formların en sondan başlayarak kapatılmasını istiyorum.

Bu işlemi nasıl yapabiliriz?
Muttalip TOPTAŞ

Yıldız Teknik Üniversitesi
Bilgi İşlem Dairesi Başkanlığı

Tel: 0212-3832134
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhaba,

kod olarak yardımcı olamayacağım ama mantık olarak bir şeyler demek istiyorum,

timer ın süresi dolduktan sonra aktif olan formu tespit ederek kapatmasını sağlayabilirsin.

en üstteki form aktif form olacağı için kapandıkça sıradaki form en üste ve aktif duruma geleceğinden bu şekilde olabilir diye düşünüyorum.

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
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ç

(Timer)
A1.Close;
(Timer)
A2.Close;
(Timer)
A3.Close;
muttalip
Üye
Mesajlar: 71
Kayıt: 18 Haz 2003 08:58
Konum: İstanbul
İletişim:

Mesaj gönderen muttalip »

En son hangi formun açıldığını nasıl anlayacağız. A1,A2,A3 leri ben örnek olarak verdim. Örnekte en son açılan form A3' dür.Öyleyse önce bu form kapatılmalı,sonra A2 sonrada A1 kapatılmalı.
Muttalip TOPTAŞ

Yıldız Teknik Üniversitesi
Bilgi İşlem Dairesi Başkanlığı

Tel: 0212-3832134
Kullanıcı avatarı
Trial_Cooder
Üye
Mesajlar: 236
Kayıt: 17 Nis 2006 04:44

Mesaj gönderen Trial_Cooder »

Bu İşi Görmüyormu Sıra İle Arada Zaman Boşluğu Bırakarak

Kod: Tümünü seç

(Timer)
A3.Close;
(Timer)
A2.Close;
(Timer)
A1.Close;  (A1.Ana Formun İse Sadece Close Yazsanda Olur)
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

muttalip, açtığın formların pointer'ini bir TList içinde sakla, free ederken de sil. TList'e açılış sırasıyla kaydederek, formların sıralamasını bulabilirsin.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

coderlord un dediği gibi her OnCreate de TList e ekleyip, OnClose da da TList ten silerek oluşturduğun liste ile yapabilirsin.. Başka bir yol da aktif formu bulun close (yada free) edebilirsin :?:
Belki buradan yola çıkılabilir :?:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Üstte verdiğim bağlantıdaki bilgilerden yola çıkarak şöyle bir şey çıktı:
Projedeki ilk başta oluşturulan ana form ve diğer yardımcı formlar dışındaki formlar auto-create olarak oluşturulmamalı. Açarken;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(Self);
  Form2.Show;
end;
Kapatırken (OnClose da)

Kod: Tümünü seç

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;
şeklinde kapatılmalı.

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i: integer;
begin
  if (Screen.FormCount > 0) and (Screen.Forms[0].Name <> 'Form1') then
    Screen.Forms[0].Close;
//  ListBox1.Items.Clear;
//  for i := 0 to Screen.FormCount - 1 do
//    ListBox1.Items.Add(Screen.Forms[i].Name);
end;
Burada önemli olan sıfırıncı formun aktif olan form olmasıdır. Bir listBox a ekletilerek bu liste kontrol edilebilir. Eğer aktif form adı ilk form adı ile aynı ise isteğe bağlı olarak kapatmayacak.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla