Página 1 de 1

Errro onexit devolver foco

Publicado: Mié Dic 13, 2006 2:25 pm
por PILO
Estoy en un tdbedit el evento onexit
los que tengo puesto es lo siguiente:
METHOD NN_OFIExit( oSender, oNextCtl ) CLASS TFAnimales
local DATANI, control := .f.
NN_OFI := ::NN_OFI:VALUE
CONTROLCROTAL()
::NN_OFI:VALUE := NN_OFI
CONTROLTRABA()
::NN_TRA:VALUE := NN_TRA
WITH OBJECT ::oDbfDatosAnimal
:OrdSetFocus( "N_OFI" )
:GOTOP()
//FIND(::NN_OFI:VALUE)
IF ::oDbfDatosAnimal:SEEK( NN_OFI )
MSGINFO("ANIMAL ENCONTRADO")
control := .t.
ELSE
MSGINFO("ANIMAL NO ENCONTRADO")
END IF
END WITH
if control
::NN_OFI:setfocus := .f.
end if
RETURN Nil
Esto anterior esta bien
pero cuando vuelve a mismo control da el siguiente error
TFANIMALES:NN_OFIEXIT(127)
Error BASE/1005 Message not found: TDBEDIT:_SETFOCUS
Argumentos: ()
Subsistema: BASE
Código de error: 1005
Estado: .F.
Descripción: Message not found
Operación: TDBEDIT:_SETFOCUS
Argumentos:
Fichero:
Código error SO: 0
Pila de llamadas:
TFANIMALES:NN_OFIEXIT (127)
TDBEDIT:ONEXIT (0)
TDBEDIT:VALID (906)
TFANIMALES:GONEXTCONTROL (0)
Esto es así­ o como se hace bien
--

Errro onexit devolver foco

Publicado: Mié Dic 13, 2006 3:01 pm
por jrcpoli-quitar
Saludos:
Esto dice la ayuda:
TStdControl:OnExit
Evento que se produce cada vez que pierde foco el control.
Parametros:
<oSender>:
Referencia al objeto que provoca el evento
<oNextCtl>:
Objeto que va a recibir el foco
Valor Retorno:
<Nil>:
Ninguna acción
<.F.>:
Se anula la perdida de foco en el control y por lo tanto no lo recibe
oNextCtl
Lo que quiere decir que debes de controlar lo que debuelve RETURN al
final si es Nil no hace nada si es False pues no avanza la siguiente y
te deja en el mismo que estabas
LOCAL Control := Nil
WITH OBJECT ::oDbfDatosAnimal
:OrdSetFocus( "N_OFI" )
:GOTOP()
//FIND(::NN_OFI:VALUE)
IF :SEEK( NN_OFI )
MSGINFO("ANIMAL ENCONTRADO")
ELSE
MSGINFO("ANIMAL NO ENCONTRADO")
Control := .F.
END IF
END WITH
Return Control
PILO escribió:
> Estoy en un tdbedit el evento onexit
> los que tengo puesto es lo siguiente:
>
> METHOD NN_OFIExit( oSender, oNextCtl ) CLASS TFAnimales
> local DATANI, control := .f.
> NN_OFI := ::NN_OFI:VALUE
> CONTROLCROTAL()
> ::NN_OFI:VALUE := NN_OFI
> CONTROLTRABA()
> ::NN_TRA:VALUE := NN_TRA
> WITH OBJECT ::oDbfDatosAnimal
> :OrdSetFocus( "N_OFI" )
> :GOTOP()
> //FIND(::NN_OFI:VALUE)
> IF ::oDbfDatosAnimal:SEEK( NN_OFI )
> MSGINFO("ANIMAL ENCONTRADO")
> control := .t.
> ELSE
> MSGINFO("ANIMAL NO ENCONTRADO")
> END IF
> END WITH
> if control
> ::NN_OFI:setfocus := .f.
> end if
> RETURN Nil
> Esto anterior esta bien
> pero cuando vuelve a mismo control da el siguiente error
> TFANIMALES:NN_OFIEXIT(127)
> Error BASE/1005 Message not found: TDBEDIT:_SETFOCUS
> Argumentos: ()
> Subsistema: BASE
> Código de error: 1005
> Estado: .F.
> Descripción: Message not found
> Operación: TDBEDIT:_SETFOCUS
> Argumentos:
> Fichero:
> Código error SO: 0
>
> Pila de llamadas:
> TFANIMALES:NN_OFIEXIT (127)
> TDBEDIT:ONEXIT (0)
> TDBEDIT:VALID (906)
> TFANIMALES:GONEXTCONTROL (0)
> Esto es así­ o como se hace bien

