Editbox sadece barkod okuyucudan değiştirilebilsin

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Editbox sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen underwater »

Arkadaşlar merhaba;

Formumda bir tane editbox var ve buraya barkod okuyucudan değer alıyorum.
Ancak bir taraftan da kullanıcı edit e elle müdahele edemesin istiyorum.
Edit in readonly özelliğini true yaparsam bu sefer barkod okuyucudan değer almıyor.
Enable özelliğini false yaparsam yine aynı sorun.

Çok araştırdım fakat işin içinden çıkamadım.

Nasıl yapabiliriz bu istediğimi?
En son underwater tarafından 19 Nis 2016 01:41 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen brs »

Kullanici müdahale etmesini istemiyorsan label kullan veya duruma gore edit ve labeli visible true false yaptir...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen underwater »

barkod okuyucudan gelen veri için nasıl olacak ta label kullanacağım???
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen ertank »

Formun "KeyPreview" özelliğini True yapıp "OnKeyDown" olayına gerekli kodları yazabilirsin.

Ancak, bu da senin sorununun çözümü olmayacaktır. Zira klavyeden basılan tuşlar da barkod okuyucudan gelen karakter gibi algılanacak.

Barkod okuyucu cihaz ayarlarında bazı parametreler var. Bunlardan bazıları barkod başlangıç ve bitişi öncesi özel karakter veya tuş kombinasyonları göndermeye yarar. Cihaz ve programı belli bir tuş başlangıç bitiş ayarlarına göre hazırlarsan başlangıç gelmeden veya bitişten sonra basılan tuşları iptal edebilirsin diye düşünüyorum.
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen fesiharslan »

Merhaba;
underwater yazdı:barkod okuyucudan gelen veri için nasıl olacak ta label kullanacağım???
Haklısnız, barkod verileri doğrudan veri giriş alanlarına yazılır. Bu nedenle, özel bir teknik (cihazdan gelen verileri doğrudan receive etme vb.) kullanmadığınız sürece, Label'a yazılamaz.
Cihaz olmadığı için test yaparak cevap verme imkanım yok. Fakat öneri sunabilirim.
Edit nesnesinin öznellerini değiştirmeye gerek yok. Yalnızca OnKeyPress olayına veya OnKeyDown olayına;

Kod: Tümünü seç

Key:=#0;
Yazmanız yeterli olacaktır. Çünkü barkod yazılma anına KeyPress ve KeyDown olayları gerçekleşmeyecektir. Dolayısıyla seçilen veri giriş alanına barkod verisi yazılacaktır. Kullanıcı bu alana tıklayabilecek, fakat herhangi bir tuşa bastığında; tuş değerini null yaptığımızdan, herhangi bir değişiklik yapamayacaktır.
underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen underwater »

öncelikle cevaplar için teşekkür ederim.

ancak editin onkeypress olayına
if Key<>#13 then Key:=#0;
yazdığımda barkod okuyucudan gelen karakterleride kabul etmedi.

OnKeyDown olayını denemedim.Yarın deneyeceğim.
underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen underwater »

formun KeyPreview özelliği tam olarak ne yapıyor? (hiç kullanmamıştım :D )
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen fesiharslan »

underwater yazdı:formun KeyPreview özelliği tam olarak ne yapıyor? (hiç kullanmamıştım :D )
Formun KeyPreview'ine gerek yok. Çünkü bu özellik Form üzerinde hangi nesne odağında olursanız olun, her tuş hareketini algılamasını ve yakalanmasını sağlar.
Buradaki asıl amaç barkodun bulunduğu veri alanındaki tuşu yakalamaktır.
Birde if Key<>#13 then kod kısmını kullanmanıza gerek yok.
Buradaki koşul Enter tuşuna basılınca manasında geliyor. Asıl amacımız herhangi bir tuşun basılmasını engellemek olduğundan;
yalnızca

Kod: Tümünü seç

Key:=#0; 
Kullanmanız yeterlidir.
alidirik
Üye
Mesajlar: 16
Kayıt: 04 Eyl 2010 11:15

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen alidirik »

