Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Formların bazen create olmaması ve butonların tıklanmaması hakkında
#11
(05-04-2019, Saat: 07:59)Bahadir.Alkac Adlı Kullanıcıdan Alıntı:
(04-04-2019, Saat: 15:57)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: ...
Ayrıca ben form oluşturma işlemini aşağıdaki gibi yapıyorum:

  try
    frmTest.Show; // Bu form yok ise Access Violation hatası oluşur ve akış except bloğuna geçer; form var ise Show edilmiş olur.
  except
    frmTest := TFrmTest.Create(Application);
    frmTest.Show;
  end;
...

Merhaba,

Benim tahminime göre @Tuğrul HELVACI kendi kodlarında buna dikkat ediyordur, ama bu örgüyü kendi projelerinde uygulamak isteyen arkadaşlara ufak bir uyarım var. Eğer frmTest formununun OnShow/OnActivate eventlerinde yazılı kodlar varsa ve o kodlar hata verecek olursa bu kod maalesef sizi yanlış yerlere yönlendirecek, çünkü kod "henüz frmTest nesnesini yaratmadığım için hata oluştu" kabulüne göre yazılmış (@Tuğrul HELVACI da zaten comment'te yazmış).

Bir de çok basit bir If satırı ile yapılabilecek bir kontrolü try/except gibi işlemci ve işletim sistemi açısından maliyeti çok yüksek bir örgüyle kontrol etmek çok iyi bir fikir değil. Bu kodu şu şekilde yazdığınızda işler daha hızlı olacaktır:

if not Assigned(frmTest) then
 frmTest := TfrmTest.Create(Application);
frmTest.Show;

Ama illa try/except kullanacaksanız da except kısmını bu şekilde bırakmayın. En kötü durumda aşağıdaki gibi yazın:

  try
    frmTest.Show; // Bu form yok ise Access Violation hatası oluşur ve akış except bloğuna geçer; form var ise Show edilmiş olur.
  except
    on E: Exception do
    begin    
        {$IFDEF DEBUG}
         // DEBUG modda derlediğinizde hatayı Delphi IDE'sine gönderkin ki, gelen hata gerçekten de sizin beklediğiniz hata mı emin olun.
         OutputDebugString(PChar(E.Message)); 
        {$ENDIF}
        
        frmTest := TFrmTest.Create(Application);
        frmTest.Show;
     end;
  end;

İyi çalışmalar

Merhaba @Bahadir.Alkac bey, Assigned ile yapacağınız kontrolde programcının asla TForm türündeki pointer'ı nil'e eşitlemeyi unutmaması gerekir. Unutur ise ve form daha önce hafızadan silinmiş ise sizin kodunuz da Access Violation verir ve formunuz görüntülenememiş olur. Bu nedenle try/except bloğu kullanıyorum. Sizin de bahsettiğiniz gibi bu işin kısmi maliyetinin bilincindeyim.

Buradan yeniden FreeAndNil'e de atıfta bulunup iyiki varsın diyorum Shy
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#12
Her birinize ayrı ayrı teşekkür ederim. Verdiğiniz bilgileri uyarlayacağım. Kilitlenme konusunda karşılaşılan bir durumda şu oldu akşam: Program kilitlendi, mouse ile butonların üzerine gelindiğinde mouse simgesi istediğimiz şekilde el simgesine dönüyor ama tıklanmıyor, ayrıda müşterimizin dediğine göre windows'un başlat çubuğunda bulunan simgelere (chrome, internet explorer, office simgeleri) de giriş yapılamamış. ctrl+alt+del ile programı kırdıktan sonra herşey çalışmış. Bu konuda ne düşünüyorsunuz?

İyi çalışmalar.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi 7 raize componenet yüklemesi hakkında algoritma 3 124 31-03-2019, Saat: 19:42
Son Yorum: algoritma
  Xrp Designer hakkında ermanispir@gmail.com 0 115 23-03-2019, Saat: 10:37
Son Yorum: ermanispir@gmail.com
  delphi xe serileri hakkında. burak 2 212 21-02-2019, Saat: 22:52
Son Yorum: burak
Question Dosya okuma ve yazma hakkında dicle_gsm 6 329 06-02-2019, Saat: 18:06
Son Yorum: dicle_gsm
  Form create buton visible durumu Yeliz 6 387 01-02-2019, Saat: 14:07
Son Yorum: Yeliz



Konuyu Okuyanlar: 1 Ziyaretçi