Delphi Can

Orjinalini görmek için tıklayınız: edit1 change işlem yapma
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
Arkadaşlar,

Edit text'e cihazdan kart okutuyorum kart id si edit change ile müşterileri bulup log ekliyor.

Cihaz çin malı bir cihaz neden anlamadım ama kartı iki defa okuyor id iki defa atıyor böylece bir işlemi iki defa yapıyor

ilk okumadan sonra 3 sn. beklesin öyle işlem yapsın bir zaman döngüsü ile  acaba bu konuda yardımcı olabilirmisiniz.

procedure TForm1.Edit1Change(Sender: TObject);
begin
    işlemler
end;


Teşekkürler.
@erdogan zaman süresi kontrolü yerine aynı kart arka arkaya geliyorsa kabul etmesen daha pratik olmazmı
aynı kart arka arkaya gelebilir ama, burada ki amaç hem yanlışlıkla kartı iki defa da okutmasın
kartı notepad'te okutuncada mı iki ID geliyor?
hayır gelmiyor tüm kod burası zaten

procedure TForm1.OnReceiveText(ASender: TObject; const Reader: IReader; ReaderId: Byte; const Data: WideString);
begin
EditKART_NO.Text := Data;
end;
global bir x : cardinal türünde değişken tanımla
bu değişkene OnReciveText altında x := gettickcount; ile değer ata
OnReciveText içerisinde
if (gettickcount - x) > 3000 /// bu değer milisaniye cinsindendir 3000 = 3 sn demek
begin
   EditKART_NO.Text := Data;
end;
şeklinde kullan 
Tabi şunuıda atlama aynı kart no ise zaman kontrolünü uygula
Şöyle bir denermısınız. madem ıkı defa gelıyor bızde ıkıye bolerızSmile
procedure TForm1.OnReceiveText(ASender: TObject; const Reader: IReader; ReaderId: Byte; const Data: WideString);
begin 
EditKART_NO.Text := Copy(Data, 1, length(data)/2); ; 
end;
(22-08-2019, Saat: 18:14)adelphiforumz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.global bir x : cardinal türünde değişken tanımla
bu değişkene OnReciveText altında x := gettickcount; ile değer ata
OnReciveText içerisinde
if (gettickcount - x) > 3000 /// bu değer milisaniye cinsindendir 3000 = 3 sn demek
begin
   EditKART_NO.Text := Data;
end;
şeklinde kullan 
Tabi şunuıda atlama aynı kart no ise zaman kontrolünü uygula

hocam bunu biraz detaylandırabilirmisin acaba

çok teşekkür ederim

(22-08-2019, Saat: 18:15)serdar Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Şöyle bir denermısınız. madem ıkı defa gelıyor bızde ıkıye bolerızSmile
procedure TForm1.OnReceiveText(ASender: TObject; const Reader: IReader; ReaderId: Byte; const Data: WideString);
begin 
EditKART_NO.Text := Copy(Data, 1, length(data)/2); ; 
end;

yani iki defa yazmıyor Smile
forma memo nesnesi koyup

procedure TForm1.OnReceiveText(ASender: TObject; const Reader: IReader; ReaderId: Byte; const Data: WideString);
begin 
  memo1.Lines.Insert(0,data);
end;
denermisin bakalım memo'ya nasıl gelecek
Bence biraz akış algoritmaları üzerinde dursanız iyi olur düşüncesindeyim.
Her zaman hazır kod bulamazsınız. Idea

...
...
...

var
SonGelisZamani : Cardinal;
SonGelenKartNo : WideString;

implementation

{$R *.dfm}


procedure TForm1.OnReceiveText(ASender: TObject; const Reader: IReader; ReaderId: Byte; const Data: WideString);
begin
  if (Data = SonGelenKartNo) then
  begin
      if (GetTickCount - SonGelisZamani) > 3000 then
      begin
        EditKART_NO.Text := Data;
        SonGelenKartNo := Data;
        SonGelisZamani := GetTickCount;
      end;
  end
  else
  begin
      EditKART_NO.Text := Data;
      SonGelenKartNo := Data;
      SonGelisZamani := GetTickCount;
  end;
end;

...
...
...
Sayfalar: 1 2