Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Editler arası geçişte uygulama çökme sorunu
#11
(13-01-2022, Saat: 01:18)codder71 Adlı Kullanıcıdan Alıntı:
(12-01-2022, Saat: 13:32)vedat35 Adlı Kullanıcıdan Alıntı: kodu onkeyup a veya onchange e yazarak deneyin.

Hocam onchangeyi denedim olmuyor. onkeyup ta ise silme tuşuna bastığımızda editlerden atlıyor maalesef istediğim gibi olmuyor

(12-01-2022, Saat: 12:33)mrmarman Adlı Kullanıcıdan Alıntı: Bir de şöyle dener misiniz ? Aslında verilen tüm kodlar geçerli ama bir ihtimal daha var diye değerlendiriyorum.

öncelikle her (4) edit'in de OnChangeTracking eventlerini aynı ortak bu aşağıdakine bağlayın. Tek event dördüne de yetecektir. 

- Neden böyle yaptığıma gelince ( thread eklemekten kasıt), yeni bir thread oluşmak için minik bir bekleme oluyor. 
- Bu bekleme sistemi kasmadığı gibi işlemler arasında vakit tanıyor. 
- Belki de sizin projedeki bu durumda bir nefeslik zamana ihtiyaç duyuluyordur da ondan çöküyordur kim bilir. Denemeye değer buldum... 



procedure TfrmSG_Mail_Dogrula.iMail2ChangeTracking(Sender: TObject);
  procedure SetFocusThread(iMail : TEdit);
  begin
    TThread.CreateAnonymousThread( procedure
    begin
      TThread.Synchronize( nil, procedure
        begin
          iMail.SetFocus;
        end );
    end ).Start;
  end;
begin
  if (Sender = iMail2) and (Length(iMail2.Text) = 1) then SetFocusThread(iMail3);
  if (Sender = iMail3) and (Length(iMail3.Text) = 1) then SetFocusThread(iMail4);
  if (Sender = iMail4) and (Length(iMail4.Text) = 1) then SetFocusThread(iMail5);
end;



Hocam çok teşekkür ederim cevabınız için bu yöntem işe yaradı fakat girdiğim verileri karıştırıyor maalesef nedenini anlayamamdım.

onkeyup da çökmemesine sevindim, şimdi senin istediğin gibi olması için sana yolu aşağıda açıklıyorum.

bu kodla basılan tuşun karakter kodunu alacaksın.
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
showmessage( ord(key).ToString );
end;


bu kodlada basılan tuş istediğin tuş kodu değilse sonraki edite geçirebilirsin.
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
showmessage( ord(key).ToString );

if (key<>8) or  // eğer basılan tuş silme tuşu değilse
   (key<>27) then // eğer basılan tuş esc değilse
begin
  // bir sonraki edite focus et.
  edit_xxx.setfocus;
end;

end;
Cevapla
#12
@vedat35 Bu şekilde tuşları belirlemek ne kadar doğru bilemedim.
örneğin
Delete tuşuna basarsa yada CTRL, Shift, Alt , Win bu durumda ne olacak
Bunun gibi durumlarda içerik ve boyut kontrolü yapmak daha doğru olacaktır diye düşünüyoruım
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#13
(12-01-2022, Saat: 12:33)mrmarman Adlı Kullanıcıdan Alıntı: Bir de şöyle dener misiniz ? Aslında verilen tüm kodlar geçerli ama bir ihtimal daha var diye değerlendiriyorum.

öncelikle her (4) edit'in de OnChangeTracking eventlerini aynı ortak bu aşağıdakine bağlayın. Tek event dördüne de yetecektir. 

- Neden böyle yaptığıma gelince ( thread eklemekten kasıt), yeni bir thread oluşmak için minik bir bekleme oluyor. 
- Bu bekleme sistemi kasmadığı gibi işlemler arasında vakit tanıyor. 
- Belki de sizin projedeki bu durumda bir nefeslik zamana ihtiyaç duyuluyordur da ondan çöküyordur kim bilir. Denemeye değer buldum... 



procedure TfrmSG_Mail_Dogrula.iMail2ChangeTracking(Sender: TObject);
  procedure SetFocusThread(iMail : TEdit);
  begin
    TThread.CreateAnonymousThread( procedure
    begin
      TThread.Synchronize( nil, procedure
        begin
          iMail.SetFocus;
        end );
    end ).Start;
  end;
