Ana form dışında tüm formları kapatmak..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
adnansirca
Üye
Mesajlar: 135
Kayıt: 14 Kas 2005 12:24

Ana form dışında tüm formları kapatmak..

Mesaj gönderen adnansirca »

Üstadlar
1-ana form dışındaki tüm formları kapatmak için bildiğiniz bir fonksiyon ya da procedure var mı...
ya da formun isminden hareketli isim tutmayan formların tamamını nasıl kapatabiliriz....
2-Ekranın yalnızca bir kısmını(örneğin üst(top) kaplayan bir formun fareyle üzerinden ayrıldığınızda gizlenmesini nasıl sağlayabiliriz. Diğer bir anlatımla Windows başlat çubuğu tarzında bir çalışma esası nasıl oluşturulabilir.

Saygılar....
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba,
Ana Form dışında kalan tüm formları şöyle kapatabilirsiniz,

Kod: Tümünü seç

var
i:integer;
begin
  for i:=0 to Application.ComponentCount-1 do
   begin
       if (Application.Components[i] is TForm) then
       if TForm(Application.Components[i]).Name<>Application.MainForm.Name then TForm(Application.Components[i]).Close;
   end;
end;

Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

1. sorunuz:
Bir buton (vb. methodu calisitiracak nesne) kullanip kapatacaksaniz eger,
Ve eger acilacak formlar tek bir dal seklinde DEĞİLSE, yani asagidaki gibiyse..

1. Dal Alt Dallar
Anaform -> Stok -> STOK EKLE
Anaform -> CH -> CH EKLE
Anaform -> BANKA -> BANKA EKLE

Her formu acarken,

x := Tx.Create(Application) seklinde yaratmali, veya yaratilan her formu bir form listesine eklemelisiniz. (Benim yazdigim baslikta ben her formu 1 form listesine ekledim, onu inceleyebilirsiniz.)

Kapatirken ise, Application ile yarattiysaniz

Kod: Tümünü seç

For i := 0 to Applicaton.ComponentCount-1 do
     if (Application.Components[i] is TForm) then 
            if Application.Components[i].Name <> 'ana' then
                 TForm(Application.Components[i]).Close;
Demelisiniz. Eger application ile yaratmayip, her formu

Kod: Tümünü seç

Create(SELF)
seklinde yaratirsaniz,

Yarattiginiz 1. dali gorecek ancak 1. dala ait alt dallari gormeyecek (Yukarida cizmeye calistigim seydeki StokEkle, CHEkle, BankaEkle gibi formlar 1. dala ait alt dallari belirtiyor.

Eger SELF seklinde yaratirsaniz, ki bence herseye ragmen dogrusu bu.

Acikformlar listenize her eklediginiz formu, tek tek kapatip (yine yukaridaki verdigim (kodda biraz modifikasyonlar yaparak) yine isinizi gorebilirsiniz.

2. Sorunuz

Denemedim ama aklima gelen sey, Formunuza bir Panel ekleyin ismi Panel1 olsun. Panel1'in visible degerini FALSE yapin

Formunuzun MouseMove eventine,

Kod: Tümünü seç

if Y > Panel1.Height then 
begin
   Panel1.Visible := False;
end else
if X > Panel1.Width  then 
begin
   Panel1.Visible := False;
end else
Panel1.Visible := True;

Iyi calismalar, kolay gelsin.
[/list]
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 »

vkamadan yazdı:Merhaba,
Ana Form dışında kalan tüm formları şöyle kapatabilirsiniz,

Kod: Tümünü seç

var
i:integer;
begin
  for i:=0 to Application.ComponentCount-1 do
   begin
       if (Application.Components[i] is TForm) then
       if TForm(Application.Components[i]).Name<>Application.MainForm.Name then TForm(Application.Components[i]).Close;
   end;
end;

Kolay gelsin.
Aynı kodu yazıyorum fakat Application.Components<>Application.MainForm kıyaslamasına dikkat çekmek istiyorum.

Kod: Tümünü seç

var i:integer;
begin
  for i:=0 to Application.ComponentCount-1 do
   if (Application.Components[i] is TCustomForm) and
    (Application.Components[i]<>Application.MainForm) then
    TForm(Application.Components[i]).Close;
end;
Çalıştı.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
adnansirca
Üye
Mesajlar: 135
Kayıt: 14 Kas 2005 12:24

Mesaj gönderen adnansirca »

üstadlar verdiğiniz kodlar işe yaradı.
Hepinize ayrı ayrı teşekkür ederim...
Cevapla