Döngüden neden çıkmıyor?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
OnderTastan
Üye
Mesajlar: 38
Kayıt: 01 Tem 2007 05:09
Konum: İzmir

Döngüden neden çıkmıyor?

Mesaj gönderen OnderTastan »

Bu kodlarda Boş Bırakılmayan alanların döngüden çıkmasını istiyorum ama bir türlü olmadı. sürekli mesaj ekranı gelerek koşulları tekrarlıyor.


procedure TKayit_F.SayfaChange(Sender: TObject);
var
Eksik:integer;
begin

if ((GBAadi.Text='') or (GBAunvan.Text='')) and (Sayfa.ActivePageIndex <> 0) then
begin
Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
Sayfa.ActivePageIndex :=0;
end
else
begin

if (GPadi.Text='') and (Sayfa.ActivePageIndex <> 1) then
begin
Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
Sayfa.ActivePageIndex :=1;
end;
end;
end;
end.
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

PageControl bileşeninin OnChanging olayını kullanın. Eğer istediğiniz koşullar olmuyorsa AllowChange:= False değerini atayınız.

Saygılar.
Kullanıcı avatarı
OnderTastan
Üye
Mesajlar: 38
Kayıt: 01 Tem 2007 05:09
Konum: İzmir

Mesaj gönderen OnderTastan »

Baktım ama göremedim. Change olayına yazdım kodları zaten. ama AllowChange:=false değerini nerden vereceğimi bulmadım. biraz daha açar mısınız?
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

PageControl bileşeninde OnChange ve OnChanging adlı iki olay vardır.

İlkinde sayfa değiştikten sonra tetiklenir, ikincisinde ise sayfa değişmeden önce tetiklenir.

Siz OnChanging event'ını kullanmalısınız. Yukarıdaki kodlarınızda siz OnChange event'ını kullanmışsınız.

Saygılar.
Kullanıcı avatarı
OnderTastan
Üye
Mesajlar: 38
Kayıt: 01 Tem 2007 05:09
Konum: İzmir

Mesaj gönderen OnderTastan »

ben TcxPageConrtol kullandım formda. Sizin söylediğinize en uygun olan OnPageChanging olayı idi. Ben de kodları bu olaya yazdım ama döngüler kendini sürekli tekrar ediyor yine. Acab kod yazılımında mı bir hata var.
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

AllowChange:= False; dedikten sonra ayrıca Sayfa.ActivePageIndex :=0; gibi sayfa değiştirmenize gerek yok. AllowChange:= False; dedikten sonra o an hangi sayfada ise orada kalır, yeni seçilen sayfaya geçmez.

Sayfa.ActivePageIndex :=0; kodunu kullanırsanız eğer habibire, OnChange ve OnChanging event'ları tetiklenir.
Kullanıcı avatarı
OnderTastan
Üye
Mesajlar: 38
Kayıt: 01 Tem 2007 05:09
Konum: İzmir

Mesaj gönderen OnderTastan »

özür dilerim uzun zamandır pc başındayım kafam biraz durdu sanırım. :? rica etsem verdiğim kodlarla birlikte bütünleştirip kopyalar mısınız?
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Arkadaşım yukarıda yeterli bir açıklama yaptığımı düşünüyorum. Bende epey bir süredir PC başındayım. Şartlarımız aynı.
Kullanıcı avatarı
OnderTastan
Üye
Mesajlar: 38
Kayıt: 01 Tem 2007 05:09
Konum: İzmir

Mesaj gönderen OnderTastan »

Peki. İlginize çok teşekkür ederim. Dostçakalın :wink:
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Kod: Tümünü seç

procedure TKayit_F.SayfaChange(Sender: TObject); 
var 
Eksik:integer; 
begin 
	if ((GBAadi.Text='') or (GBAunvan.Text='')) and (Sayfa.ActivePageIndex <> 0) then 
	begin 
		Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop); 
		Sayfa.ActivePageIndex :=0; 
	end else 
	if (GPadi.Text='') and (Sayfa.ActivePageIndex <> 1) then 
	begin 
		Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop); 
		Sayfa.ActivePageIndex :=1; 
	end; 
	
	Abort;
end; 

end.
Kullanıcı avatarı
OnderTastan
Üye
Mesajlar: 38
Kayıt: 01 Tem 2007 05:09
Konum: İzmir

Mesaj gönderen OnderTastan »

Yine olmadı bir türlü döngüden çıkmıyor sürekli tekrarlıyor. Şunu nasıl yapacağımı açıklayacak bir arkadaş yok mu?
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
Kullanıcı avatarı
OnderTastan
Üye
Mesajlar: 38
Kayıt: 01 Tem 2007 05:09
Konum: İzmir

Mesaj gönderen OnderTastan »

Bu kodlar iş görüyor ama mesaj butonu 2 defa tıklanınca ilgili sayfaya yönleniyor. Eğer bunu çözebilirsek bu da olur. Teşekkür ederim.