begin
  if (Sender = iMail2) and (Length(iMail2.Text) = 1) then SetFocusThread(iMail3);
  if (Sender = iMail3) and (Length(iMail3.Text) = 1) then SetFocusThread(iMail4);
  if (Sender = iMail4) and (Length(iMail4.Text) = 1) then SetFocusThread(iMail5);
end;



Hocam bu kodu gerçek cihazda deneyince problemsiz çalıştı teşekkürler.

(13-01-2022, Saat: 13:22)vedat35 Adlı Kullanıcıdan Alıntı:
(13-01-2022, Saat: 01:18)codder71 Adlı Kullanıcıdan Alıntı: Hocam onchangeyi denedim olmuyor. onkeyup ta ise silme tuşuna bastığımızda editlerden atlıyor maalesef istediğim gibi olmuyor


Hocam çok teşekkür ederim cevabınız için bu yöntem işe yaradı fakat girdiğim verileri karıştırıyor maalesef nedenini anlayamamdım.

onkeyup da çökmemesine sevindim, şimdi senin istediğin gibi olması için sana yolu aşağıda açıklıyorum.

bu kodla basılan tuşun karakter kodunu alacaksın.
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
showmessage( ord(key).ToString );
end;


bu kodlada basılan tuş istediğin tuş kodu değilse sonraki edite geçirebilirsin.
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
showmessage( ord(key).ToString );

if (key<>8) or  // eğer basılan tuş silme tuşu değilse
   (key<>27) then // eğer basılan tuş esc değilse
begin
  // bir sonraki edite focus et.
  edit_xxx.setfocus;
end;

end;

Hocam diğer tuşlarda hiç tepki vermiyor sadece silme tuşunda tetikleniyor maalesef
Cevapla
#14
(13-01-2022, Saat: 15:18)codder71 Adlı Kullanıcıdan Alıntı:
(12-01-2022, Saat: 12:33)mrmarman Adlı Kullanıcıdan Alıntı: Bir de şöyle dener misiniz ? Aslında verilen tüm kodlar geçerli ama bir ihtimal daha var diye değerlendiriyorum.

öncelikle her (4) edit'in de OnChangeTracking eventlerini aynı ortak bu aşağıdakine bağlayın. Tek event dördüne de yetecektir. 

- Neden böyle yaptığıma gelince ( thread eklemekten kasıt), yeni bir thread oluşmak için minik bir bekleme oluyor. 
- Bu bekleme sistemi kasmadığı gibi işlemler arasında vakit tanıyor. 
- Belki de sizin projedeki bu durumda bir nefeslik zamana ihtiyaç duyuluyordur da ondan çöküyordur kim bilir. Denemeye değer buldum... 



procedure TfrmSG_Mail_Dogrula.iMail2ChangeTracking(Sender: TObject);
  procedure SetFocusThread(iMail : TEdit);
  begin
    TThread.CreateAnonymousThread( procedure
    begin
      TThread.Synchronize( nil, procedure
        begin
          iMail.SetFocus;
        end );
    end ).Start;
  end;
begin
  if (Sender = iMail2) and (Length(iMail2.Text) = 1) then SetFocusThread(iMail3);
  if (Sender = iMail3) and (Length(iMail3.Text) = 1) then SetFocusThread(iMail4);
  if (Sender = iMail4) and (Length(iMail4.Text) = 1) then SetFocusThread(iMail5);
end;



Hocam bu kodu gerçek cihazda deneyince problemsiz çalıştı teşekkürler.

(13-01-2022, Saat: 13:22)vedat35 Adlı Kullanıcıdan Alıntı: onkeyup da çökmemesine sevindim, şimdi senin istediğin gibi olması için sana yolu aşağıda açıklıyorum.

bu kodla basılan tuşun karakter kodunu alacaksın.
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
showmessage( ord(key).ToString );
end;


bu kodlada basılan tuş istediğin tuş kodu değilse sonraki edite geçirebilirsin.
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
showmessage( ord(key).ToString );

if (key<>8) or  // eğer basılan tuş silme tuşu değilse
   (key<>27) then // eğer basılan tuş esc değilse
begin
  // bir sonraki edite focus et.
  edit_xxx.setfocus;
end;

end;

Hocam diğer tuşlarda hiç tepki vermiyor sadece silme tuşunda tetikleniyor maalesef