Errro onexit devolver foco

Publicado: Mié Dic 13, 2006 3:10 pm
por jrcpoli-quitar
Saludos:
Otro consejo:
Porque haces esto:
NN_OFI := ::NN_OFI:VALUE
Cuando en oSender tienes la referencia al control sobre el que haces el
Exit por lo tanto oSender:Value es lo mismo que ::NN_OFI:Value
Todo lo demás que hace referencia a ese control sobra.
José Ramón Castro Polinio.
PILO escribió:
> Estoy en un tdbedit el evento onexit
> los que tengo puesto es lo siguiente:
>
> METHOD NN_OFIExit( oSender, oNextCtl ) CLASS TFAnimales
> local DATANI, control := .f.
> NN_OFI := ::NN_OFI:VALUE
> CONTROLCROTAL()
> ::NN_OFI:VALUE := NN_OFI
> CONTROLTRABA()
> ::NN_TRA:VALUE := NN_TRA
> WITH OBJECT ::oDbfDatosAnimal
> :OrdSetFocus( "N_OFI" )
> :GOTOP()
> //FIND(::NN_OFI:VALUE)
> IF ::oDbfDatosAnimal:SEEK( NN_OFI )
> MSGINFO("ANIMAL ENCONTRADO")
> control := .t.
> ELSE
> MSGINFO("ANIMAL NO ENCONTRADO")
> END IF
> END WITH
> if control
> ::NN_OFI:setfocus := .f.
> end if
> RETURN Nil
> Esto anterior esta bien
> pero cuando vuelve a mismo control da el siguiente error
> TFANIMALES:NN_OFIEXIT(127)
> Error BASE/1005 Message not found: TDBEDIT:_SETFOCUS
> Argumentos: ()
> Subsistema: BASE
> Código de error: 1005
> Estado: .F.
> Descripción: Message not found
> Operación: TDBEDIT:_SETFOCUS
> Argumentos:
> Fichero:
> Código error SO: 0
>
> Pila de llamadas:
> TFANIMALES:NN_OFIEXIT (127)
> TDBEDIT:ONEXIT (0)
> TDBEDIT:VALID (906)
> TFANIMALES:GONEXTCONTROL (0)
> Esto es así­ o como se hace bien

Errro onexit devolver foco

Publicado: Mié Dic 13, 2006 3:38 pm
por PILO
No me respondes a error que se produce despues de dovolver el foco al mismo
control

Errro onexit devolver foco

Publicado: Mié Dic 13, 2006 5:03 pm
por jrcpoli-quitar
Saludos:
Puede que este equivocado si es así­ Ignacio me corregirá, pero si tu
devuelves RETURN Nil estas diciéndole que vaya al siguiente "oNextCtl" y
por otro lado le dices que vuelva al mismo ::NN_OFI:setfocus := .f., tú
que crees que te debe dar que es correcto, el evento ya hace lo que
tiene programado hacer dependiendo de lo que recibe de respuesta, si tú
se lo cambias el evento lo normal es que te dé un error de
posicionamiento "SetFocus"
José Ramón Castro.
PILO escribió:
> No me respondes a error que se produce despues de dovolver el foco al mismo
> control
>
>

Errro onexit devolver foco

