Newsgroup: it.comp.lang.delphi
Titolo: Barcode emulazione tastiera

Salve
vi presento il mio problema.
Un lettore barcode in emulazione tastiera
a volte legge male il codice a barre (sul retro di un libro) che
viene scritto in un campo edit normale. E' dovuto anche al
fatto che il libro è "incellophanato" e la sigillatura della plastica
magari (spesso) capita proprio sul codice  a barre.
All'evento OnChange controllo il numero di caratteri letti.
Il codice è lungo 13 caratteri.
Se legge troppi caratteri ( >13 ) resetto la lettura e ricomincio. ok.
Ma se ne legge troppo pochi, aspetto in eterno !!
In pratica vorrei accettare o letture perfette o scartare tutto.
Qualche consiglio ?
Grazie
Martina



Così di getto mi viene:
Alla lettura del primo carattere fai partire un timer, se entro N
secondi i caratteri letti non sono 13 scarti tutto.
-- 
"La velocità luce non è sufficiente Comandante Nunziatella, 
dobbiamo passare alla velocità smodata!"

 ha scritto nel messaggio
news:F0%qc.10775$Wc.3...@twister2.libero.it...

Ma il lettore non invia un CR +LF dopo la lettura ? ( in pratica dà l'enter
automatico).
In questo modo nell'edit io ho sempre un risultato di lettura che poi vado a
controllare.
Dovrebbe essere possibile impostare il lettore per inviare questa sequenza
dopo la lettura.
Giulio

"GiulioC" <giulio....@NOSPAMNOunisoft-net.it> ha scritto nel messaggio
news:Gy%qc.299427$rM4.12...@news4.tin.it...

Si il lettore da CR+LF se legge tutto bene
ma a volte legge solo i primi N caratteri del codice a barre
e mi lascia sporco il campo di edit, magari con 12 caratteri.
Devo verificare (dal cliente) se in questo caso manda lo stesso
il CR. Altrimenti rimane buona, anche se un pò "complicata" la
soluzione del timer (timer per una frazione di secondo: funziona ?).
Potrebbe essere l'ampiezza del buffer di tastiera ? Il problema si presenta
su un portatileWin98  non nuovissimo; sul PC in ufficio (veloce, XP) non si
è mai
presentato. mah?
Martina

presentato. mah?
Beh se il lettore a termine lettura a buon fine ti ritorna sempre
CRLF, la cosa è ancora più semplice.
Setti un timer (disabilitato) a diciamo 100 ms e poi:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if (not Timer1.Enabled) and (Edit1.Text <> '') then
    Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  if (Length(Edit1.Text) = 15) and (Pos(#13#10, Edit1.Text) = 14) then
    Label1.Caption := 'OK ' + Edit1.Text
  else
    Label1.Caption := 'Errore! ' + Edit1.Text;;
  Edit1.Text := '';
end;
Si puo' anche migliorare facendo sì che se sono arrivati 15 caratteri
non vi sia bisogno di aspettare che il timer scada con qualche cosa di
simile
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if (not Timer1.Enabled) and (Edit1.Text <> '') then
    Timer1.Enabled := True;
  if Length(Edit1.Text) = 15 then begin
    Timer1.Enabled := False;
    Timer1Timer(nil);
  end;
end;
ciao


 ha scritto nel messaggio
news:MNSsQMYjx0EMjq...@4ax.com...

Grazie Massimo
proverò il tuo consigli e ti farò sapere.
Martina

 il CR.
Sono abbastanza sicuro che i lettori di codici a barre a fine lettura se
impostati danno sempre il CRLF, mi pare di ricordare che esista addirittura
l'impostazione di verificare se la lettura è andata a buon fine e in caso
contrario svuotare il buffer e segnalarlo con un suono diverso.
Verifica ul manuale del lettore.