PDA

Ver la Versión Completa : Evitar el uso del teclado en un componente TEdit


cureham
16-02-2007, 23:21:42
:confused: Que tal, antes q nada felicidades por esta pagina me has servido muchisimo, ahora con una gran duda que aun no se como resolverla, el problema es este... Tengo un lecotr de codigo de barras y un teclado conectados a la misma pc, en mi aplicacion tengo una ventana de login y necesito q el password lo lea de la lectora y q no permita introducir numeros desde el teclado, es esto posible????

jhonny
16-02-2007, 23:33:38
Podrias generar el codigo de barras con algun componente generador de codigo de barras y luego imprimirlo con paquetes como por ejemplo el FastReport, FreeReport o algun complemento para el QuickReport que haga dicha labor.

cureham
16-02-2007, 23:36:37
perdon creo q no me expliqe bien, el codigo de barras ya viene impreso en las tarjetas de los empleados, lo que yo necesito es leer ese codigo desde la lectora de codigos y q no lo puedan teclear directamente

jhonny
16-02-2007, 23:46:31
Se me ocurre que configures tu lector para que en la misma cadena pero antes de enviar el código envié un carácter especial que sea reconocido por tu aplicación y de esa manera entienda que esa entrada viene del lector y otro carácter al final para que la aplicación cierre de nuevo cualquier posibilidad de escribir otra cosa, y así si alguien trata de hacerlo desde el teclado pues no sabrá cual es ese carácter especial y por lo tanto tu aplicación no dejara escribir nada.

Nota: Las configuraciones de estos lectores vienen por lo general en un manual de usuario con el dispositivo.

No se si me hice entender pero espero que si y que ademas te sirva de algo.;)

cureham
16-02-2007, 23:51:15
vale me latio mucho tu idea, dejame busco esos manuales de los que hablas, muchas gracias por el tip!!

ArdiIIa
17-02-2007, 00:09:46
Te pongo un ejemplo, de hecho, no hace falta ningún edit para procesar los mensajes de teclado, pero bueno....

Interceptas los mensajes con un TApplicationEvents:


procedure TFormMain.ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean);
begin
Handled := False;
//Control del Lector de Código de Barras
//El lector está configurado para enviar los prefijos 17 y 66
//y final de línea 13
if (Msg.Message = WM_KEYDOWN) then
BEGIN
if Msg.wParam = 17 then
Begin
lBarCode := True;
Handled := True ;
Exit;
End;
if (Msg.wParam = 66) And lBarCode then
Begin
lBarCode1 := True;
Handled := True ;
Exit;
End;
if (Msg.wParam <> 13) And lBarCode1 then
Begin
cBarCode := cBarCode + Chr(Msg.wParam);
Handled := True ;
Exit;
End;
if (Msg.wParam = 13) And lBarCode1 then
Begin
lBarCode := False;
lBarCode1 := False;
Handled := True;
DoCodeBar(NIL);
End;

END;

end;



Luego el procedimiento que procesa las entradas.... (A MODO DE EJEMPLO)


procedure TFormMain.DoCodeBar(Sender : TObject);
Var
cPrefix1 : String;
cPrefix2 : String;
cPrefix3 : String;
Begin

(*
Todas las Tablas que incluyen código de barras llevan unos prefijos de tres dígitos con los siguientes valores
AUNQUE EL PRIMER CERO LO PONE EL COMPONENTE DE BARRAS
LA CONFECCIÓN DE DICHOS DÍGITOS VIENE DETERMINADA EN UN CAMPO AUTO-CALCULADO [[[[ BARCODE ]]]] de tipo Float

101 - MÁQUINAS
105 - OT FIJA
0110 - CODIGO DE CONTACTO + carpeta +
0211 - PEDIDO DE CLIENTE + (4 DÍGITOS EJERCICIO) - RESTO EL PEDIDO... FORMATEADO
0212 - OFERTA DE CLIENTE + + (4 DÍGITOS EJERCICIO) - RESTO DE LA OFERTA
400 - OT
500 - PARTE DIARIO
700 - PEDIDO A PROVEDORES
710 - PETICION DE PRESUPUESTOS A PROVEEDORES
800 - ALBARANES
900 - FACTURAS
950 - NOTAS DE ENTREGA
'0211' + '2005' + '0000'

*)

if cBarCode = '' then Exit;


Try
ApplicationEvents.OnMessage := nil;

Application.ProcessMessages;

Memo1.Lines.Add(cBarCode);

cPrefix1 := Copy(cBarCode,1,4);
cPrefix2 := Copy(cBarCode,5,4);
cPrefix3 := Copy(cBarCode,9,4);

cBarCode := '';

If cPrefix1 = '0110' then
Begin
Actionxxx.Execute;
End;


//Pedidos de Clientes
If cPrefix1 = '0211' then
Begin
Actionxxxzzzi.Execute;
End;


//Ofertas a Clientes
If cPrefix1 = '0212' then
Begin
Actiondddi.Execute;
End;

finally
ApplicationEvents.OnMessage := ApplicationEventsMessage;
End;

End;


Evidentemente, la codificación dependerá de tus códigos y por supuesto de como esté configurado el lector.
Espero que te resulte útil..

Saludos;)

cureham
17-02-2007, 00:23:42
gracias ardilla, a primera vista no comprendi muy bien tu codigo pero dejame tratar de implementarlo y a veri si hago q funcione este show, pero de cualquier forma gracias por la atencion

ContraVeneno
17-02-2007, 01:57:06
Orales!

Yo hiba a dar una respuesta tipo:

Pon tu TEdit en ReadOnly (los componentes Jedi tienen esta opción) y listo.

Parece que andaba muy perdido.