Publicado: Mié Dic 13, 2006 5:12 pm
por jrcpoli-quitar
Ayuda de SetFocus
Establece el foco en el control. Es posible que el foco no se pueda
cambiar debido a que el evento OnExit del control que actualmente tiene
foco no permite su perdida, en dicho caso se puede forzar el cambio de
foco pasando un parametro .T. al método.
Tipo
Sólo después de Create
Parámetros
[<lForze>]
Si verdadero se fuerza la obtención de foco. Por defecto falso
Valor Retorno
<lFocused>
Devuelve verdadero si el foco ha sido recibido
En ningún caso se contempla FALSE si quieres forzar la obtención del
foco le deberí­as pasar TRUE, o preguntarle si es verdadero y es que
tiene el foco o falso si no lo tiene pero ::NN_OFI:setfocus := .f. no
está contemplado es un error de escritura ::NN_OFI:SetFocus(.T.)
o IF ::NN_OFI:SetFocus()
"Tengo el foco"
ELSE
"No lo tengo"
END
José Ramón Castro Polinio escribió:
> Saludos:
>
> Puede que este equivocado si es así­ Ignacio me corregirá, pero si tu
> devuelves RETURN Nil estas diciéndole que vaya al siguiente "oNextCtl" y
> por otro lado le dices que vuelva al mismo ::NN_OFI:setfocus := .f., tú
> que crees que te debe dar que es correcto, el evento ya hace lo que
> tiene programado hacer dependiendo de lo que recibe de respuesta, si tú
> se lo cambias el evento lo normal es que te dé un error de
> posicionamiento "SetFocus"
>
> José Ramón Castro.
>
> PILO escribió:
>> No me respondes a error que se produce despues de dovolver el foco al
>> mismo control
>>

Errro onexit devolver foco

Publicado: Mié Dic 13, 2006 5:17 pm
por jrcpoli-quitar
José Ramón Castro Polinio escribió:
> Ayuda de SetFocus
>
> Establece el foco en el control. Es posible que el foco no se pueda
> cambiar debido a que el evento OnExit del control que actualmente tiene
> foco no permite su perdida, en dicho caso se puede forzar el cambio de
> foco pasando un parametro .T. al método.
>
>
>
> Tipo
> Sólo después de Create
>
> Parámetros
> [<lForze>]
> Si verdadero se fuerza la obtención de foco. Por defecto falso
>
> Valor Retorno
> <lFocused>
> Devuelve verdadero si el foco ha sido recibido
>
>
> En ningún caso se contempla FALSE si quieres forzar la obtención del
> foco le deberí­as pasar TRUE, o preguntarle si es verdadero y es que
> tiene el foco o falso si no lo tiene pero ::NN_OFI:setfocus := .f. no
> está contemplado es un error de escritura ::NN_OFI:SetFocus(.T.)
Perdón el FALSE es valor por defecto cuando tu pones ::NN_OFI:SetFocus()
le estas pasando FALSE
> o IF ::NN_OFI:SetFocus()
> "Tengo el foco"
> ELSE
> "No lo tengo"
> END
>
> José Ramón Castro Polinio escribió:
>> Saludos:
>>
>> Puede que este equivocado si es así­ Ignacio me corregirá, pero si tu
>> devuelves RETURN Nil estas diciéndole que vaya al siguiente "oNextCtl"
>> y por otro lado le dices que vuelva al mismo ::NN_OFI:setfocus := .f.,
>> tú que crees que te debe dar que es correcto, el evento ya hace lo que
>> tiene programado hacer dependiendo de lo que recibe de respuesta, si
>> tú se lo cambias el evento lo normal es que te dé un error de
>> posicionamiento "SetFocus"
>>
>> José Ramón Castro.
>>
>> PILO escribió:
>>> No me respondes a error que se produce despues de dovolver el foco al
>>> mismo control
>>>

Errro onexit devolver foco

Publicado: Mié Dic 13, 2006 5:21 pm
por ignacio
Pilo,
No se pueden hacer llamadas a SetFocus desde un evento OnExit. Utilizando el valor de retorno de OnExit puedes decidir si el foco se queda en el control o no.
No obstante el error que se produce es raro ya que TDBEdit si tiene un método SetFocus heredado de TControl (que no una data). No sabrí­a a priori decirle el motivo del error.
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"PILO" <srmpilo@hotmail.com> escribió en el mensaje news:[email=457fff5b@news.xailer.com...]457fff5b@news.xailer.com...[/email]
Estoy en un tdbedit el evento onexit
los que tengo puesto es lo siguiente:
METHOD NN_OFIExit( oSender, oNextCtl ) CLASS TFAnimales
local DATANI, control := .f.
NN_OFI := ::NN_OFI:VALUE
CONTROLCROTAL()
::NN_OFI:VALUE := NN_OFI
CONTROLTRABA()
::NN_TRA:VALUE := NN_TRA
WITH OBJECT ::oDbfDatosAnimal
:OrdSetFocus( "N_OFI" )
:GOTOP()
//FIND(::NN_OFI:VALUE)
IF ::oDbfDatosAnimal:SEEK( NN_OFI )
MSGINFO("ANIMAL ENCONTRADO")
control := .t.
ELSE
MSGINFO("ANIMAL NO ENCONTRADO")
END IF
END WITH
if control
::NN_OFI:setfocus := .f.
end if
RETURN Nil
Esto anterior esta bien
pero cuando vuelve a mismo control da el siguiente error
TFANIMALES:NN_OFIEXIT(127)
Error BASE/1005 Message not found: TDBEDIT:_SETFOCUS
Argumentos: ()
Subsistema: BASE
Código de error: 1005
Estado: .F.
Descripción: Message not found
Operación: TDBEDIT:_SETFOCUS
Argumentos:
Fichero:
Código error SO: 0
Pila de llamadas:
TFANIMALES:NN_OFIEXIT (127)
TDBEDIT:ONEXIT (0)
TDBEDIT:VALID (906)
TFANIMALES:GONEXTCONTROL (0)
Esto es así­ o como se hace bien
--

