Odpověď

Jméno:
E-mail:
Předmět:
Ikona zprávy:

Ověření:
Křestní jméno zpěváka Gotta:

Zkratky: stiskněte shift+alt+s pro odeslání nebo shift+alt+p pro prohlédnutí


Shrnutí tématu

Poslal: rustymattock
« kdy: 15-11-2017, 00:07:38 »

Ano. budu čekat na #13, který do memo určitě dorazí.
Já vlastně žádný zázrak nechci. Pouze: Jestli došel ENTER, vymaž text.
Poslal: Delfin
« kdy: 14-11-2017, 22:23:51 »

jo jasně. Já sám jsem zkoušel zda reaguje ENTER alespoň na KeyUp :-)
Ovšem nevím (byť jsem to nezkoušel), jestli tok znaků z čtečky vyvolá některou z událostí KeyDown, nebo KeyUp.  Spíš ne (stejně, jako když pošleš jakýkoliv znak do Editu z proměnné).

Vyměnit Edit za Memo bude nejrychlejší

Zase nechapu proc. Psal jsi ze ta ctecka simuluje klavesnici a ze potrebujes zjistit kdy dorazil posledni znak. Proc teda nechces cekat na ten znak v udalosti stisku klavesy? Jak se "posila znak do Editu z promenne" bohuzel netusim :-[ :)

Ty radeji vymenis edit za memo a budes hledat na konci carriage return znak abys detekoval konec prenosu skenovaneho kodu? Nebo neco sofistikovanejsiho :)?
Poslal: Ondřej Pokorný
« kdy: 14-11-2017, 22:21:32 »

Vyměnit Edit za Memo bude nejrychlejší

jo to je vono
Poslal: rustymattock
« kdy: 14-11-2017, 21:35:01 »

jo jasně. Já sám jsem zkoušel zda reaguje ENTER alespoň na KeyUp :-)
Ovšem nevím (byť jsem to nezkoušel), jestli tok znaků z čtečky vyvolá některou z událostí KeyDown, nebo KeyUp.  Spíš ne (stejně, jako když pošleš jakýkoliv znak do Editu z proměnné).

Vyměnit Edit za Memo bude nejrychlejší
Poslal: Delfin
« kdy: 14-11-2017, 20:52:49 »

pak emuluje klávesnici a po jednom znaku to posílá do jakékoliv aplikace, která čte ASCII a má fokus (když v polovině řetězce přepneš fokus z Wordu, do poznámkového bloku, tak bude pokračovat v poznámkovém bloku)

Jo tak ::) Driver k te ctecce musel vymyslet nekdo s IQ prasku do peciva :) Nicmene, pro tento typ ctecky by Ti melo stacit obslouzit OnKeyDown prip. OnKeyPress komponenty:

Kód: Delphi [Vybrat]
  1. procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  2. begin
  3.   if Key = VK_RETURN then
  4.     ShowMessage('Code scanned!');
  5. end;
  6.  
  7. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  8. begin
  9.   if Key = #13 then
  10.     ShowMessage('Code scanned!');
  11. end;
Poslal: rustymattock
« kdy: 14-11-2017, 20:10:55 »

Delfín:
Čtečka přečte z datamatrixu tohle:
[)>0612S00011PERJ8ENF1741VPA2C5301432031PERJ8ENF1741V20P00036637352PE  Q500016K0V87018803SSFRJF769B009D    20T010115D090620189DD201706091T76996503660ZN 1ZPANASONIC ORIGINJP9108502

pak emuluje klávesnici a po jednom znaku to posílá do jakékoliv aplikace, která čte ASCII a má fokus (když v polovině řetězce přepneš fokus z Wordu, do poznámkového bloku, tak bude pokračovat v poznámkovém bloku)
No a Já to četl do Editu. Přečetl všechny ASCII (i ty dva #30 znaky co tam vidíš), ale nikoliv #13. Z čeho jsem usoudil, že konec mi čtečka nijak neohlásí
Poslal: Delfin
« kdy: 14-11-2017, 19:53:04 »

Tam je ten problém, jelikož Edit, do kterého se datamatrix čte, ve své události onChange, zcela ignoruje ASCII #13.

Jestli má vlákno v budoucnu někomu pomoct, tak Memo pro záznam z čtečky ANO, Edit NE :-)

Tomu nejak nerozumim ::) Jak TEdit ignoruje v OnChange znak CR? A co ma vlastne spolecneho vizualni komponenta s ctenim dat z portu?
Poslal: rustymattock
« kdy: 14-11-2017, 19:40:18 »

Děkuji kluci za nápady.
 Řešení bylo tak moc na očích, až jsem ho neviděl.

Zejména Martin mě nasměroval správně, jelikož samozřejmě, že čtečka nespoléhá na jakoukoliv specifikaci formátu, ale má vlastní "tečku" na HW úrovni.
A samozřejmě, že je to Enter :-)    (zkoušel jsem všechny dostupné čtečky, které se mi dnes dostali do ruky).
Tam je ten problém, jelikož Edit, do kterého se datamatrix čte, ve své události onChange, zcela ignoruje ASCII #13.

