Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Editler arası geçişte uygulama çökme sorunu
#1
Merhabalar

E-mail doğrulamak için yaptığım otp sisteminde otp kodunu rakam rakam kullanıcıya girdirmek istiyorum ve her girdiği rakamda bir editten diğerine otomatik geçiş sağlamaya çalışıyorum fakat geçiş yaptığı anda uygulama çöküyor. Bunun sebebi ne olabilir. Kodu altta paylaşıyorum. Not Rad studio 11 kullanıyorum.

procedure TfrmSG_Mail_Dogrula.iMail1ChangeTracking(Sender: TObject);
begin
 iMail2.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail2ChangeTracking(Sender: TObject);
begin
 iMail3.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail3ChangeTracking(Sender: TObject);
begin
 iMail4.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail4ChangeTracking(Sender: TObject);
begin
 iMail5.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail5ChangeTracking(Sender: TObject);
begin
 iMail6.SetFocus;
end;
Cevapla
#2
Merhaba,
Aşağıdaki şekilde deneyebilir misiniz?

procedure TfrmSG_Mail_Dogrula.iMail2ChangeTracking(Sender: TObject);
begin
 case Length(iMail2.Text) of
   1: iMail3.SetFocus;
 end;
end;

procedure TfrmSG_Mail_Dogrula.iMail3ChangeTracking(Sender: TObject);
begin
 case Length(iMail3.Text) of
   1: iMail4.SetFocus;
 end;
end;

procedure TfrmSG_Mail_Dogrula.iMail4ChangeTracking(Sender: TObject);
begin
 case Length(iMail4.Text) of
   1: iMail5.SetFocus;
 end;
end;

procedure TfrmSG_Mail_Dogrula.iMail5ChangeTracking(Sender: TObject);
begin
 case Length(iMail5.Text) of
   1: iMail6.SetFocus;
 end;
end;

procedure TfrmSG_Mail_Dogrula.iMail6ChangeTracking(Sender: TObject);
begin
 case Length(iMail6.Text) of
   1:Begin
       if (iMail2.Text+iMail3.Text+iMail4.Text+iMail5.Text+iMail6.Text)=LblCode.Text then
       Begin
         Button1.Enabled:=True;
         Button1.SetFocus;
       End;
     End;
 end;
end;

Editlerin MaxLength =1 yaparsanız daha sağlıklı olur.

İyi Çalışmalar.
Cevapla
#3
(10-01-2022, Saat: 08:49)ozcanm Adlı Kullanıcıdan Alıntı: Merhaba,
Aşağıdaki şekilde deneyebilir misiniz?

procedure TfrmSG_Mail_Dogrula.iMail2ChangeTracking(Sender: TObject);
begin
 case Length(iMail2.Text) of
   1: iMail3.SetFocus;
 end;
end;

procedure TfrmSG_Mail_Dogrula.iMail3ChangeTracking(Sender: TObject);
begin
 case Length(iMail3.Text) of
   1: iMail4.SetFocus;
 end;
end;

procedure TfrmSG_Mail_Dogrula.iMail4ChangeTracking(Sender: TObject);
begin
 case Length(iMail4.Text) of
   1: iMail5.SetFocus;
 end;
end;

procedure TfrmSG_Mail_Dogrula.iMail5ChangeTracking(Sender: TObject);
begin
 case Length(iMail5.Text) of
   1: iMail6.SetFocus;
 end;
end;

procedure TfrmSG_Mail_Dogrula.iMail6ChangeTracking(Sender: TObject);
begin
 case Length(iMail6.Text) of
   1:Begin
       if (iMail2.Text+iMail3.Text+iMail4.Text+iMail5.Text+iMail6.Text)=LblCode.Text then
       Begin
         Button1.Enabled:=True;
         Button1.SetFocus;
       End;
     End;
 end;
end;

Editlerin MaxLength =1 yaparsanız daha sağlıklı olur.

İyi Çalışmalar.

Hocam cevabınız için teşekkürler fakat aynı sorun devam ediyor. İlk edite giriş yapınca uygulama kapanıyor ne olabilir sorun ?
Cevapla
#4
Merhaba,

Mevcut Editleri tamamı ile kaldırıp yeniden ekleyin. Editleri Copy/Paste ile çoğalttıysanız ve ilk edit için Event tanınlamalarından birini yaptıysanız diğerleri de aynı özelliği çektiği için sorun oluşturuyor olabilir. Yeni bir proje üzerinde denediğinizde sorun olmadığını sizde görürsünüz.

İyi Çalışmalar.
Cevapla
#5
Bir çok yerde olay tetikleme işlemi içinde kullandığınız SetFocus direktiflerinden kaynaklı bir sorun olduğunu düşünüyorum.
Olay gerçekleştiği anda, kullanıcı denetimi (handle) farklı bir taşıyıcı bileşende ise (örn, farklı bir form veya frame) SetFocus hataya düşecektir.
Mobil uygulamalarda OS hataları doğrudan kullanıcıya yansıtılmayabiliyor. Bu durumda uygulamanın çökmesi kaçınılmaz oluyor.
Begin : = end / 2;
Cevapla
#6
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;


Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#7
(09-01-2022, Saat: 20:52)codder71 Adlı Kullanıcıdan Alıntı: Merhabalar

