Bir form create edilmiş mi edilmemişmi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Bir form create edilmiş mi edilmemişmi

Mesaj gönderen tuanna »

Bir form create edilmiş mi edilmemişmi
Siz hayal edin...Biz yapalım TuannaSoft...
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Test alanına yazayım derken, buraya yazdığınızı düşünüyorum. Eğer yanılıyorsam soru sorarken bu kadar ekonomik olmayın lütfen. Cevap olarak benzer bir cevap alabilirsiniz;

"Bir form create edilmemiş."
En son doganzorlu tarafından 18 Eyl 2005 01:35 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

hocam formun hikayesini yazamazdım ya...
Siz hayal edin...Biz yapalım TuannaSoft...
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

Değişik birkaç durum olabilir o nedenle söyledim. Misal bir form için 4 tane handle tanımlarsınız. Handle ın nil olup olmadığına bakarsınız ama aynı handle ın iki kez kullanılmasını engellemiş olursunuz. Ya da global bir handle tutarsınız nil mi bakarsınız o zaman bir form create i kontrol altında tutarsınız. Ya da formun çağırıldığı her formda bir local değişkenle referans ediliyorsa, bir döngü ile açık pencereleri dolaşır bakarsınız. Açıksa açmazsınız. Sizin senaryonuz nasıl birşey ?
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

hocam böle bir çok yol var form create edilince bir degeskene bir seyler yazıp bakarsın ben onu istemiyorum ...koskoca delphinin böle bir komudu yokmu şimdi?
Siz hayal edin...Biz yapalım TuannaSoft...
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

assigned(formismi)

size o formun create edilip edilmediğini gösterir.
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

iste bu
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

assigned olmaz, zira referansın bir yer gösterip göstermediğini kontrol ediyorsunuz. Nil kontrolünden farklı değil. Mesela birkaç değişik formdan aynı formu çağırıyorsunuz. Herbirinin içinde de bir forma ait referans (handle) tanımlı.

Birinci formda butona bastınız ve bahse konu ortak formu local referansa atadınız. Artık o form içinde bir daha ortak formu açmamak adına assigned kullanabilirsiniz. Fakat ikinci formdaki local referans henüz bir obje göstermediğinden onu kontrol ettiğinizde ortak form açık olarak görünmeyecektir.
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

doganzorlu yazdı:Selam,

assigned olmaz, zira referansın bir yer gösterip göstermediğini kontrol ediyorsunuz. Nil kontrolünden farklı değil. Mesela birkaç değişik formdan aynı formu çağırıyorsunuz. Herbirinin içinde de bir forma ait referans (handle) tanımlı.

Birinci formda butona bastınız ve bahse konu ortak formu local referansa atadınız. Artık o form içinde bir daha ortak formu açmamak adına assigned kullanabilirsiniz. Fakat ikinci formdaki local referans henüz bir obje göstermediğinden onu kontrol ettiğinizde ortak form açık olarak görünmeyecektir.
Evet doğru...
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

doganzorlu yazdı:Selam,

assigned olmaz, zira referansın bir yer gösterip göstermediğini kontrol ediyorsunuz. Nil kontrolünden farklı değil. Mesela birkaç değişik formdan aynı formu çağırıyorsunuz. Herbirinin içinde de bir forma ait referans (handle) tanımlı.

Birinci formda butona bastınız ve bahse konu ortak formu local referansa atadınız. Artık o form içinde bir daha ortak formu açmamak adına assigned kullanabilirsiniz. Fakat ikinci formdaki local referans henüz bir obje göstermediğinden onu kontrol ettiğinizde ortak form açık olarak görünmeyecektir.
3 tane form oluşturdum.

1. form diğer iki formda ortak olarak kullanılıyor.
2.formda butona tıklandığı zaman 1. form create ediliyor.
3.formda butona tıklatığım zaman assigned kontrolü yapıyorum.

3.formda bulunan butona tıkladığımda assigned değeri false dönüyor.
2. formdaki butona tıklıyorum ve form oluşturuluyor.
3. formda assigned komutunu kullandığımda form oluşturulmuş olarak gözüküyor

Şimdi sorun nerede?
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

Ali Erdoğan yazdı: 3 tane form oluşturdum.

