hangi formun active olduğnu öğrenmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

hangi formun active olduğnu öğrenmek

Mesaj gönderen delphist »

S.a. Arkadaşlar...Toolbarın üstünde kayıt sil ilk kayıt son kayıt gibi butonlarımız var...Ben bunları tüm dll içindeki formlar için ortak kullanmak istiyorum...Yani yeni kayıt butonuna tıklandığı zaman hangi formun active olduğunu anlamam lazım...böyle bir delphi üzerinde activewindow gibi vb. öğrenebileceğim bir durum var mı...veya nasıl öğrenebilirim...Teşekkürler...şimdiden cevabınız için...
ikut

Re: hangi formun active olduğnu öğrenmek

Mesaj gönderen ikut »

delphist yazdı:S.a. Arkadaşlar...Toolbarın üstünde kayıt sil ilk kayıt son kayıt gibi butonlarımız var...Ben bunları tüm dll içindeki formlar için ortak kullanmak istiyorum...Yani yeni kayıt butonuna tıklandığı zaman hangi formun active olduğunu anlamam lazım...böyle bir delphi üzerinde activewindow gibi vb. öğrenebileceğim bir durum var mı...veya nasıl öğrenebilirim...Teşekkürler...şimdiden cevabınız için...
Form inheritance kullandıysan daha kolayı var;

Öncelikle formu hazırla.; ilk kayıt butonunada kodunu jenerik yaz ...

mesela

dbedit1.datasource.dataset.first gibi. böyle ce bağlı datasource hangisi ise o çalışır.

sonra fu formu object repository e ekle.

yeni form dediğin zaman obje reporsitoryden bu formu sec ve inheritance de. datasource bağladığın anda tüm kodları hazır bulacaksın.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam.

- Açık söyleyim çözüm önersini anlamadım. Soruyu yanlış anlamış da olabilirim. Belki birbirine bağlantı kuramadığımdan kafam karışmıştır.

Şöyle bulabilirsin....

Kod: Tümünü seç

  ShowMessage(ActiveControl.Owner.Name);
veya ComponentCount kadar bir döngü kurup

Kod: Tümünü seç

If (Components[sayac] is TForm) AND (TForm(Components[sayac]).Active) then bla...bla..
şekilinde Active olanı öğrenebilirsin...

- Ek olarak....Başka bir yaklaşım sunayım belki kullanışlıı gelir...

- Kullanım alanımı bildireyim. Bir formum olsa, showmodal şeklinde değil de show ile çağrılır halde olsa ve birden fazla form tarafından çağrılabiliyor olsa, hangi formdan çağrıldığını anlamam ve o çağrıldığım formu kilitlemem lazım gelirdi.

- Bu noktadan yola çıkarak, çağrılacak ortak forma bir tane global değişken eklerdim...

Kod: Tümünü seç

Var
  xCagriSahibi    : TForm;
- Sonra da yapacağım şey şu olurdu. Her nereden bu form çağrılıp show edilecekse bir satır önce;

Kod: Tümünü seç

  xCagriSahibi := Self;
şeklinde yazıp çağrı yapan formun benliğini takip altına alırdım. Çağrılan formda da

Kod: Tümünü seç

If Assigned(xCagriSahibi) then xCagriSahibi.Enabled := false;
dediğimde kim cagri yaptıysa o formu kilitler, iş bittiğinde de

Kod: Tümünü seç

xCagriSahibi.Enabled := True;
xCagriSahibi := Nil;
- Deyip yanlışlık yapma ihtimalimi 0'a indirgerdim.

- Yaklaşım fikir vermek adına kurgulanmıştır, gerçek hayattaki kişi ve /veya kişilerle ilgili bağlantısı yoktur. Hayal ürünüdür... :lol:
Resim
Resim ....Resim
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

- Yaklaşım fikir vermek adına kurgulanmıştır, gerçek hayattaki kişi ve /veya kişilerle ilgili bağlantısı yoktur. Hayal ürünüdür...
Aslında gerçek hayatttan pek farksız olmamış.MDIChild formlar kullandığım bir projede belirli bir form açıkken bazı formlara ulaşılmaması gerekiyordu.Söylediğiniz yöntemi kullanıyordum.

Ama artık ShowModal açılan fsNormal formlar kullanmayı tercih ediyorum. :lol: :lol: :lol:
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

Mesaj gönderen delphist »

Ben olayı biraz daha açıklarsam heralde tam olarak istediğim olayı tam anlatamadım...Ayrıca sizin active olan formu bulduğunuz code işimi görebilir ama belki başka önerileriniz de olabilir diyerekten ben olayı açıklıyorum tekrar.

Ben projemde dll'ler içinde mdi main form kullanıyorum ana exe uygulamamdan mdi main form çağırıyorum...Ve mdimain formun üzerinde toolbar kullanarak kayıt sil gibi butonları bu toolbarın üzerinde kullanıyorum dll içindeki diğer mdi child formlarıda bu açtığım mdi main formun içinde kullandığım zaman mdi main formun üzerinde bulunan toolbarın içindeki kayıt veya sil butonu gibi butonların hangi form active ise o formun dataset ve querylerini çalıştırmasını istiyorum...Yani toolbarı üzerindeki butonlar tek ama bütün mdichild formların kontrolünü bu toolbar üzerindeki butonlar sayesinde çalışmasını istiyorum...Burda önemil olan sağlıklı olarak hangi formun active olduğunu bilmek...Gerisini zaten halledebilirim...

Yardımlarınız için teşekkürler...
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Benim sana naçizane tavsiyem bu toolbarı main form üzerine yapmaktan vazgeçip, ikut arkadaşımızın söylediği gibi inherit form kullanmandır.Bu sana kolaylık, hız, olası hataları çabuk düzeltme, tsasrım değişikliklerinde kolaylık vs........konularında avantaj sağlayacaktır.Ayrıca sıfır koda yazarak yeni bir form create edip sadece adını değiştirerek projeye dahil etmenin dayanılmaz keyfi de cabası...
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Selamlar.

İkinci açıklamandan sonra @mrmarman'ın son önerisini kullanmanın en stabil çözüm olacağını söyleyebilirim.Sair yöntemlerde çok karışıklığa neden olacaktır bu işlem..Form inheritance/inherit denilen olay "form türetmedir" ve çözüm adına ek bir fayda sağlamaz bilginize..

Kolay gele..
Cevapla