Hola buenas noches amigos.
Estoy trabajando con: Delphi6 - FB 2.0 - IBX - Win10
Les comento, estoy desarrollando una pantalla de captura para punto de venta, usando teclado y lector óptico. Para el caso de la captura del código por teclado me muestra unos mensajes de advertencia dependiendo del estatus del producto (POR ACABARSE, SIN KARDEX, AGOTADO, ETC), usando la tecla TAB o ENTER q es la condición para disparar un evento que realiza la validación de los estatus del producto.
Para el caso de captura del código de producto (CODIGO DE BARRAS) usando el lector, estos mensajes no se muestran para nada....como le hago para que lo realice como si estuviese usando el teclado?
Sé q algunos lectores -si no es que todos- usan un ENTER al final de la lectura, les muestro lo que tengo:
Tengo esto en el evento OnKeyPress del objeto TMaskEdit:
Código Delphi
[-]
if (Key=#13) then
begin
Key:=#0;
Perform(WM_NEXTDLGCTL,0,0);
end;
Y esto tengo en el evento OnExit del objeto TMaskEdit
Código Delphi
[-]procedure TfrmVentas.mskCodProdExit(Sender: TObject);
begin
if NOT(mskCodProd.Text='') then
begin
qryProductos.Close;
qryProductos.ParamByName('COD_BAR').AsString:=mskCodProd.Text;
qryProductos.Open;
if qryProductos.IsEmpty then
begin
Application.MessageBox('Este código de producto no existe en el catálogo, o bien, aún no ha sido activado','Error',mb_Ok+mb_IconError);
mskCodProd.SetFocus;
end Else
begin
qryValidaInv.Close;
qryValidaInv.ParamByName('PROD_ID').AsString:=mskCodProd.Text;
qryValidaInv.Open;
if qryValidaInv.IsEmpty then
begin
Application.MessageBox('Este PRODUCTO no tiene KARDEX creado','Aviso',mb_Ok+mb_IconInformation);
mskCodProd.SetFocus;
end Else
begin
if not(qryValidaInv.FieldByName('KAR_M_EXISTENCIAS').IsNull) then
begin
if qryValidaInv.fieldByName('KAR_M_EXISTENCIAS').AsInteger=0 then
begin
Panel8.Visible:=True;
Application.MessageBox('Este producto esta AGOTADO, no tiene existencias','Aviso',mb_Ok+mb_IconWarning);
Limpiar();
end Else
begin
if qryValidaInv.fieldByName('KAR_M_EXISTENCIAS').AsInteger<=qryValidaInv.FieldByName('KAR_M_STOCK_MINIM O').AsInteger then
begin
Application.MessageBox('Este producto esta por acabarse, favor de realizar pedido','Advertencia',mb_Ok+mb_IconExclamation);
end;
sBtnAdd.Enabled:=True;
mskCant.Text:=IntToStr(1);
end;
end Else
begin
Application.MessageBox('Este producto aún NO TIENE EXISTENCIAS registradas','Aviso',mb_Ok+mb_IconInformation);
mskCodProd.SetFocus;
end;
end;
end;
end;
end;
Usando el teclado funciona a la perfección, muestra los mensajes, pero cuando uso el lector óptico no los muestra. Alguien le ha pasado algo similar?, como puedo resolver esto?