Problema con WMKeyDown - algo queda seteado y no se que hacer
Publicado: Jue Jun 06, 2013 1:45 am
Intentaré explicar esto que me tiene para atrás.
en un form tengo un dateedit, una grilla y un par de componentes más.
tengo definidas un par de teclas que llaman a una pantalla para elegir
un registro, hace un par de cosas y sigue, el código es el de mas abajo.
METHOD WMKeyDown( nKey, nFlags ) CLASS TTurnosABM
/* Aca se definen las teclas de función que deberían estar visibles
solo en turnos */
local identidadturno := ::identidadturno
::oTimerRefrescarGrilla:lEnabled := .f.
IF nKey == VK_F3
//::oEditCodAgenda:Setfocus() // F3 ->
Buscar agenda
identidadturno :=
::oEntidadesturno:BuscarEntidadTurno(alltrim(::oEditCodAgend a:Value), "C")
ELSEIF nKey == VK_F9
identidadturno :=
::oEntidadesturno:BuscarEntidadTurno(alltrim(::oEditAgenda:V alue), "D")
ENDIF
IF identidadturno > 0
::identidadturno := identidadturno
::oEntidadesturno:DevolverPorID(::identidadturno)
::oEditCodAgenda:Value := ::oEntidadesturno:codigo
::PostElegirEntidadTurno()
ENDIF
::oTimerRefrescarGrilla:lEnabled := .t.
RETURN Super:WMKeyDown(nKey, nFlags)
la rutina del usuario es ingresar una fecha en el dateedit y luego
presionar F3 o F9 para elegir la agenda de turnos que quiere gestionar,
todo bien pero luego de haber presionado estas teclas una vez cuando se
dirije al dateedit para cambiar de día apenas tipea un numero (un
digito) sale por el onexit del dateedit por ende es un embole por que te
deja tipear la fecha pero por cada digito te saca.
tiene cierta relacion con algunos comentarios en el foro sobre por que
se ejecutan dos veces algunos onexit de algunos controles
es cierto tambien que ::PostElegirEntidadTurno() hace un monton de cosas
e interactua y refresca controles en pantalla pero que tiene que ver eso
con que el dateedit quede atrapado de esa forma, probé haciendo RETURN 0
como se comenta por el foro, no se que se yo me tiene amargado este
tema. para colmo preparar un ejemplo es casi imposible.
gracias.
en un form tengo un dateedit, una grilla y un par de componentes más.
tengo definidas un par de teclas que llaman a una pantalla para elegir
un registro, hace un par de cosas y sigue, el código es el de mas abajo.
METHOD WMKeyDown( nKey, nFlags ) CLASS TTurnosABM
/* Aca se definen las teclas de función que deberían estar visibles
solo en turnos */
local identidadturno := ::identidadturno
::oTimerRefrescarGrilla:lEnabled := .f.
IF nKey == VK_F3
//::oEditCodAgenda:Setfocus() // F3 ->
Buscar agenda
identidadturno :=
::oEntidadesturno:BuscarEntidadTurno(alltrim(::oEditCodAgend a:Value), "C")
ELSEIF nKey == VK_F9
identidadturno :=
::oEntidadesturno:BuscarEntidadTurno(alltrim(::oEditAgenda:V alue), "D")
ENDIF
IF identidadturno > 0
::identidadturno := identidadturno
::oEntidadesturno:DevolverPorID(::identidadturno)
::oEditCodAgenda:Value := ::oEntidadesturno:codigo
::PostElegirEntidadTurno()
ENDIF
::oTimerRefrescarGrilla:lEnabled := .t.
RETURN Super:WMKeyDown(nKey, nFlags)
la rutina del usuario es ingresar una fecha en el dateedit y luego
presionar F3 o F9 para elegir la agenda de turnos que quiere gestionar,
todo bien pero luego de haber presionado estas teclas una vez cuando se
dirije al dateedit para cambiar de día apenas tipea un numero (un
digito) sale por el onexit del dateedit por ende es un embole por que te
deja tipear la fecha pero por cada digito te saca.
tiene cierta relacion con algunos comentarios en el foro sobre por que
se ejecutan dos veces algunos onexit de algunos controles
es cierto tambien que ::PostElegirEntidadTurno() hace un monton de cosas
e interactua y refresca controles en pantalla pero que tiene que ver eso
con que el dateedit quede atrapado de esa forma, probé haciendo RETURN 0
como se comenta por el foro, no se que se yo me tiene amargado este
tema. para colmo preparar un ejemplo es casi imposible.
gracias.