Desde que actualicé la versión que tenía 2.6 a la nueva versión 8.04 me encuentro solucionando problemas, el problema que se produce ahora es que no se ejecuta todo el código que tengo escrito en determinadas partes del programa, por ejemplo:
El codigo que adjunto (que funcionaba con la versión anterior) es parte de la función de control del teclado cuando se está editando un tcbrowse
al recibir la pulsación enter entra en modo edición, si se pulsa ESCAPE, se debería salir del modo edición. Se ejecuta la función FINEDIT pero no se completa y vuelve a entrar en modo edición como si se volviese a pulsar la tecla ENTER de hecho la función se vuelve a ejecutar y recibe de nuevo el codigo de la tecla enter.
He descubierto que si ejecuto las lineas que activan tres botones, no se produce el mal funcionamiento.
De hecho provoco un error en la función que no rompe la ejecución del programa hasta que pulso ENTER si pulso ESCAPE se continúa ejecutando la edición de la celda.
Gracias, un saludo
Code: Select all
STATIC FUNCTION MiKeyDown( nKey, nFlags, oAlbaran )
....
IniEdit( oAlbaran )
oAlbaran:lNoSinFocus := .T.
::Setfocus()
uTemp = Eval( ::aColumns[ ::nColAct ]:bData )
If ::nColAct == DLVDESCRI
lAutoF2(.T.)
EndIf
dEPURA("EditCol1")
lSalida := ::lEditCol( ::nColAct, @uTemp, cPicture,,CLR_BLACK, CLR_YELLOW )
dEPURA("EditCol2")
Depura(lSalida, "::lEditCol")
Depura("1")
If ::nColAct == DLVDESCRI
lAutoF2(.F.)
EndIf
oAlbaran:lNoSinFocus := .F.
nKey := 0
If lSalida
If !::lNoActuliz
Eval( ::aColumns[ ::nColAct ]:bData, uTemp )
endif
::DrawSelect()
nKey := VerificaCol( oAlbaran )
If nKey != 0
Return FinEdit( oAlbaran, nKey, @nP, NOKEY )
EndIf
If oAlbaran:nEstado == DALTAS .and. ::nColAct = DLVIMPORT
oAlbaran:nEstado := DCONSU
Return FinEdit( oAlbaran, VK_DOWN, @nP, NOKEY )
endif
Return FinEdit( oAlbaran, NIL, @nP, nKey )
else
Depura("3")
if oAlbaran:nEstado == DMODIF
Depura("4")
DPAG1
AnulaModif(Self, oAlbaran )
::SetFocus()
endif
If ::lColAnt // Si pulsa arriba cambia a la columna anterior
Depura("5")
::lColAnt := .F.
::PrevColAct()
If ::nColAct >= DLVCODART
nKey := VK_RETURN
endif
Return FinEdit( oAlbaran, nKey, @nP, NOKEY )
Endif
If oAlbaran:nEstado == DALTAS
if ::nColAct == DLVCODART
nKey := VK_UP
else
nKey := VK_RETURN
EndIf
Return FinEdit( oAlbaran, nKey, @nP, NOKEY )
endif
endif
Depura("8")
Depura(nkey, "Nkey")
::SetFocus()
//Return FinEdit( oAlbaran, nKey, @nP, NOKEY )
xT := FinEdit( oAlbaran, nKey, @nP, NOKEY )
Depura("9")
Depura(xt, "xt")
xt=xt+"error"
Return xt
....
//----------------------------------------------------------------------------//
STATIC FUNCTION IniEdit( oAlbaran )
OMTERMI:Disable()
OMNUEVO:Disable()
OMABAJO:Disable()
DDETALVENT:lProcess := .T.
RETURN NIL
//----------------------------------------------------------------------------//
STATIC FUNCTION FinEdit( oAlbaran, nKey, nP, nKeyRet )
//Depura("FinEdit1")
OMTERMI:Enable() // btnbmp
OMNUEVO:Enable() // btnbmp
OMABAJO:Enable() // btnbmp
DDETALVENT:lProcess := .F.
//Depura("FinEdit2")
DDETALVENT:SetFocus()
//Depura("FinEdit3")
SYSREFRESH()
//Depura("FinEdit4")
//Depura(nKey, "FinEdit-nkey")
If nKey != NIL
DDETALVENT:Mensaje(nKey)
eNDiF
nP--
//Depura(nP, "np")
//syswait(1)
//Depura("FinEdit9")
//Depura("FinEdit9"*23)
RETURN nKeyRet
//----------------------------------------------------------------------------//