Jestli má vlákno v budoucnu někomu pomoct, tak Memo pro záznam z čtečky ANO, Edit NE :-)
Poslal: raul
« kdy: 14-11-2017, 11:03:07 »

Nektere ctecky se daly naprogramovat, ze posilali preffix a suffix, takze si na konec mohl dat svou sekvenci. Treba od symbologic (ci jak se menujou) jsem si nastavil oboje a slapalo to paradne.
Poslal: Jirka Ondricek
« kdy: 14-11-2017, 08:10:00 »

Používáme v zaměstnání stovky čteček od mnoha výrobců. Zatím naprosto všechny umožňovaly nastavení a to buď sw od výrobce a nebo pomocí speciálních čárových kódů.

Také jsme ale narazili i na nutnost nechat čtečku tak jak je a pak jsme si většinou poradili pomocí obsahu kódu. Tzn. vždy jsme "věděli" co načítáme. Znali jsme např. délku kódu nebo nějaké znaky na definovaném místě., takže se dalo vytvořit nějaké pravidlo.

Každopádně souhlasím s tím, že využít časovou závislost povede jen k problémům teď nebo později.
Pokud ale opravdu je zadání číst naprosto libovolný kód bez nějaké definice, tak mne také jiné řešení nenapadá. :(

PS: ještě mne napadla jedna možnost, vytisknout si speciální label, který bude znamenat konec, tzn. zákazník načte ten hlavní a hned za ním tento ukončovací. Je mi samozřejmě jasné, že je to krkolomné a ještě to přidává práci.
Poslal: PaJi
« kdy: 14-11-2017, 01:44:59 »

rustymattock: Trochu jsem se v tom kdysi hrabal také (dnes už to jen oprašuju), ale jediná spolehlivá cesta je skutečně jen přes ten suffix a popř. prefix. Vše ostatní co je závislé na nějakých časových prodlevách apod. je cesta do pekel obzvláště u Windows. Přes ty timeouty cesta opravdu nevede.

Martin Holík: Kdysi jsem pracoval právě s průmyslových scannerem, který byl schopen na konec přidat jen nul, naštěstí dvojitý, tzn Chr($00)+Chr($00). Musel jsem kvůli tomu trochu poladit načítací knihovnu - naštěstí to tehdá dávali i se zdrojáky (ale to už je opravdu hodně dávno).

Dnes už by téměř každý scanner měl umět přidat TAB, CR, LN, CRLN, <STX>, <ETX> To jsou ty nejběžnější.

Pak je ještě jedna cesta, pokud si tisknete i čárové kódy (tzn. že máte vnitřní uzavřený systém), tak ten suffix si dáte přímo do toho čárového kódu a vše pak testujete jako stream na výskyt znaku. Dělal jsem to tak, že jsem dal oddělovač, pak kontrolní číslici a jiný znak coby koncový suffix. Měli jsme i variabilní délku barkódu. V  tomto provedení to bylo velmi spolehlivé.
Pokud to máte jako celkový label (viz Váš odkaz), přidejte si jednu sekci na konec a tu považujte za ten suffix. Ale takhle od stolu je to jen teorie, jde spíše o nasměrování.

Držím palce.
Poslal: Martin Holík
« kdy: 13-11-2017, 22:34:52 »

Království za ENTER :)
Ono někdy i za jakýkoliv speciální znak, který je zasílám jako suffix

Nicméně ta dokumentace popisuje formát čárového kódu, respektive jeho obsah, ale já jsem mířil na konkrétní HW čtečky čárových kódů do které se dá z pravidla nastavit co má poslat po úspěšném načtení čárového kódu (suffix char). Zatím se to dalo nastavit ve všech čtečkách, které jsem měl v ruce.

Jaký HW (čtečka) bude použit pro čtení tohoto kódu?
Poslal: rustymattock
« kdy: 13-11-2017, 22:19:09 »

království za ENTER
Dle té specifikace, kterou jsem přiložil mají datamatrixy posílat několik různých separátorů, se kterými uděláš cokoliv. Jen ta prax je poněkud jiná.

Ještě mě napadlo jít na to obráceně. První 3 znaky tvoří unikátní řetězec (nejspíš aby aplikace, kterých se to týká věděli, že jde o data specifického formátu). Tak vyčistím Edit vždy, když je zaznamenám, čili hned na začátku.
...což ale ve výsledku bude stejně pro obsluhu vizuálně docela nehezké.
Poslal: Ondřej Pokorný
« kdy: 13-11-2017, 22:00:21 »

moje čtečky na konec posílaly line break
Poslal: Martin Holík
« kdy: 13-11-2017, 21:59:44 »

Neumí čtečka poslat sufix char - třeba TAB, nebo ENTER. Nebo se někdy využívá nějaký znak, který není tak často používán.