procedure TForm1.SayfaChange(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ComponentCount - 1 do
begin
if Components is TcxTextEdit then
begin
with TcxTextEdit(Components) do
begin
if (Tag > 0) and (Text = '') then
begin
Sayfa.ActivePageIndex := Tag - 1;
ShowMessage('Boş Bu');
Exit;
end;
end;
end;
end;
end;

end.
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

:D Ukalalık gibi görme lütfen ama hala inanamıyorum bunu çözemediğine. :)

Bak şimdi, çözüme adım adım ulaşalım.

PageControl bileşeni işlemlerde hangi olayları tetikler önce ona bakalım.

PC1 adında bir PageControl'ümüz olsun. Bu PageControl'a bağlı 3 sayfamız olsun. TabSheet1, TabSheet2 ve TabSheet3.

Sen formu SHOW yaptığında ilk önce ne olur? hangi evetlar tetiklenir?
PageControl bileşeni üstünden gidiyoruz. Sadece bu bileşenin olaylarını inceleyelim.

Form ilk önce SHOW olduğunda, sırasıyle şunlar tetiklenir

Kod: Tümünü seç

PC1.OnEnter()
TabSheet1.OnShow()
TabSheet1.OnEnter()
Peki TabSheet1'den TabSheet2'ye geçersek ne olur? Sırasıyle şunlar olur.

Kod: Tümünü seç

PC1.OnChanging()  //bak bunu OnChange ile karıştırma...
TabSheet2.OnShow()
TabSheet1.OnExit()
TabSheet2.OnEnter()
TabSheet1.OnHide()
PC1.OnChange()
//gördüğün gibi en son bu oluyor. demekki bu event senin işini görmez.
Peki TabSheet2 sayfası görünürken Formu close yaparsak ne olur?

Kod: Tümünü seç

Hiç.. Yani PageControl ve TabSheet'lerin Evet'ları tetiklenmedi. 
Demek ki, iki kontrol yapmak lazım. İşi sağlama almak açısından. PC1.OnChanging ve Form1.OnCloseQuery olaylarına kod yazmak lazım.

Sen şimdi PC1.OnChanging event'ını kullanacaksın. eğer istediğin koşullar sağlanıyorsa AllowChange := True diyeceksin. Aksi durumda AllowChange := False diyeceksin. OnChanging için PC1.ActivePageIndex := 0 gibi birşey demene gerek yok. Böyle birşeyi kullanmayacaksın. Senin yukarıdaki kodlarını OnChange yerine OnChanging'e koy. Ve yukarıdaki kodlardaki Sayfa.ActivePageIndex :=1; gibi satırlarını AllowChange := False olarak değiştir.

Ümitliyim, çözeceksin. :)
Kullanıcı avatarı
OnderTastan
Üye
Mesajlar: 38
Kayıt: 01 Tem 2007 05:09
Konum: İzmir

Mesaj gönderen OnderTastan »

Ümitliyim, çözeceksin. :)
Siz öyle zannedin :lol:
Ayrıca ukalalık değil estafurullah. Sadece ben sizin kadar uzman değilim bu konuda hepsi bu. daha önce de belirttim, PageControl değil cxPageConrtol kullandım işler burda biraz karıştı.

Şu AlloweChange:=False bi türlü yediremedim. Biliyorum doğru olanı siz yapıyor, doyacağım kadar balık vermek yerine bana balık tutmayı öğretmeğe çalışıyorsunuz. sanırım ben iyi bir öğrenci değilim, görünen o. Bu kadar açıkladıktan sonra nasıl olsa anlamıştır düşüncesiyle anlatmışsınız teşekkür ederim. Ama şunu kodların içine kullanılır haliyle verseydiniz inanın neyin nereye yazıldığına bakarak bütün olayı çözmem kolay olurdu. Belki bu işin kolaycılığı.

kısa yoldan yardım istememin sebebi; fazla zamanım yok bir program yapmaya çalışıyorum bu basit şeyde takıldım kaldım. istediğim gibi bir yardımda bulunursanız çok sevinirim. ama zaten ben gereğini yaptım gerisini de sen bul diyorsanız yine de ilginize ve sabrınıza bir kez daha teşekkür ederim.

DOSTLUKLA...
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Döngüden neden çıkmıyor?

Mesaj gönderen Lost Soul »

Kod: Tümünü seç

procedure TKayit_F.SayfaChange(Sender: TObject);
var
Eksik:integer;
begin

if ((GBAadi.Text='') or (GBAunvan.Text='')) and (Sayfa.ActivePageIndex <> 0) then
    begin
    Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
    Sayfa.ActivePageIndex :=0;
    end
    else
    begin

if (GPadi.Text='') and (Sayfa.ActivePageIndex <> 1) then
    begin
    Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
    Sayfa.ActivePageIndex :=1;
end;
end;
end;
end
kodunda

ActivePageIndex:=0 yerine AllowChange:=False kullanıp bu kodu OnChanging olayına yazacaksın diyor arkadaş. ayrıca program yazarken
begin end bloklarını @Glen arkadaşımızın mesajındaki gibi girintili çıkıntılı yazma alışkanlığını edinmen büyük kod bloklarında rahatlık sağlayacaktır. iyi çalışmamalar :)
Cevapla