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.