Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-03-2008
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 18
Flecha Va por buen camino
Question Trabajar con Scanner de código de barras

Hola a todos.

Tengo varias preguntas, todas algo complejas, y todas en torno a trabajar con Scanners de códigos de barras.

Hasta ahora, para leer el código de barras me ha bastado con poner en el form un TEdit (por ejemplo), dejar en él el foco, y entonces leer el código de barras con el Scanner. El código leído se refleja en el TEdit como si lo hubiese tecleado. Pero necesito leer el código de barras prescindiendo de TEdit y similares. Es decir: Necesito capturar la entrada del dato desde el Scanner sin utilizar el truco del foco sobre un TEdit o similar. ¿Puede hacerse algo similar al trabajo con sockets y el TServerSocket? Eso me vendría de perlas.

Los Scanners (porque son varios) con los que estoy, se conectan todos al PC por puerto USB:
  • ¿Hay alguna manera de detectar el momento en el que alguien conecta el Scanner al PC? ¿Puedo saber exactamente a qué puerto del PC se ha conectado para capturarlo e intentar lo de la captura de entrada de datos?
  • Suponiendo que puedo detectar el momento en el que algo se conecta al PC por puerto USB, ¿puedo saber si lo que se ha conectado al puerto USB es un Scanner de código de barras u otro dispositivo distinto?
  • Y para seguir con el hilo de preguntas, ¿se puede detectar el momento en el que alguien desconecta el dispositivo del puerto USB?
  • Si alguien conectara dos Scanneres de códigos de barras al PC ¿hay algún modo de diferenciar la entrada de datos de cada uno de ellos?
Y por último. Todas las preguntas son sobre Scanners que se conectan al PC por puerto USB. ¿Habría alguna diferencia respecto a Scanneres que se conecten al PC por otro tipo de puerto (por ejemplo un puerto serie)? Lo pregunto por si me tocara modificar el programa en el futuro utilizando ese otro tipo de Scanneres, o por si simplemente el cable de conexión se estropeara y tubieramos que cambiarlo por otro que se conecte al serie en vez de al USB.

Muchas gracias de antemano.
Responder Con Cita
  #2  
Antiguo 14-03-2008
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Cool Trabajar con Scaneres de codigo de barra

Hola como estas??

Mira he trabajdo con Scaneres pero por curiosidad por que no quieres capturar en un Tedit lo que trae el Scaner..

Tambien podrias hacer que el formulario lo capte poniendo la propiedad KeyPreview en true.

Por lo que tengo entendido el Lector simula ser un teclado para la PC y asi poder escribir los datos por ejemploi en un Tedit, porque si prestas atendion lo va escribiendo de a uno a cada nro

por ejemplo

si leo este codigo 1000 2154 7846 4587

No aparecera todo el codigo escrito de una sola vez

sino que ira agregando de a una como si lo escribieras desde el teclado
por lo tanto si no quieres ocupar un Tedit podrias capturar las entradas que vienen desde el teclado(esto no lo proble pero podria andar)

Saluda Atte Neeruu
Responder Con Cita
  #3  
Antiguo 14-03-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Tendrías que hacer un manejador para los eventos del teclado como OnKeyPress o OnkeyDown para procesar los "teclazos" que manda el escaner. Si lo que no quieres es que se muestre el Tedit.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #4  
Antiguo 17-03-2008
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 18
Flecha Va por buen camino
Hola.
Ante todo muchas gracias por contestar.

Quiero prescindir del TEdit y similares porque el código leido por el scanner no debe aparecer visible en pantalla. Sin embargo, para que un TEdit, o similar, recoja lo leído por el scanner, dicho objeto debe estar:
- con Visible a True,
- con Enabled a True,
- y con el foco de la aplicación en dicho objeto

Una primera solución podría ser poner el TEdit por detrás ("Send to Back") de otros objetos (por ejemplo, un TPanel), y así no sería visible para el ojo humano. Pero es muy posible que el usuario esté tocando en otras partes del TForm haciendo que el foco vaya de un lado para el otro y que nunca esté donde yo necesito que esté (en el TEdit que recoge lo leido por el Scanner). Y además en el TForm hay otros TEdit y TDBEdit con otro tipo de información. Tampoco combiene que por error se pegue en uno de esos objetos la información leida por el scanner.

El usuario dispone de teclado y ratón para "jugar" en el TForm todo lo que quiera. Por eso necesitaría distinguir la entrada del Scanner de la entrada del teclado.

Todo control de eventos que ponga (KeyPreview:=True, o configurar OnKeyPress y/o OnKeyDown) también saltará cuando el usuario toque el teclado, y no tendré manera de distinguirlo de la entrada por Scanner.

La solución ideal creo que sería capturar la entrada del Scanner a nivel de puerto.

