VENTA MAIN - SETFOCUS
Posted: Sat Jan 14, 2023 6:00 pm
Saludos amigos,
Tengo un problema de enfoque con este código:
En este código la función Proforma_ArtiList() abre una ventana modal en donde el usuario elige un producto y al aceptar llena la variable aArtiDatos con los datos del producto, si el usuario pulsa la tecla ESCAPE esta ventana se cierra y devuelve la matriz vacia.
Cuando el usuario elige un producto, todo funciona normal. El problema es cuando el usuario pulsa la tecla ESCAPE y entonces se ejecuta el código que está en el ELSE que evalua la longitud de la variable aArtiDatos:
Supuestamente este código debería devolver el enfoque a la ventana MAIN pero no lo hace:
Como ven el GRID si queda enfocado, pero la ventana MAIN ha perdido el enfoque, y la ventana no responde a ninguna pulsación del teclado. Probe muchas cosas sin resultado alguno hasta que se me ocurrió agregar un MSGINFO:
Y extrañamente, luego de dar Aceptar a esta ventana el enfoque se devuelve a la ventana MAIN y responde perfectamente al teclado:
Aclaro que este tema de enfoque es importante porque este cliente en particular NO USA MOUSE en sus puntos de venta, solo usan el teclado. ¿ Abrá alguna instrucción que fuerce el enfoque sobre la ventana MAIN ? al parecer el MSGINFO(), al ser parte de las APIs del mismo windows recupera o fuerza el enfoque sobre la ventana anterior.
Si alguien tiene alguna solución sin tener que usar el MSGINFO() les agradeceré su ayuda.
Tengo un problema de enfoque con este código:
Code: Select all
aArtiDatos := Proforma_ArtiList(SIS_LOCAL)
IF IsWindowDefined('Win_Proforma')
IF LEN(aArtiDatos) > 0
IF aArtiDatos[4]+aArtiDatos[5] > 0
IF ! Proforma_ItemExiste( aArtiDatos[1] )
nRecnoNew := Proforma_ItemGet( 'Agregar' , aArtiDatos[1] )
IF nRecnoNew > 0
Win_Proforma.TxtRecno.Value := nRecnoNew
Proforma_GridItemAdd( nRecnoNew )
Proforma_CalculaTotal()
Win_Proforma.Setfocus
Win_Proforma.GrdArticulos.Value := nRecnoNew
Win_Proforma.GrdArticulos.Setfocus
HMG_PRESSKEY(VK_INSERT)
ENDIF
ELSE
msginfo('El producto ya fue agregado.')
Win_Proforma.BotAgregar.Setfocus
ENDIF
ELSE
msginfo('El producto elegido no tiene stock.')
ENDIF
ELSE // Sección con el problema de enfoque
Win_Proforma.Setfocus
Win_Proforma.GrdArticulos.Value := Win_Proforma.TxtRecno.Value
Win_Proforma.GrdArticulos.Setfocus
ENDIF
ENDIF
Cuando el usuario elige un producto, todo funciona normal. El problema es cuando el usuario pulsa la tecla ESCAPE y entonces se ejecuta el código que está en el ELSE que evalua la longitud de la variable aArtiDatos:
Code: Select all
ELSE
Win_Proforma.Setfocus
Win_Proforma.GrdArticulos.Value := Win_Proforma.TxtRecno.Value
Win_Proforma.GrdArticulos.Setfocus
ENDIF
Como ven el GRID si queda enfocado, pero la ventana MAIN ha perdido el enfoque, y la ventana no responde a ninguna pulsación del teclado. Probe muchas cosas sin resultado alguno hasta que se me ocurrió agregar un MSGINFO:
Code: Select all
ELSE
Win_Proforma.Setfocus
Win_Proforma.GrdArticulos.Value := Win_Proforma.TxtRecno.Value
Win_Proforma.GrdArticulos.Setfocus
msginfo( 'Total items: '+INTSTR(Win_Proforma.GrdArticulos.Itemcount) )
ENDIF
Aclaro que este tema de enfoque es importante porque este cliente en particular NO USA MOUSE en sus puntos de venta, solo usan el teclado. ¿ Abrá alguna instrucción que fuerce el enfoque sobre la ventana MAIN ? al parecer el MSGINFO(), al ser parte de las APIs del mismo windows recupera o fuerza el enfoque sobre la ventana anterior.
Si alguien tiene alguna solución sin tener que usar el MSGINFO() les agradeceré su ayuda.