Errro onexit devolver foco

Publicado: Mié Dic 13, 2006 7:00 pm
por Pablo Herranz
Me parece qu estas destruyendo el control NN_OFI al hacer NN_OFI:= NN_OFI:Value, estas cambiando el control por un valor y por tanto el setfocus deja de existir ya que NN_OFI ya no es un DBEDIT.
Pablo H
"PILO" <srmpilo@hotmail.com> escribió en el mensaje news:[email=457fff5b@news.xailer.com...]457fff5b@news.xailer.com...[/email]
Estoy en un tdbedit el evento onexit
los que tengo puesto es lo siguiente:
METHOD NN_OFIExit( oSender, oNextCtl ) CLASS TFAnimales
local DATANI, control := .f.
NN_OFI := ::NN_OFI:VALUE
CONTROLCROTAL()
::NN_OFI:VALUE := NN_OFI
CONTROLTRABA()
::NN_TRA:VALUE := NN_TRA
WITH OBJECT ::oDbfDatosAnimal
:OrdSetFocus( "N_OFI" )
:GOTOP()
//FIND(::NN_OFI:VALUE)
IF ::oDbfDatosAnimal:SEEK( NN_OFI )
MSGINFO("ANIMAL ENCONTRADO")
control := .t.
ELSE
MSGINFO("ANIMAL NO ENCONTRADO")
END IF
END WITH
if control
::NN_OFI:setfocus := .f.
end if
RETURN Nil
Esto anterior esta bien
pero cuando vuelve a mismo control da el siguiente error
TFANIMALES:NN_OFIEXIT(127)
Error BASE/1005 Message not found: TDBEDIT:_SETFOCUS
Argumentos: ()
Subsistema: BASE
Código de error: 1005
Estado: .F.
Descripción: Message not found
Operación: TDBEDIT:_SETFOCUS
Argumentos:
Fichero:
Código error SO: 0
Pila de llamadas:
TFANIMALES:NN_OFIEXIT (127)
TDBEDIT:ONEXIT (0)
TDBEDIT:VALID (906)
TFANIMALES:GONEXTCONTROL (0)
Esto es así­ o como se hace bien
--

Errro onexit devolver foco

Publicado: Mié Dic 13, 2006 7:15 pm
por Pablo Herranz
Perdon, no me habia fijado que NN_OFI es una variable, de lo dicho, nada
Pablo H
"Pablo Herranz" <pabloi@ibertabaco.com> escribió en el mensaje news:[email=45803fbf@news.xailer.com...]45803fbf@news.xailer.com...[/email]
Me parece qu estas destruyendo el control NN_OFI al hacer NN_OFI:= NN_OFI:Value, estas cambiando el control por un valor y por tanto el setfocus deja de existir ya que NN_OFI ya no es un DBEDIT.
Pablo H
"PILO" <srmpilo@hotmail.com> escribió en el mensaje news:[email=457fff5b@news.xailer.com...]457fff5b@news.xailer.com...[/email]
Estoy en un tdbedit el evento onexit
los que tengo puesto es lo siguiente:
METHOD NN_OFIExit( oSender, oNextCtl ) CLASS TFAnimales
local DATANI, control := .f.
NN_OFI := ::NN_OFI:VALUE
CONTROLCROTAL()
::NN_OFI:VALUE := NN_OFI
CONTROLTRABA()
::NN_TRA:VALUE := NN_TRA
WITH OBJECT ::oDbfDatosAnimal
:OrdSetFocus( "N_OFI" )
:GOTOP()
//FIND(::NN_OFI:VALUE)
IF ::oDbfDatosAnimal:SEEK( NN_OFI )
MSGINFO("ANIMAL ENCONTRADO")
control := .t.
ELSE
MSGINFO("ANIMAL NO ENCONTRADO")
END IF
END WITH
if control
::NN_OFI:setfocus := .f.
end if
RETURN Nil
Esto anterior esta bien
pero cuando vuelve a mismo control da el siguiente error
TFANIMALES:NN_OFIEXIT(127)
Error BASE/1005 Message not found: TDBEDIT:_SETFOCUS
Argumentos: ()
Subsistema: BASE
Código de error: 1005
Estado: .F.
Descripción: Message not found
Operación: TDBEDIT:_SETFOCUS
Argumentos:
Fichero:
Código error SO: 0
Pila de llamadas:
TFANIMALES:NN_OFIEXIT (127)
TDBEDIT:ONEXIT (0)
TDBEDIT:VALID (906)
TFANIMALES:GONEXTCONTROL (0)
Esto es así­ o como se hace bien
--

