Ana formdan açılan form ikinci açılışta ilk haline dönmesi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Ana formdan açılan form ikinci açılışta ilk haline dönmesi
Aslında başlıkta tam anlatmadım sanırım. Kısaca konu şöyle;
Delphi7'de, bir uygulamada 2 tane Form var. Form1 ana pencere ve üzerinde bir button var. Buna basınca Form2.Show; ile Form2 penceresi açılıyor. Form2 üzerinde 2 tane Radiobutton var ve ilk çalışmada hiçbirisi seçilmemiş. Birisini seçip sağ üst köşeden X (OnClose) ile seçip kapatıyoruz. Ana menüden tekrar button'a basıyoruz ve bakıyoruz seçim aynen duruyor. Benzer şekilde EditBox, ComboBox yapılan değişiklik aynen duruyor. Burada Form2'nin sıfırlanması yada baştan başlaması gerekiyor. Yani hiç seçilmemiş RadioBox yada üzerine yazılmamış ComboBox gibi. İlk akla OnCreate, OnActive ile bunları eski haline getirmek gelebilir. Hepsini denedim ama sonuç hep aynı. Forumlarda arattım kombonent sayıp IndexValue = -1 yapan kodu denedim ama sonuç değişmedi. Tek tek RadioButton'ları False yaptım ama yine olmadı.
Kısaca sorunun pencereyi sonlandırmaktan mı yoksa başlatmaktan mı kaynaklandığını anlayamadım. İstediğim şey, ana pencereden basınca açılan pencerede yapılan işlerin kaybolması ve 2. pencerenin hep aynı düzende açılması. Belki basit bir şeydir ama bulamadım.
Delphi7'de, bir uygulamada 2 tane Form var. Form1 ana pencere ve üzerinde bir button var. Buna basınca Form2.Show; ile Form2 penceresi açılıyor. Form2 üzerinde 2 tane Radiobutton var ve ilk çalışmada hiçbirisi seçilmemiş. Birisini seçip sağ üst köşeden X (OnClose) ile seçip kapatıyoruz. Ana menüden tekrar button'a basıyoruz ve bakıyoruz seçim aynen duruyor. Benzer şekilde EditBox, ComboBox yapılan değişiklik aynen duruyor. Burada Form2'nin sıfırlanması yada baştan başlaması gerekiyor. Yani hiç seçilmemiş RadioBox yada üzerine yazılmamış ComboBox gibi. İlk akla OnCreate, OnActive ile bunları eski haline getirmek gelebilir. Hepsini denedim ama sonuç hep aynı. Forumlarda arattım kombonent sayıp IndexValue = -1 yapan kodu denedim ama sonuç değişmedi. Tek tek RadioButton'ları False yaptım ama yine olmadı.
Kısaca sorunun pencereyi sonlandırmaktan mı yoksa başlatmaktan mı kaynaklandığını anlayamadım. İstediğim şey, ana pencereden basınca açılan pencerede yapılan işlerin kaybolması ve 2. pencerenin hep aynı düzende açılması. Belki basit bir şeydir ama bulamadım.
Re: Ana formdan açılan form ikinci açılışta ilk haline dönme
Selam
Form her açıldığında eski veriler "gider" yani sıfırdan açılmış gibi olur...
Form her açıldığında eski veriler "gider" yani sıfırdan açılmış gibi olur...
Kod: Tümünü seç
Form12.ShowModal;
Form12 := TForm12.Create(nil);
Application.ProcessMessages;
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
-
- Üye
- Mesajlar: 152
- Kayıt: 16 May 2014 11:23
Re: Ana formdan açılan form ikinci açılışta ilk haline dönme
Delphi 7 de üst menuden Project -> Options -> Sol Panelde Forms sekmesine geç açılan kısımdan Auto create forms dan ana form hariç sıfırlanmasını istediğin formları kaldır.
eğer form2 açıldığında diğer form (anaform vs) kullanılamaz olsun istiyorsan bunları yaz
eğer istemiyorsan;
Form2 yi aç Form2 seçiliyken Object Inspectordan (sol tarafda) Events sekmesine gel ve oradan OnClose olayının içine çift tıkla gir ve
şekilde kodu uygula
daha sonra butonun altına click olayına gel ve
Kolay gelsin.
eğer form2 açıldığında diğer form (anaform vs) kullanılamaz olsun istiyorsan bunları yaz
Kod: Tümünü seç
Form2 := TForm2.Create(Application);
Form2.ShowModal;
Form2.Free;
Form2 yi aç Form2 seçiliyken Object Inspectordan (sol tarafda) Events sekmesine gel ve oradan OnClose olayının içine çift tıkla gir ve
şekilde kodu uygula
Kod: Tümünü seç
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
Kod: Tümünü seç
Form2 := TForm2.Create(Application);
Form2.Show;
-
- Üye
- Mesajlar: 152
- Kayıt: 16 May 2014 11:23
Re: Ana formdan açılan form ikinci açılışta ilk haline dönme
Ayrıca "brs" kardeşimizin söylediğini düzeltmek amacı ile söylüyorum.
Ayrıca
kodunu çalıştırdıkdan sonra Form2 instance ini Free etmeden tekrar olarak
derseniz sıfırdan bir form açılır evet, fakat bir önce ki create satırında oluşturulan obje yok olmaz sadece Form2 nin işaret ettiği component yeni oluşturduğunuz component olur ve bu tarz kullanımlar gereksiz memory kullanımlarına yol açar programı hantallaştırır. Kullandığınız ve işiniz bittiği birşeyi mutlaka yok etmelisiniz tabi bununda şartları var eğer sürekli onu kullanıyorsanız bir kere Create edersiniz ve sürekli kullanabilirsiniz.
cümlesi doğru değildir siz formu Free etmediğiniz sürece hiç birşey gitmez.Form her açıldığında eski veriler "gider" yani sıfırdan açılmış gibi olur...
Ayrıca
Kod: Tümünü seç
Form2:=TForm2.Create(Application)
Kod: Tümünü seç
Form2:=TForm2.Create(Application)
derseniz sıfırdan bir form açılır evet, fakat bir önce ki create satırında oluşturulan obje yok olmaz sadece Form2 nin işaret ettiği component yeni oluşturduğunuz component olur ve bu tarz kullanımlar gereksiz memory kullanımlarına yol açar programı hantallaştırır. Kullandığınız ve işiniz bittiği birşeyi mutlaka yok etmelisiniz tabi bununda şartları var eğer sürekli onu kullanıyorsanız bir kere Create edersiniz ve sürekli kullanabilirsiniz.
Re: Ana formdan açılan form ikinci açılışta ilk haline dönme
Çok teşekkür ederim, gün içinde verdiğiniz değerli örnekleri uygulayacağım.
Edit :
Button tıklama kısmına :
Form2 içinden
ekledim ve her defasında Form2 ilk oluşturulduğu gibi açılıyor. Benim derdim aslında RadioButton idi. Diğerleri OnCreate ile değiştirilebiliyor ama RadioButton'ları bir türlü hiç birisi seçilmemiş hale getiremedim. Programın akışı maalesef bunu gerektirdiği için belki de oldukça gereksiz olan bu işlemi kullanmak zorunda kaldım.
Yardımları ve değerli önerileriniz için brs ve anonymousdelphicoder arkadaşlarıma çok teşekkür ederim. Sayın forum yetkililerine ayrıca böyle bir iletişim merkezi kurup devam ettirdikleri için ayrıca saygılarımı sunarım.
Edit :
Button tıklama kısmına :
Kod: Tümünü seç
Form2 := TForm2.Create(Application);
Form2.Show;
Form2 içinden
Kod: Tümünü seç
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
Yardımları ve değerli önerileriniz için brs ve anonymousdelphicoder arkadaşlarıma çok teşekkür ederim. Sayın forum yetkililerine ayrıca böyle bir iletişim merkezi kurup devam ettirdikleri için ayrıca saygılarımı sunarım.
-
- Üye
- Mesajlar: 152
- Kayıt: 16 May 2014 11:23
Re: Ana formdan açılan form ikinci açılışta ilk haline dönme
Siz radio butonlara tam olarak ne yapmak istediginizi soylerseniz yardimci olabilirim
Re: Ana formdan açılan form ikinci açılışta ilk haline dönme
Formun onshow olayina
Kod: Tümünü seç
If radiobutton1.cheked=true then
Begin
Radiobutton1.cheked:=false;
End;
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Re: Ana formdan açılan form ikinci açılışta ilk haline dönme
Normal kullanım için bu şekilde zaten yapabiliyorum. Ancak benim sorunum, hiç seçilmemiş (uncheck all) Radiobutton düğmelerinin seçtikten sonra yine hiç seçilmemiş halde yeniden başlatabilmek. Bu şekilde yapınca anlatmaya çalıştığım şey maalesef olmuyor.If radiobutton1.cheked=true then
Begin
Radiobutton1.cheked:=false;
End;
İşlem basamakları :
Form1 = Button1 (Form2.Show);
Form2 = Radiobutton1; Radiobutton2;
F9
Form1 --- Button1(Form2.Show) ---> Form2.Active ---> Radiobutton1(False) + Radiobutton2(False) ---> Click.Radiobutton1 --> Radiobutton1(True) + Radiobutton2(False) ---> WM_Close;
F9
Form1 --- Button1(Form2.Show) ---> Form2.Active ---> Radiobutton1(True) + Radiobutton2(False);
Programı kapatmadan aynı işlem tekrarlanınca Click.Radiobutton1 ile aktif edilen Radiobutton yine "checked" olarak gözüküyor. Benim istediğim ise Form1.Button1'e basınca hangisi seçilirse seçilsin yine hepsinin uncheck olmasıydı.
Kod: Tümünü seç
Form2 := TForm2.Create(Application);
Form2.Show;

-
- Üye
- Mesajlar: 152
- Kayıt: 16 May 2014 11:23
Re: Ana formdan açılan form ikinci açılışta ilk haline dönme
1) Öncelikle teknik terimlerinizin doğrulugunu düzeltmek amacıyla söylüyorum. Exception hatası demek yanlış bir tabirdir exception istisna demektir istisna hatası doğru olmaz exception veya hata demeniz daha doğrudur.
2) instance.Create; diyerek sınıf oluşturulmaz. instance := TSinif.Create; diyerek olusturulur Form2.Create kodu hataya sebebiyet verir çünkü siz yapısal olarak oluşmuş bir formu kendi üzerine tekrar oluşturuyorsunuz formda nesneler bulunacagından bulunan bileşen isimleri zaten vardır diye ingilizce bir exception fırlatır.
3) Birde belirtmekte fayda var Checked bir Boolean tiptir. ve Boolean tiplerin True olduğunu saptamak için if Radio1.Checked = True Then yazmanıza gerek yok doğruca if Radio1.Checked Then yazarak kullanabilirsiniz. Ayrıca Boolean da 0 (sıfır) dışında ki Tam Sayılar True dir denemek isterseniz aşağıdaki kodu çalıştırabilirsiniz
4) Size tavsiyem Delphi'nin sınıfları bileşenleri üzerinde birtakım denemeler demolar yaparak aşina olmalısınız Bu size çok faydalı olur. 
2) instance.Create; diyerek sınıf oluşturulmaz. instance := TSinif.Create; diyerek olusturulur Form2.Create kodu hataya sebebiyet verir çünkü siz yapısal olarak oluşmuş bir formu kendi üzerine tekrar oluşturuyorsunuz formda nesneler bulunacagından bulunan bileşen isimleri zaten vardır diye ingilizce bir exception fırlatır.
3) Birde belirtmekte fayda var Checked bir Boolean tiptir. ve Boolean tiplerin True olduğunu saptamak için if Radio1.Checked = True Then yazmanıza gerek yok doğruca if Radio1.Checked Then yazarak kullanabilirsiniz. Ayrıca Boolean da 0 (sıfır) dışında ki Tam Sayılar True dir denemek isterseniz aşağıdaki kodu çalıştırabilirsiniz
Kod: Tümünü seç
var
b:Boolean;
begin
b := Boolean(9);
showmessage(BoolToStr(b,true))
