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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(04-04-2019, Saat: 15:57)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız....
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
  Moduler Programlama Hakkinda TheEAK 4 123 Dün, Saat: 10:43
Son Yorum: TheEAK
  Fonksiyon içinde create edilenler seci20 8 381 22-07-2019, Saat: 15:38
Son Yorum: Tuğrul HELVACI
  IDE çoklu monitör kullanımı hakkında adelphiforumz 2 229 10-07-2019, Saat: 12:45
Son Yorum: adelphiforumz
  GarantiBBVA SFTP işlemleri hakkında adelphiforumz 4 355 09-07-2019, Saat: 10:43
Son Yorum: r3n4m3
  Create edilen button olay ekleme. KUNTAY 4 394 26-05-2019, Saat: 15:19
Son Yorum: KUNTAY



Konuyu Okuyanlar: 1 Ziyaretçi