Ana formdan açılan form ikinci açılışta ilk haline dönmesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
dpcmsx
Üye
Mesajlar: 22
Kayıt: 06 Eyl 2011 04:25

Ana formdan açılan form ikinci açılışta ilk haline dönmesi

Mesaj gönderen dpcmsx »

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.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Ana formdan açılan form ikinci açılışta ilk haline dönme

Mesaj gönderen brs »

Selam


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...
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Ana formdan açılan form ikinci açılışta ilk haline dönme

Mesaj gönderen anonymousdelphicoder »

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

Kod: Tümünü seç

Form2 := TForm2.Create(Application);
Form2.ShowModal;
Form2.Free;
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

Kod: Tümünü seç

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
daha sonra butonun altına click olayına gel ve

Kod: Tümünü seç

Form2 := TForm2.Create(Application);
Form2.Show;
Kolay gelsin.
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Ana formdan açılan form ikinci açılışta ilk haline dönme

Mesaj gönderen anonymousdelphicoder »

Ayrıca "brs" kardeşimizin söylediğini düzeltmek amacı ile söylüyorum.
Form her açıldığında eski veriler "gider" yani sıfırdan açılmış gibi olur...
cümlesi doğru değildir siz formu Free etmediğiniz sürece hiç birşey gitmez.
Ayrıca

Kod: Tümünü seç

Form2:=TForm2.Create(Application)
kodunu çalıştırdıkdan sonra Form2 instance ini Free etmeden tekrar olarak

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.
dpcmsx
Üye
Mesajlar: 22
Kayıt: 06 Eyl 2011 04:25

Re: Ana formdan açılan form ikinci açılışta ilk haline dönme

Mesaj gönderen dpcmsx »

Çok teşekkür ederim, gün içinde verdiğiniz değerli örnekleri uygulayacağı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;
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.
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Ana formdan açılan form ikinci açılışta ilk haline dönme

Mesaj gönderen anonymousdelphicoder »

Siz radio butonlara tam olarak ne yapmak istediginizi soylerseniz yardimci olabilirim
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: Ana formdan açılan form ikinci açılışta ilk haline dönme

Mesaj gönderen tayipk »

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.
dpcmsx
Üye
Mesajlar: 22
Kayıt: 06 Eyl 2011 04:25

Re: Ana formdan açılan form ikinci açılışta ilk haline dönme

Mesaj gönderen dpcmsx »

If radiobutton1.cheked=true then
Begin
Radiobutton1.cheked:=false;
End;
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.

İş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;
İle başlatınca istediğim oldu. Tek sorun, Form2 yeniden oluşturulduğu için Form2.Create ile verdiğim düzenlemeler exception hatasına neden oldu. Ancak onları Form özelliklerinden kalıcı yaptım ve gerek kalmadı. Kısaca istediğim oldu ve sevgili üyelerin yardımları sonucu sorunum çözümlendi. :)
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Ana formdan açılan form ikinci açılışta ilk haline dönme

Mesaj gönderen anonymousdelphicoder »

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

Kod: Tümünü seç

var
b:Boolean;
begin
b := Boolean(9);
showmessage(BoolToStr(b,true))
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. :)
Cevapla