¿Alguna idea de cómo hacerlo?

Muchas gracias de nuevo.
Responder Con Cita
  #5  
Antiguo 17-03-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
Hola, tal vez sea una solución un poco tonta pero no has pensado en poner un caracter que omita las letras y/o números que lea el scanner ???, algo así como cuando pones un Edit para escribir contraseñas...

Sé que no es lo que pides pero me pareció una idea aceptable si lo que quieres es que lo que lea el scanner no se "vea" por el usuario... podrían solo ver asteriscos o puntos o cualquier otra cosa...

Saludos,
Responder Con Cita
  #6  
Antiguo 17-03-2008
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Cool Trabajar con Scaner de codigo de barra

Hola lo que podrias hacer es asignar una tecla especial para que ingrese el codigo de barra, por ejemplo que presione la tecla 'F1' y que se abra una ventanita con un TEdit y si quiere cancelar la lo ingresado que presione escape para cerrar la ventana!!!!!


En caso de que ingrese el codigo de barra, programas el caracter de fin de intruccion y lo usas para saber que termino de escribir el codigo de barra, y de ahi ya tienes tu codigo y puedes hacer lo que quieras!!!!

No se!!! esa podria ser una solucion!!! tambien nose pero creo que con tienen caracteres de fin de intruccion( o sea que indican que termino el codigo) tambien tienen caracteres de inicio, asi podrias asignar un caracteres medio raro y poder detectarlo despues... de esto no estoy seguro y no tengo ningun manual a mano...

Si decides algo avisa... por curiosidad haber como quedo

Saluda Atte Neeruu
Responder Con Cita
  #7  
Antiguo 18-03-2008
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 18
Flecha Va por buen camino
Gracias de nuevo.

Las ideas son buenas, pero ya las había tenido en cuenta, y os aseguro que la mejor opción que sigo encontrando es la de intentar capturarlo a nivel de puerto.

Yo también he trabajado anteriormente con Scanners de códigos de barras y todo es mucho más sencillo de como lo estoy planteando ahora. El problema es que en este caso en concreto necesito hacer algo distinto.

El PC interpreta la entrada por Scanner como si fuese una entrada por teclado, y además sin distinguir entre el uno y el otro. Lo que yo necesito es que el PC diferencie entre la entrada por teclado y la entrada por Scanner.

Si consigo algo, os lo comentaré. Si no, pues ya veré qué me invento, y sobre todo, a ver si convencemos al usuario para que sea más flexible.

Un saludo.
Responder Con Cita
  #8  
Antiguo 18-03-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Controlar lector USB

Hace algun tiempo hice una aplicación en la que necesitaba controlar a un lector USB de tarjetas magneticas (credito, debito), no venia con ningun controlador y pude hacer interface usando el componente JvHidDeviceController de las librerias Jedi. Funciono para mi.

Espero que te sirva

Saludos.
Responder Con Cita
  #9  
Antiguo 18-03-2008
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 18
Flecha Va por buen camino
Cita:
Empezado por jcarteagaf Ver Mensaje
Hace algun tiempo hice una aplicación en la que necesitaba controlar a un lector USB de tarjetas magneticas (credito, debito), no venia con ningun controlador y pude hacer interface usando el componente JvHidDeviceController de las librerias Jedi. Funciono para mi.

Espero que te sirva

Saludos.
¿Dónde puedo encontrar ese componente y esa librería?
Yo estoy con Delphi 6. ¿Es de algún Delphi superior, o es una librería externa a Delphi?

Muchas gracias.
Responder Con Cita
  #10  
Antiguo 18-03-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Librerias JEDI

Las JEDI son un conjunto de Componentes (mas de 300) gratuitos que puedes encontrarlos en su pagina de SourceForge. Constan de los JVCL (que son los componentes) y las JCL que son librerias de codigo. Para poder utilizarlos debes instalar ambos (primero las JCL). Cada uno viene con un install que hace practicamente todo.

Espero que te sirva. Saludos.
Responder Con Cita
  #11  
Antiguo 19-03-2008
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 18
Flecha Va por buen camino
Algo me dice que ya no son gratuitos, o que algo ha cambiado desde que lo utilizaste.
He entrado en el link y después en Download, y esto es lo que me encuentro:


No File Packages Defined

This project has not yet created any file release packages.
Responder Con Cita
  #12  
Antiguo 19-03-2008
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Cool Trabajar con Scanner de código de barras

Hola yo tengo las Jedi dime donde te las puedo mandar!!!!


No se si se puede hacer esto en el foro, sino se puede perdon!!!


Saluda Atte Neeruu
Responder Con Cita
  #13  
Antiguo 25-03-2008
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 18
Flecha Va por buen camino
Cita:
Empezado por Neeruu Ver Mensaje
Hola yo tengo las Jedi dime donde te las puedo mandar!!!!