1. form diğer iki formda ortak olarak kullanılıyor.
2.formda butona tıklandığı zaman 1. form create ediliyor.
3.formda butona tıklatığım zaman assigned kontrolü yapıyorum.

3.formda bulunan butona tıkladığımda assigned değeri false dönüyor.
2. formdaki butona tıklıyorum ve form oluşturuluyor.
3. formda assigned komutunu kullandığımda form oluşturulmuş olarak gözüküyor

Şimdi sorun nerede?
Pekii 1. Forma bir adet label atıp diğer her iki formdan bu labele değer gönder ... Diğer formlara ayrıca butonlar koyup Labelin Captionunu sorgularmısın... Mesela showmessage ile... Fakat Labele diğer formlardan ayrı ayrı değer ver mesela Label1.Caption:='Deneme1'; diğerinden de deneme2 olarak sonra diğer formlar açıkken bu değerleri kontrol ettir... Bakalım ne olucak... :wink:
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

1. forma bir label koydum
2. forma iki tane buton koydum

label yaz : tıklandığında merhaba ben ikiyim yazıyor
label oku : tıklandığında 1.formdaki label in değerini gösteriyor

3.forma bi tane buton koydum
label yaz : tıklandığında merhaba ben form üçüm yazıyor.

Sonra uygulamayı çalıştırdım.

2. formu açıp label yaz tuşuna bastım.
label oku tuşuna bastım "merhaba ben ikiyim"

3. formu açtım
label yaz tuşuna bastım

sonra 2. forma dönüp label oku tuşuna bastım:"merhaba ben üçüm"

bunda sorunlu olan ne var şimdi.

formları açarken

if not assigned(form) then

deyip create ediyorum.
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

var
frmmain: Tfrmmain;
frmmain1: Tfrmmain;
frmmain3: Tfrmmain;
Begin
if not asigned(frmmain) then frmMain := Tfrmmain.create(self);
if not asigned(frmmain1) then frmMain := Tfrmmain.create(self);
if not asigned(frmmain3) then frmMain := Tfrmmain.create(self);
End.


Burada kaç tane pencere açılır ? 3 tane açılır.

var
frmmain: Tfrmmain;
Begin
if not asigned(frmmain) then frmMain := Tfrmmain.create(self);
if not asigned(frmmain) then frmMain := Tfrmmain.create(self);
if not asigned(frmmain) then frmMain := Tfrmmain.create(self);
End.

Burada kaç pencere açılır ? 1 tane.

Deneyemedim zira ben delphi ile program yazmadığımdan işyerinde ve kendi makinamda delphi yok. Ancak kızımın makinasında kurulu delphi 7 yi kullanmama izin verdiğinde deneyebiliyorum. Denedikten sonra durumun bu şekilde olduğunu göreceksiniz.
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Aynı formu neden üç farklı değişkene referanse ettiniz anlamadım.

Ben:

Kod: Tümünü seç

if not assigned(form) then
application.createform(tform,form);
form.show();
Kullanıyorum.Hiçbir sorun olmuyor.Form yinilenmiyor.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Bahsedilmek istenen sorun aslında şu olmalı !:

Kod: Tümünü seç

Form1:= TForm1.Create(nil);
Bu şekilde formu yarattıktan sonra Assigned(Form1) kontrolü yaptığımızda True sonucu dönecektir. Ancak Formu free ettikten sonra Form1 değerini nil yapmazsak Assigned kontrolünde tekrar True dönecektir.

Yani.

Kod: Tümünü seç

Form1.Free;
Yaptığımızda Form1 in içi halen pointer referansı ile dolu olacak, o halde Free den sonra Form1:= nil yapmalıyız ki kontrolden sonra doğru sonuç alalım.

Ben genelde FreeAndNil proc. unu kullanırım. Bu proc. Form'u free ettikten sonra değere nil ataması yapar.

Kod: Tümünü seç

FreeAndNil(Form1);
Bu şekildeki kullanım ile Form yaratılmış mı yaratılmamış mı düzgün biçimde anlayabiliriz.

@dogansimsek ya bu formun 3 kopyası olsaydı üzerinden giderek yanıt vermiş. O zaman da Form pointer'larını tutan değişkenlerin Assigned kontrolünü yapmamız yetecektir veya Form pointer'larını bir TList'te tutarak işlemleri gerçekleştirebiliriz. Ben bir problem göremiyorum.
Cevapla