E-mail doğrulamak için yaptığım otp sisteminde otp kodunu rakam rakam kullanıcıya girdirmek istiyorum ve her girdiği rakamda bir editten diğerine otomatik geçiş sağlamaya çalışıyorum fakat geçiş yaptığı anda uygulama çöküyor. Bunun sebebi ne olabilir. Kodu altta paylaşıyorum. Not Rad studio 11 kullanıyorum.

procedure TfrmSG_Mail_Dogrula.iMail1ChangeTracking(Sender: TObject);
begin
 iMail2.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail2ChangeTracking(Sender: TObject);
begin
 iMail3.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail3ChangeTracking(Sender: TObject);
begin
 iMail4.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail4ChangeTracking(Sender: TObject);
begin
 iMail5.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail5ChangeTracking(Sender: TObject);
begin
 iMail6.SetFocus;
end;

kodu onkeyup a veya onchange e yazarak deneyin.
Cevapla
#8
(12-01-2022, Saat: 13:32)vedat35 Adlı Kullanıcıdan Alıntı:
(09-01-2022, Saat: 20:52)codder71 Adlı Kullanıcıdan Alıntı: Merhabalar

E-mail doğrulamak için yaptığım otp sisteminde otp kodunu rakam rakam kullanıcıya girdirmek istiyorum ve her girdiği rakamda bir editten diğerine otomatik geçiş sağlamaya çalışıyorum fakat geçiş yaptığı anda uygulama çöküyor. Bunun sebebi ne olabilir. Kodu altta paylaşıyorum. Not Rad studio 11 kullanıyorum.

procedure TfrmSG_Mail_Dogrula.iMail1ChangeTracking(Sender: TObject);
begin
 iMail2.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail2ChangeTracking(Sender: TObject);
begin
 iMail3.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail3ChangeTracking(Sender: TObject);
begin
 iMail4.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail4ChangeTracking(Sender: TObject);
begin
 iMail5.SetFocus;
end;

procedure TfrmSG_Mail_Dogrula.iMail5ChangeTracking(Sender: TObject);
begin
 iMail6.SetFocus;
end;

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.
Cevapla
#9
Ekrandaki EDIT'lerin sırasını kontrol etmek isteyebilirsiniz. Belki de yerleri değişiktir.
Kod öyle karışık değil.
Ne diyor, edit2'deysen 3'e; 3'teysen 4'e diyor.
Karıştırıyor derken tam olarak neyi kast ediyoruz ? Klavyeden bir tuşa basınca yanlış EDIT'e mi atlıyor ? Editler'deki daha önce eklediğiniz kontrolleri temizlediğinizi iki defa kontrol edin.

Hatta size önerim, TEST maksatlı, daha sonra kaldırmak üzere (4) tane daha yeni EDIT ekleyin ve bu kodu oraya uygulayın. Orada düzgün davranacak mı ?
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#10
@codder71

Eğer her edit 1 karakterden olşuacak ise
Editlerin Maxlength properties alanına 1 değeri set et
Sonrasındaki yapı aşağıdaki şekilde çalışacaktır

procedure TForm1.Edit1ChangeTracking(Sender: TObject);
begin
 if (Sender as TEdit).Text <> '' then Edit2.SetFocus;
end;
procedure TForm1.Edit2ChangeTracking(Sender: TObject);
begin
 if (Sender as TEdit).Text <> '' then Edit3.SetFocus;
end;
procedure TForm1.Edit3ChangeTracking(Sender: TObject);
begin
 if (Sender as TEdit).Text <> '' then Edit4.SetFocus;
end;
procedure TForm1.Edit4ChangeTracking(Sender: TObject);
begin
 if (Sender as TEdit).Text <> '' then Edit1.SetFocus;
end;

Yada Aşağıdaki şekilde ortak bir Procedure yaparsın
Tüm Editlerin "ChangeTracking" Eventine bu Procedure ismini verirsin böylece kod daha sade olmuş olur. 
Aşağıdaki örneğin çalışması için Uses kısmına "Windows" eklemeyi unutmayın

procedure TForm1.pr_ChangeTracking(Sender: TObject);
begin
 if (Sender as TEdit).Text <> '' then Keybd_event(VK_TAB,0,0,0);
end;
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Google play Uygulama yükleme hatası [Çözüldü] codder71 3 306 23-02-2024, Saat: 22:42
Son Yorum: codder71
  Delphi 12 IOS Simulatorde Uygulama Çalışmıyor elixir84 3 923 07-02-2024, Saat: 17:05
Son Yorum: elixir84
  Delphi 11.3 Andorid 10 ve üzeri uygulama çalışmıyor TuncayDelphi 7 578 07-12-2023, Saat: 01:23
Son Yorum: TuncayDelphi
  Mapview üzerinde splash ekran logo sorunu arsl01 4 882 05-12-2023, Saat: 23:00
Son Yorum: arsl01
  IOS SDK Ekleme Esnasında Yavaş Aktarım Sorunu Çözümü Mr.X 0 246 23-11-2023, Saat: 21:18
Son Yorum: Mr.X



Konuyu Okuyanlar: 1 Ziyaretçi