Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Zaman aşımı kontrolü
#1
Selam programimda güvenlik için belli bir zaman işlem yapılmadığında açık formların hide olup login formun show olmasını istiyorum. Nasıl bir mantık yurutmeliyim. Zaman asimini nasıl kontrol edebilirim
Cevapla
#2
Merhaba,
Sürekli aktif olan bir formunuzun üzerine örneğin giriş formu yada kullanıyorsanız bir datamodul üzerine 1 adet Timer ve "Application Events" yerleştirin ve Application Events in OnMessage Eventine ağagıdaki kodu yazın.

 if (Msg.Message = WM_LBUTTONDOWN) or (Msg.Message = WM_RBUTTONDOWN) or (Msg.Message = WM_KEYDOWN) then
 TimeOut := 0;

Yukarıdaki kod eğer uygulama üzerinde bir mouse tıklaması veya tuş basımı olması durumunda TimeOut değişkenimizi sıfırlıyor. aksi durumda Timerın eventine yazdığımız kod ile TimeOut değeri 1 artıyor.

Form yada datamodulde aşağıdaki tanımlamayı yapın

const
 MaxTimeOutValue = 900; //900=15Dk  1200=20Dk

var
 TimeOut   : Integer=1;

Timer'ın OnTimer eventine aşağıdaki tanımlamayı yapın.

  Inc(TimeOut);
 if TimeOut >= MaxTimeOutValue - 120 then
 begin
   if not Assigned(SeClos) then  // Ekranda çıkış için bildirim gösterecek olan formumuz.
   SeClos:=TSeClos.Create(Application);
   SeClos.tm.Text := TimeToStr(StrToTime(SeClos.tm.Text) - StrToTime('00:00:01')); // Edit içerisinde kapanış için geri sayımı gösteriyoruz.
   SetForegroundWindow(SeClos.Handle);
   SeClos.Show;
 end;

 if TimeOut >= MaxTimeOutValue then
 begin
   LogKaydi('Uzun Süre İşlem Yapmadığı için Oturum Kapatıldı!');
   Application.Terminate;
 end;

SeClos formumuz ekranda geri sayımı gösteren formumuz. Bu form üzerindeki tamam butonu kullanılırsa süre sıfırlanır tekrar işlem yapılmadığı sürece sayaç artmaya başlar.

Ben burada uygulamanın tamamı ile kapanmasını tercih ettim sizde kapanması yerine açık formları gizlemeyi tercih edebilirsiniz. Bunun için bir Stringlist içinde her açılan formun bilgisini ekler kapatıldığında listeden çıkartırsınız. Eğer sayacımız max değerine ulaşırsa bu listedeki formları döngü ile Hide yapar giriş formunu gösterirsiniz. kullanıcı şifresini girdiğinde bu liste dolumu kontrolü yapar eğer dolu ise sırası ile tekrar ekranda gösterebilirsiniz.

Önemli : Hide yapmadan önce önceki kullanıcı bilgisinide tutmalısınız. Farklı bir kullanıcı bilgilerini girip açarsa görmemesi gereken ekranları görebilir. Smile
Listenin dolu olup olmaması ve yeni oturum açan kullanıcının aynı olup olmaması kontrol edilmeli!


İyi Çalışmalar.
Cevapla
#3
(11-08-2021, Saat: 09:26)ozcanm Adlı Kullanıcıdan Alıntı: Merhaba,
Sürekli aktif olan bir formunuzun üzerine örneğin giriş formu yada kullanıyorsanız bir datamodul üzerine 1 adet Timer ve "Application Events" yerleştirin ve Application Events in OnMessage Eventine ağagıdaki kodu yazın.

 if (Msg.Message = WM_LBUTTONDOWN) or (Msg.Message = WM_RBUTTONDOWN) or (Msg.Message = WM_KEYDOWN) then
 TimeOut := 0;

Yukarıdaki kod eğer uygulama üzerinde bir mouse tıklaması veya tuş basımı olması durumunda TimeOut değişkenimizi sıfırlıyor. aksi durumda Timerın eventine yazdığımız kod ile TimeOut değeri 1 artıyor.

Form yada datamodulde aşağıdaki tanımlamayı yapın

const
 MaxTimeOutValue = 900; //900=15Dk  1200=20Dk

var
 TimeOut   : Integer=1;

Timer'ın OnTimer eventine aşağıdaki tanımlamayı yapın.

  Inc(TimeOut);
 if TimeOut >= MaxTimeOutValue - 120 then
 begin
   if not Assigned(SeClos) then  // Ekranda çıkış için bildirim gösterecek olan formumuz.
   SeClos:=TSeClos.Create(Application);
   SeClos.tm.Text := TimeToStr(StrToTime(SeClos.tm.Text) - StrToTime('00:00:01')); // Edit içerisinde kapanış için geri sayımı gösteriyoruz.
   SetForegroundWindow(SeClos.Handle);
   SeClos.Show;
 end;

 if TimeOut >= MaxTimeOutValue then
 begin
   LogKaydi('Uzun Süre İşlem Yapmadığı için Oturum Kapatıldı!');
   Application.Terminate;
 end;

SeClos formumuz ekranda geri sayımı gösteren formumuz. Bu form üzerindeki tamam butonu kullanılırsa süre sıfırlanır tekrar işlem yapılmadığı sürece sayaç artmaya başlar.

Ben burada uygulamanın tamamı ile kapanmasını tercih ettim sizde kapanması yerine açık formları gizlemeyi tercih edebilirsiniz. Bunun için bir Stringlist içinde her açılan formun bilgisini ekler kapatıldığında listeden çıkartırsınız. Eğer sayacımız max değerine ulaşırsa bu listedeki formları döngü ile Hide yapar giriş formunu gösterirsiniz. kullanıcı şifresini girdiğinde bu liste dolumu kontrolü yapar eğer dolu ise sırası ile tekrar ekranda gösterebilirsiniz.

Önemli : Hide yapmadan önce önceki kullanıcı bilgisinide tutmalısınız. Farklı bir kullanıcı bilgilerini girip açarsa görmemesi gereken ekranları görebilir. Smile
Listenin dolu olup olmaması ve yeni oturum açan kullanıcının aynı olup olmaması kontrol edilmeli!


İyi Çalışmalar.
hocam mükemmel açıklamışsınız. çok  teşekkür ederim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  ADOConnection bağlantı kontrolü hakkında mxpain 1 542 26-05-2025, Saat: 11:49
Son Yorum: mrmarman
  idftp dosya kontrolü ercanskose 2 791 30-10-2024, Saat: 16:15
Son Yorum: ercanskose
  joystic kontrolu sadikacar60 2 1.052 13-08-2023, Saat: 20:34
Son Yorum: sadikacar60
  zaman aşımı info@guzelceker.com 4 1.562 25-11-2022, Saat: 08:32
Son Yorum: info@guzelceker.com
  TUBITAK Zaman Damgası ikurt07 11 4.946 28-01-2022, Saat: 10:56
Son Yorum: mkysoft



Konuyu Okuyanlar: 1 Ziyaretçi