Merhabalar,

Genelde barkod okuyucular Keyboard emulation veya Serial emulation olarak adlandırılan 2 farklı çalışma prensibi ile çalışırlar.
Keyboard emulation çalışma mantığında barkod okuyucu ile taranan barkod verisi klavye portuna atıldığından barkod verisi imlecin (kürsor) bulunduğu konuma aktarılır. Bu durumda barkod okuyucudan gelen veriye kullanıcının müdahale imkanı bulunmaktadır. Piyasada okuyucular genelde bu tarz çalışmaktadır.
Diğer çalışma mantığında (Serial emulation) ise barkod okuyucu ile taranan barkod verisi RS-232 bufferına aktarılmaktadır. (imlecin bulunduğu konuma aktarılmaz.) Bu yöntemde RS-232 portu dinlenilerek veriye erişilmesi gerekmektedir. Bu yöntemde barkod okuyucudan gelen veriye kullanıcının müdahale imkanı bulunmamaktadır. Bu yöntem güvenlik amaçlı tercih edilen bir yöntemdir.

Dolayısıyla önerim seri port emulasyonu ile çalışan bir barkod okuyucu talebinizi karşılar.
underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen underwater »

onkeydown olayına

Key:=#0;

yazdığımda incompatible type "word" and "char" hatası alıyorum.

#0 değerinin word tipindeki karşılığı nedir acaba?
underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen underwater »

şöyle denedim ama yine olmadı (formun keypreview true)

onkeydown olayına
Key:=VK_BACK;

bu şekilde klavye ile edite herşeyi kabul etti.

Yazdıklarımı silmesi gerekmezmiydi. (VK_BACK)
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen fesiharslan »

underwater yazdı:onkeydown olayına

Key:=#0;

yazdığımda incompatible type "word" and "char" hatası alıyorum.

#0 değerinin word tipindeki karşılığı nedir acaba?
underwater yazdı:şöyle denedim ama yine olmadı (formun keypreview true)

onkeydown olayına
Key:=VK_BACK;

bu şekilde klavye ile edite herşeyi kabul etti.

Yazdıklarımı silmesi gerekmezmiydi. (VK_BACK)
Edit'in OnKeyDown olayına

Kod: Tümünü seç

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  KeyChar := #0;
end;
yazarak basılan her karakteri yok sayabilisiniz.
underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen underwater »

fesiharslan ilginiz için teşekkürler.

Ben Delphi 7 kullanıyorum ve bende prosedürün içeriği

TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

şeklinde görünüyor. Yani var KeyChar: Char; ibaresi yok.

elle eklemeyi denedim ama kabul etmedi.

Sanırım siz farklı bir delphi sürümü kullanıyorsunuz.
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen fesiharslan »

Haklısınız, Delphi 10 Seattle sürümünü kullanıyorum.
Fakat sorun sürüm farklılığından kaynaklanmıyor.
Ben Multi-Device Application (FMX) projeleri için örnek vermiştim.
VCL için ise Edit'in OnKeyPress Olayına

Kod: Tümünü seç

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  Key := #0;
end;
yazabilirsiniz.
underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Re: Edit sadece barkod okuyucudan değiştirilebilsin

Mesaj gönderen underwater »

fesiharslan yazdı:Haklısınız, Delphi 10 Seattle sürümünü kullanıyorum.
Fakat sorun sürüm farklılığından kaynaklanmıyor.
Ben Multi-Device Application (FMX) projeleri için örnek vermiştim.
VCL için ise Edit'in OnKeyPress Olayına

Kod: Tümünü seç

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  Key := #0;
end;
yazabilirsiniz.
işte sıkıntıda burada. :)
Bu şekilde yaptığımda barkod okuyucudan gelen string ifadeyide kabul etmiyor.
Sanırım klavyeden basılmış gibi algılıyor.
Kullandığım Barkod okuyucu USB tip klavye emülasyonlu olanlardan.
Okuduğu barkod değerini ekrandaki aktif text alana atıyor direkt.
Cevapla