No se si se puede hacer esto en el foro, sino se puede perdon!!!


Saluda Atte Neeruu
No sé si habrá algún problema. Por mi parte, no.
Puedes mandármelo a g4-0b@hotmail.com

Muchas gracias.
Ya contaré qué tal me ha ido.
Responder Con Cita
  #14  
Antiguo 29-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Yo pienso una posible solución, es hacer un Hook para el teclado, y la única distinción entre el ingreso por teclado por parte del usuario, respecto del enviado por el lector, es la velocidad, claro está, mucho más rápida esta última.
Con respecto a acceder directamente al puerto, (0x060) tiene el conflicto de necesitar establecerse por driver, a nivel del kernel, ya que XP no lo permite de otra forma, y habría que convertir la data binaria al formato que quieras.
Yo particularme prefiero el método mediante un Hook, tipo TKeyboardHook, ya que todos los lectores CCD, tienen la carecterística de definir el caracter terminal, pudiendose utilizar éste para la distinción usuario/lector.
Los lectores que emulan teclado son los más económicos, pero tienen sus limitaciones. Fueron creados con el fin de satisfacer terminales TPV, donde la mayoría de los casos, por no decir todos, siempre tienen un elemento con el foco, como en tu caso, un TEdit.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #15  
Antiguo 30-03-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Porbando lo que decias, a nivel de Puerto, hice este ensayo:

- Colocando 2 Memos en un form, y haciendo uso de esta dll
http://logix4u.net/Legacy_Ports/Para...000/NT/XP.html

Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Memo1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
function Inp32(wAddr:word):byte; stdcall; external 'inpout32.dll';
function Out32(wAddr:word;bOut:byte):byte; stdcall; external 'inpout32.dll';

{$R *.dfm}
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var leido:byte;
begin
  leido:=Inp32($060);
  Memo1.Text:=(IntToStr(leido));
  case leido of   //por cada código
    2: begin
          memo2.Text:=memo2.Text+IntToStr(leido-1);
        end;
    3: begin
          memo2.Text:=memo2.Text+IntToStr(leido-1);
        end;
end;
end;
end.

Me resulta bastante incómodo, por 2 razones. Se mezclan flags de la INT33 (mouse) con el Port 0x060 del teclado PS/2, por lo que un simple clic (Flag Dx) altera el curso del Port 0x060, efecto no deseable pero tratable. Y lo más
molesto, es que si cronometrás el evento en cada KeyPress, el envío del scanner CCD equivale a mantener presionada una tecla, es decir tener un KeyDown siempre en true, aunque visualmente no lo parezca, pero las mediciones manda. Voy a seguir viendo o mejor dicho encontrando una forma de distinguir entre Usuario y Scanner CCD, pienso que el quiz está en el Buffer del teclado, Probaste mantener una tecla presionada o presionarla justo en el mismo momento que el scanner envia el dato?

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #16  
Antiguo 16-12-2009
firestone2 firestone2 is offline
Registrado
 
Registrado: mar 2008
Posts: 3
Poder: 0
firestone2 Va por buen camino
Lo mas sencillo para lo que intentabas hacer, (porque sopungo que ya pudiste ya que ni tiene continuidad este hilo) es usar un lector de codigos de barras serial, y desde delphi siempre sabes desde que puerto vienen la entrada y no es visible al usuario
Responder Con Cita
  #17  
Antiguo 26-12-2009
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Yo seguiría el camino que te ha indicado firestone2.

Alguna vez he configurado escaneres de codigo de barras USB como SERIAL y he recogido la entrada vía COMx, sin presentar nada en pantalla.

Incluso, en una ocasión, leia (sin mostrar nada al usuario) el código de barras y lo pasaba a un servidor UDP a la escucha en un Terminal Server. El usuario no se enteraba de nada, salvo que el producto aparecía en su pantalla de la aplicación corriendo en Terminal Server.

Para eso:
1.- Configuraba el puerto USB como COMx.
2.- Utilizaba el componente de PSoft. www.psoft.sk (que incluye un lector de codigo de barras bastante bueno).

Aunque quizá puedes utilizar otro lector de COMx. Si alguien conoce alguno, agradeceré comentarios al respecto.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Scanner de Codigo de Barras no lee Chogo Varios 4 17-11-2012 17:25:53
uso de codigo de barras alfil123 Varios 15 28-01-2008 04:37:42
Codigo De Barras Ean-128 marocaforo Impresión 2 12-12-2006 00:10:47
Codigo Barras novatix Impresión 1 17-02-2004 12:43:25
Codigo de Barras miguelb Varios 2 21-06-2003 00:18:01


La franja horaria es GMT +2. Ahora son las 01:14:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi