Saludos a todos:
Tengo el siguiente problema:
Estoy capturando en un dialogo un pedido para un restaurant, despues de capturar el nombre del cliente, busco con un get el producto que se va a vender, este get al recibir el foco abre otro dialogo donde aparece un xbrowse con el listado de productos a buscar, depués de elegir el producto y dar enter o click en el boton salir debe regresar al get de cantidad, puesto que la búsqueda retorna automáticamente en los gets el nombre del producto seleccionado y su costo, todo esto lo hace, pero en forma infinita: se crea un loop entre el focus del get de productos y el dialogo que mustra el listado:
Aqui una imagen de lo que me refiero:

Tengo el siguiente código:
Al hacer click, o recorrer con el tabulador para tener el foco sobre el get de productos se abre el dialogo automáticamente con oGet1:bGotFocus, puesto que así es como lo necesito, el problema es que al salir del dialogo del listado de productos y darle el foco al oGet3 que es el de cantidad, oGet1 se evalua de forma infinita y provoca que se genere el loop sin poder avanzar con la captura.
Como podria solucionarlo, me he pasado todo el dia y no doy con el clavo, a lo mejor es algo facil pero no encuentro solucion, ya intente con oGet:nPos pasa saber la posición del cursor y siempre me devuelve 1, he intentado cambiarlo para que solo de abra el dialogo de consulta cuando nPos sea mayor a 1 con oGet1:SetPos(len(alltrim((cAliBus)->NOMBRE))) pero ni así, ojala y alguien pueda auxiliarme...
Gracias...
Tengo el siguiente problema:
Estoy capturando en un dialogo un pedido para un restaurant, despues de capturar el nombre del cliente, busco con un get el producto que se va a vender, este get al recibir el foco abre otro dialogo donde aparece un xbrowse con el listado de productos a buscar, depués de elegir el producto y dar enter o click en el boton salir debe regresar al get de cantidad, puesto que la búsqueda retorna automáticamente en los gets el nombre del producto seleccionado y su costo, todo esto lo hace, pero en forma infinita: se crea un loop entre el focus del get de productos y el dialogo que mustra el listado:
Aqui una imagen de lo que me refiero:

Tengo el siguiente código:
FUNCTION Pedido()
LOCAL oCrs,oCur,oIco,oDlg,oGet0,oGet1,oGet2,oGet3
LOCAL cProd:= SPACE(50)
LOCAL nPrec:= 0
LOCAL nCant:= 0
LOCAL cNomb:= SPACE(50)
DEFINE CURSOR oCrs RESOURCE "ARROWV"
DEFINE CURSOR oCur RESOURCE "MANO"
DEFINE ICON oIco RESOURCE "11"
DEFINE DIALOG oDlg RESOURCE "PEDIDO" TITLE "NUEVO pedido de Antojitos" ICON oIco
REDEFINE GET oGet0 VAR cNomb ID 100 OF oDlg PICTURE "@!"
REDEFINE GET oGet1 VAR cProd ID 101 OF oDlg PICTURE "@!"
REDEFINE GET oGet2 VAR nPrec ID 102 OF oDlg PICTURE "$ 9,999.99" COLOR RGB(000,000,000), RGB(238,255,228)
REDEFINE GET oGet3 VAR nCant ID 103 OF oDlg PICTURE "999"
oDlg:oCursor := oCrs
oDlg:lHelpIcon:= .F.
oGet1:bGotFocus:= {|| BuscaProd(oGet1,oGet2), oGet3:SetFocus()} //--> AQUI SE GENERA EL LOOP
ACTIVATE DIALOG oDlg CENTERED
RETURN nil
//-------------------------------------------------------------------------------------//
STATIC FUNCTION BuscaProd(oGet1,oGet2)
LOCAL cAliBus:= ""
LOCAL lFinDlg:= .F.
LOCAL oDlg,oBtn,oBrw,oFot,oFon,oFtn
IF AbreDBF(oApp:cDirDBF+"PRODUCTOS.DBF","PRODUCTOS",.T.,.T.)
AbreCDX(oApp:cDirDBF+"PRODUCTOS.CDX")
cSayBrow:= ""
SET FILTER TO !DELETED()
cAliBus:= ALIAS()
(cAliBus)->(ORDSETFOCUS(1))
(cAliBus)->(DBGOTOP())
DEFINE CURSOR oCrs RESOURCE "ARROWV"
DEFINE CURSOR oCur RESOURCE "MANO"
DEFINE ICON oIco RESOURCE "11"
DEFINE DIALOG oDlg RESOURCE "INCREMENTAL" TITLE "Busqueda Dinámica de Antojitos" ICON oIco
DEFINE FONT oFot NAME "Tahoma" BOLD SIZE 00, 16
DEFINE FONT oFon NAME "Courier" BOLD SIZE 00, 22
DEFINE FONT oFtn NAME "Courier" BOLD SIZE 00, 16
WITH OBJECT oBrw:= TXBrowse():New(oDlg)
oCol:= oBrw:AddCol()
oCol:cHeader := "Listado de Productos"
oCol:nHeadStrAlign := AL_CENTER
oCol:oHeaderFont := oFtn
oCol:bStrData := { || (cAliBus)->NOMBRE}
oCol:nDataStrAlign := AL_LEFT
oCol:oDataFont := oFot
oCol:= oBrw:AddCol()
oCol:cHeader := "Costo"
oCol:nHeadStrAlign := AL_CENTER
oCol:oHeaderFont := oFtn
oCol:bStrData := { || ALLTRIM("$ "+STR((cAliBus)->PRECIO))}
oCol:nDataStrAlign := AL_RIGHT
oCol:oDataFont := oFot
:lAllowRowSizing := .F.
:lAllowSizings := .F.
:nFreeze := 1
:nMarqueeStyle := MARQSTYLE_HIGHLROW
:nColDividerStyle := LINESTYLE_BLACK
:nRowDividerStyle := LINESTYLE_BLACK
:lColDividerComplete := .T.
:nHeaderLines := 2
:nStretchCol := STRETCHCOL_LAST
:lHScroll := .F.
:bSeek := nil
:bKeyChar := {|nKey| IIF( nKey <> VK_RETURN, (EscribeBus(oBrw,nKey,cAliBus), oGet1:VarPut((cAliBus)->NOMBRE), oGet1:Refresh(), oGet2:VarPut((cAliBus)->PRECIO), oGet2:Refresh()),SysRefresh())}
:bKeyDown := {|nKey| IIF( nKey == VK_RETURN, ((cAliBus)->(CierraDBF()), lFinDlg:=.T., oDlg:END()), SysRefresh())}
:bChange := {|| oGet1:VarPut((cAliBus)->NOMBRE), oGet1:Refresh(), oGet2:VarPut((cAliBus)->PRECIO), oGet2:Refresh()}
:CreateFromResource( 101 )
END WITH
REDEFINE SAY oSayBrow PROMPT cSayBrow PICTURE "@!" ID 102 OF oDlg COLOR nRGB(021,066,139)
REDEFINE BUTTONBMP oBtn TEXTRIGHT BITMAP "SALIR" ID 103 OF oDlg ACTION ((cAliBus)->(CierraDBF()), lFinDlg:=.T., oDlg:END())
oDlg:oCursor := oCrs
oDlg:lHelpIcon:= .F.
oBtn:oFont := oFot
oBtn:oCursor := oCur
oBtn:cTooltip := Tooltip("Regresa a Pedidos.","Salir de la Búsqueda",1)
oSayBrow:oFont := oFon
oBrw:SetRDD()
oBrw:nMarqueeStyle := 5
oBrw:lFastEdit := .T.
ACTIVATE DIALOG oDlg CENTERED ON INIT(oDlg:Move(400,265), oGet1:VarPut((cAliBus)->NOMBRE), oGet1:Refresh(), oGet2:VarPut((cAliBus)->PRECIO), oGet2:Refresh()) VALID (lFinDlg)
ENDIF
RETURN nilAl hacer click, o recorrer con el tabulador para tener el foco sobre el get de productos se abre el dialogo automáticamente con oGet1:bGotFocus, puesto que así es como lo necesito, el problema es que al salir del dialogo del listado de productos y darle el foco al oGet3 que es el de cantidad, oGet1 se evalua de forma infinita y provoca que se genere el loop sin poder avanzar con la captura.
Como podria solucionarlo, me he pasado todo el dia y no doy con el clavo, a lo mejor es algo facil pero no encuentro solucion, ya intente con oGet:nPos pasa saber la posición del cursor y siempre me devuelve 1, he intentado cambiarlo para que solo de abra el dialogo de consulta cuando nPos sea mayor a 1 con oGet1:SetPos(len(alltrim((cAliBus)->NOMBRE))) pero ni así, ojala y alguien pueda auxiliarme...
Gracias...
Soluciones y Diseño de Software
Damos Soluciones...
I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos
http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Damos Soluciones...
I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos
http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon