Butonların bazen tıklamaması

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
enesharun
Üye
Mesajlar: 18
Kayıt: 17 Eki 2014 10:46

Butonların bazen tıklamaması

Mesaj gönderen enesharun » 04 Nis 2019 07:33

Merhabalar arkadaşlar,

Hazırladığım bir proje mevcut ve şuan iki yerde kullanılıyor. Fakat işyerinde yoğunluk olduğu zaman program kilitleniyor. Bazen butonlar tıklıyor ama butonun açması gereken ekranlar hiç açılmıyor, sadece butona tıklandığını fark edebiliyoruz. Sorunu bir türlü çözemedim. buton altındaki kodlarım o an çalışmıyor.

Acil desteğe ihtiyacım var.
NOT: butonların açacağı ekranların kodları örneğin şu şekilde:

Application.createform(TSatisEkran, SatisEkran);
SatisEkran.showmodal;

Burada sıkıntı olabilir mi?

Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2147
Kayıt: 12 Haz 2003 03:05
Konum: merkez camii yanı

Re: Butonların bazen tıklamaması

Mesaj gönderen freeman35 » 04 Nis 2019 10:21

SatisEkran formunun oncreate,show,active vs eventlerini kontrol et, db bağlantılarını query lerini vs.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!

enesharun
Üye
Mesajlar: 18
Kayıt: 17 Eki 2014 10:46

Re: Butonların bazen tıklamaması

Mesaj gönderen enesharun » 04 Nis 2019 10:43

cevabınız için teşekkürler. Fakat bu sorunu sadece bu yazdığım Satış ekranında yaşamıyorum
Formları create edip show yaptıktan sonra nil yapmam gerekir mi her seferinde?
Application.createform(TSatisEkran, SatisEkran);
SatisEkran.showmodal;
SatisEkran.nil; ya da ( freeandnil(SatisEkran) gibi )

Kullanıcı avatarı
ihalilcoban
Üye
Mesajlar: 119
Kayıt: 10 Ara 2015 10:39
Konum: Gaziantep

Re: Butonların bazen tıklamaması

Mesaj gönderen ihalilcoban » 04 Nis 2019 04:41

Merhaba.

Kod kullanım şekliniz bana yanlış geldi. Sebebi; kullanım şekliniz, butona her tıklandığında formu oluşturacak şekilde. Kendi kullandığım yapıyı örnek olarak ekliyorum. Kendinize uyarlarsınız.

Kod: Tümünü seç

if Kursiyer_Karti = Nil Then
Kursiyer_Karti := TKursiyer_Karti.Create(self);
DM.KURSIYER.Append;
Kursiyer_Karti.ShowModal;
FormClose için;

Kod: Tümünü seç

 Action:=Cafree;
 Kursiyer_Karti:= nil;

Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2147
Kayıt: 12 Haz 2003 03:05
Konum: merkez camii yanı

Re: Butonların bazen tıklamaması

Mesaj gönderen freeman35 » 06 Nis 2019 10:57

@ihalilcoban nil kodunu FormDestroy a eklemeni tavsiye ederim. Close event inde henüz form free edilmemiş durumdadır. Ayrıca if değerini uygulama ilk çalıştığında, nil ile bir default değer atamak en doğru yazım şekli olur.
@enesharun yazdığım eventlerdeki kodlarını incele demekte ısrar ediyorum. Debug et geçikmelerin çoğu db bağlantılarında, sql yazılımlarında yani sonuçlarında, ard arda sürekli event tetiklenmelerinde vs bir sürü sebep ve olasılık var. Buda tasarım demek. Tasarım herkes görsellik olarak algılıyor, ama programcılık budur. Her class ı bilmek ve bunları bağladığında hangi kod nasıl çalışır, kurgulamak gerek. İkinci mesajında aynı şeyi yazmışsın. Show. show un yaptığı sadece ekrana form ve üzerindekileri gösterir ve ilgili eventleri tetikletir.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!

ertank
Üye
Mesajlar: 1230
Kayıt: 11 Eyl 2015 11:45

Re: Butonların bazen tıklamaması

Mesaj gönderen ertank » 09 Haz 2019 11:33

enesharun yazdı:
04 Nis 2019 07:33
Merhabalar arkadaşlar,

Hazırladığım bir proje mevcut ve şuan iki yerde kullanılıyor. Fakat işyerinde yoğunluk olduğu zaman program kilitleniyor. Bazen butonlar tıklıyor ama butonun açması gereken ekranlar hiç açılmıyor, sadece butona tıklandığını fark edebiliyoruz. Sorunu bir türlü çözemedim. buton altındaki kodlarım o an çalışmıyor.

Acil desteğe ihtiyacım var.
NOT: butonların açacağı ekranların kodları örneğin şu şekilde:

Application.createform(TSatisEkran, SatisEkran);
SatisEkran.showmodal;

Burada sıkıntı olabilir mi?
Merhaba,

Sorununuz sadece form oluşturma kaynaklı olmayabilir. Genel olarak uygulamanızı incelemeniz ve varsa kaydettiğiniz log kayıtlarını incelemeniz grekir.

Ancak, tamamen detay bilmeden yapabileceğim tahmin, uygulamanızın her buton basıldığında bir miktar daha fazla hafıza kaçağı oluşturduğu ve belli bir süre sonra işletim sistemi limitlerine dayanarak SWAP dosyası kullanımı vb sebebi ile tıkanmalar yaşadığınız yönünde.

Daha önce tavsiye edildiği gibi Form oluşturma kodunuz "tehlikeli". Mevcut yöntemi tüm form oluşturmalarınız için aşağıdaki gibi değiştirmenizi tavsiye ederim.

Kod: Tümünü seç

var
  Form: TSatisEkran;
begin
  Form := TSatisEkran.Create(Self);
  try
    Form.ShowModal();
  finally
    Form.Free();
  end;
Yukarıdaki kod örneği SatisEkran formunuzda herhangi bir değişiklik yapmanıza gerek kalmadan form bileşeni sebebi ile hafıza kaçağı riskini ortadan kaldırır. Ayrıca riskli olan ve tavsiye edilmeyen "direk form adı kullanımı" yapmamış olursunuz.

Ayrıca, Eğer "yeni" olarak tabir edilen Delphi sürümlerinden birisini kullanıyor iseniz aşağıdaki değişkeni "geliştirme zamanında" açıp uygulamanızı test eder iken aynı zamanda hafıza kaçağı olup olmadığını da test etmiş olabilirsiniz.

Kod: Tümünü seç

program Project2;

uses
  Vcl.Forms,
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3};

{$R *.res}

begin
  ReportMemoryLeaksOnShutdown := True;  // <=== TRUE yapılması gereken global değişken
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.
NOT: Project -> View Source menüsünden yukarıdaki proje koduna ulaşabilirsiniz.

enesharun
Üye
Mesajlar: 18
Kayıt: 17 Eki 2014 10:46

Re: Butonların bazen tıklamaması

Mesaj gönderen enesharun » 30 Eyl 2019 12:54

Hepinize teşekkür ederim. Formların action:=close ve form1:=nil olayları ile destroy ve close olaylarında çözüldü.

Cevapla