Errro onexit devolver foco

Publicado: Mié Dic 13, 2006 9:13 pm
por jfgimenez
PILO,
el error se debe a esto:
::NN_OFI:setfocus := .f.
SetFocus() es un método, no una propiedad, y por lo tanto no puedes asignarle ningún valor. Por otro lado, lo que tienes que hacer es lo que ya te han dicho: debes retornar .F. cuando quieras que el foco permanezca en el control y Nil o .T. si quieres permitir que el foco pase a otro control.
--
Un saludo,
José F. Giménez
http://www.xailer.com
--

Errro onexit devolver foco

Publicado: Jue Dic 14, 2006 12:19 am
por PILO
Lo que quiero hacer el el Tdbedit es
Cuando se salga del control, compruebe si es correcto el dato de control
si es correcto pasa al siguiente control
si no es correcto se queda en dicho control hasta que sea correcto,
Como puedo hacer esto
Gracias a todos por vuestra ayuda
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:[email=45805ef8@news.xailer.com...]45805ef8@news.xailer.com...[/email]
PILO,
el error se debe a esto:
::NN_OFI:setfocus := .f.
SetFocus() es un método, no una propiedad, y por lo tanto no puedes asignarle ningún valor. Por otro lado, lo que tienes que hacer es lo que ya te han dicho: debes retornar .F. cuando quieras que el foco permanezca en el control y Nil o .T. si quieres permitir que el foco pase a otro control.
--
Un saludo,
José F. Giménez
http://www.xailer.com
--

Errro onexit devolver foco

Publicado: Jue Dic 14, 2006 9:44 am
por jfgimenez
PILO,
Lo que quiero hacer el el Tdbedit es
Cuando se salga del control, compruebe si es correcto el dato de control
si es correcto pasa al siguiente control
si no es correcto se queda en dicho control hasta que sea correcto,
Como puedo hacer esto
Pues tan simple como devolver Nil o .T. si todo es correcto, y .F. si no lo es y quieres que se quede en el control.
P.ej., supongamos que no quieres permitir valores negativos, pues podrí­as poner simplemente:
METHOD TDBEdit1Exit( oSender, oNextCtl ) CLASS TForm1
RETURN oSender:Value >= 0
--
Un saludo,
José F. Giménez
http://www.xailer.com
--

Errro onexit devolver foco

Publicado: Jue Dic 14, 2006 11:11 am
por PILO
Muchas gracias, ya entiendo mejor lo de los metodos, que antes no entendia
Funciona correctamente.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:45810eea$[email=2@news.xailer.com...]2@news.xailer.com...[/email]
PILO,
Lo que quiero hacer el el Tdbedit es
Cuando se salga del control, compruebe si es correcto el dato de control
si es correcto pasa al siguiente control
si no es correcto se queda en dicho control hasta que sea correcto,
Como puedo hacer esto
Pues tan simple como devolver Nil o .T. si todo es correcto, y .F. si no lo es y quieres que se quede en el control.
P.ej., supongamos que no quieres permitir valores negativos, pues podrí­as poner simplemente:
METHOD TDBEdit1Exit( oSender, oNextCtl ) CLASS TForm1
RETURN oSender:Value >= 0
--
Un saludo,
José F. Giménez
http://www.xailer.com
--