yukarıda açıkladım ya göz atmamış veya anlamamışsınız sanırım, hangi tuşlara tepki vermek istiyorsan if alanına or ile yazman gerekiyor,
önce showmessage ile o tuşun kodunu al sonra if alanına ekle bukadar.

eğer o tuşa basıldığında bir sonraki edite geçmemesini istiyorsan, o tuşun kendi görevini yapmasını istiyorsan, tuş kodunu al ve if alanına girin.

(13-01-2022, Saat: 13:42)adelphiforumz Adlı Kullanıcıdan Alıntı: @vedat35 Bu şekilde tuşları belirlemek ne kadar doğru bilemedim.
örneğin
Delete tuşuna basarsa yada CTRL, Shift, Alt , Win bu durumda ne olacak
Bunun gibi durumlarda içerik ve boyut kontrolü yapmak daha doğru olacaktır diye düşünüyoruım

spesyal tuşları(ctrl, alt, shift gibi) zaten keyb hook yapmadan catch edemezsiniz,
bahsettiğiniz tuş kombinasyonları ile kullanılan tuşun kodunu ord ile alıp if alanına yazılırsa, o tuşlar işlevlerini geri kazanacakdır.

normalde bu tarz 1 karakter alanına sayısal doğrulama kodu girerler, misal sms ile gelen kod vs.

kanımca başka bir sorun varsa, sorunun örneklendirilmesi gerekir, tüm olasılıkları elbette ön görmek zordur, o esnadaki normal kullanım için çözüm sunuyorsa, bir sonraki soruna kadar kullanılabilir.
Cevapla
#15
(14-01-2022, Saat: 12:10)vedat35 Adlı Kullanıcıdan Alıntı:
(13-01-2022, Saat: 15:18)codder71 Adlı Kullanıcıdan Alıntı: Hocam bu kodu gerçek cihazda deneyince problemsiz çalıştı teşekkürler.


Hocam diğer tuşlarda hiç tepki vermiyor sadece silme tuşunda tetikleniyor maalesef

yukarıda açıkladım ya göz atmamış veya anlamamışsınız sanırım, hangi tuşlara tepki vermek istiyorsan if alanına or ile yazman gerekiyor,
önce showmessage ile o tuşun kodunu al sonra if alanına ekle bukadar.

eğer o tuşa basıldığında bir sonraki edite geçmemesini istiyorsan, o tuşun kendi görevini yapmasını istiyorsan, tuş kodunu al ve if alanına girin.

(13-01-2022, Saat: 13:42)adelphiforumz Adlı Kullanıcıdan Alıntı: @vedat35 Bu şekilde tuşları belirlemek ne kadar doğru bilemedim.
örneğin
Delete tuşuna basarsa yada CTRL, Shift, Alt , Win bu durumda ne olacak
Bunun gibi durumlarda içerik ve boyut kontrolü yapmak daha doğru olacaktır diye düşünüyoruım

spesyal tuşları(ctrl, alt, shift gibi) zaten keyb hook yapmadan catch edemezsiniz,
bahsettiğiniz tuş kombinasyonları ile kullanılan tuşun kodunu ord ile alıp if alanına yazılırsa, o tuşlar işlevlerini geri kazanacakdır.

normalde bu tarz 1 karakter alanına sayısal doğrulama kodu girerler, misal sms ile gelen kod vs.

kanımca başka bir sorun varsa, sorunun örneklendirilmesi gerekir, tüm olasılıkları elbette ön görmek zordur, o esnadaki normal kullanım için çözüm sunuyorsa, bir sonraki soruna kadar kullanılabilir.
Hocam cevabınız için teşekkürler. if şartı ile deneme yapar sonucu burdan yazarım.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Tüm Platformlar için Hızlı uygulama Geliştirme - Tüm Örnek Uygulamalar RAD Coder 5 194 09-01-2022, Saat: 21:52
Son Yorum: quiet1day
  Uygulama içi mesajlaşma mantığı codder71 21 928 08-01-2022, Saat: 22:25
Son Yorum: codder71
  RestClient SSL Sorunu tmrksmt 2 135 08-12-2021, Saat: 18:34
Son Yorum: sabanakman
  Delphi Fmx Frameler arası geçişte frame tamamen kapanmıyor vedat33 11 494 16-11-2021, Saat: 16:18
Son Yorum: gbg
  OrangeUI Delphi 11 Sorunu elixir84 3 136 11-11-2021, Saat: 17:34
Son Yorum: RAD Coder



Konuyu Okuyanlar: 1 Ziyaretçi