Fecha actual Vie May 17, 2024 3:23 pm

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 2 mensajes ] 
Autor Mensaje
 Asunto: Keyboard
NotaPublicado: Lun Ene 21, 2008 9:39 am 

Registrado: Jue Nov 03, 2005 7:20 pm
Mensajes: 132
Ubicación: Teruel(España)
Hola a todos.
A veces el intentar hacer el mismo programa con otro compilador hay que replanterase algunas cosas, pero con clipper y Alaska en texto, tenia el dBedit, por defecto estaba en modo lectura, pero al pulsar enter entraba en modo edit, y lo mismo si se pulsaba un numero (metiendo en el edit con Keyboard la tecla numerica pulsada)y al pulsar Enter saltaba a la linea siguiente, con c3 no lo consigo, era algo asi:
... // pul valor de tecla capturada con Lastkey
CASE pul>=48.AND.pul<=57 .AND. x=2
KEYBOARD CHR(13)+CHR(pul)
RETURN(1)
CASE pul=13 .AND. x=2 //Columna con el importe
SETCURSOR(1)
READEXIT(.T.)
@ROW(),COL() GET FTEMPO->IMPORTE
READ
REPLACE FTITULA->IMPORTE WITH FTEMPO->IMPORTE
READEXIT(.F.)
SETCURSOR(0)
KEYBOARD CHR(24)
RETURN(1)
...
con C3 lo he intentado así
/*
* Evento OnKeyDown.
*/
METHOD DbGrid1OnKeyDown( oSender, nKey ) CLASS TForm5
If nKeY = 13 .and. ::LabeledEdit6:ReadOnly = .F.
TEMPO->IMPORTE := ::LabeledEdit6:caption
FTITU->IMPORTE := ::LabeledEdit6:caption
::DbGrid1:Repaint()
::CarRec()
::cEstado:=""
::EnabledContro33("APAGADO")

SKIP
endif
if (nkey >= 48 .and. nkey <= 57) .or. (nkey >=96 .and. nkey <=105)
* if nkey >=96 .and. nkey <=105
* nkey = nkey -48
* endif
* tecla 48=0 49=1...57=9

::LabeledEdit6:ReadOnly := .F.
::LabeledEdit6:setFocus()
keyboard(chr(nkey))
endif
return

No funciona, entra en modo Edit pero no reconoce la tecla númerica pulsada, es mas recibe distinto codigo si se pulsa el teclado numerico a si es el teclado alfanumerico.
Un saludo


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Vie Feb 08, 2008 2:08 pm 

Registrado: Jue Nov 03, 2005 7:20 pm
Mensajes: 132
Ubicación: Teruel(España)
Siguiendo con el tema Keyboard, cosa mu util, he montado esto

METHOD DbGrid1OnKeyDown( oSender, nKey ) CLASS TForm5
IF ::DbGrid1:col() != 2 // sino es la columna importe ni caso
RETURN
ENDIF
if nKey = 13 .and. ::LabeledEdit6:ReadOnly // Activo editor al pulsa Enter

::LabeledEdit6:ReadOnly := .F.
::LabeledEdit6:setFocus()
::kEnter := 1
return
endif

if (nkey >= 48 .and. nkey <= 57) .or. (nkey >=96 .and. nkey <=105)
if nkey >=96 .and. nkey <=105 //el teclado numero no es igual que el alfa
nkey = nkey -48
endif
+ ::LabeledEdit6:ReadOnly := .F.
* tecla 48=0 49=1...57=9

::LabeledEdit6:caption:= Val(CHR(nKey)) //un sistema
* ::LabeledEdit6:caption:= Val(CHR(nKey)+".00") // otro sistema
::kEnter := 2
::LabeledEdit6:setFocus()
::LabeledEdit6:SelStart := 1 //poner el cursor en el punto
::LabeledEdit6:SelLength := 2 seleccion los decimales

endif

return

Se vuelve loco con los decimales o no deja teclear el punto o se borra todo he añadido esta otra funcion que detecta el punto y le añade los decimales es una ñapa pero parece funcionar
/*
* Evento OnKeyDown.
*/
METHOD LabeledEdit6OnKeyDown( oSender, nKey ) CLASS TForm5

If ::kEnter != 2
return
endif

If CHR(nKey) != "," .AND. CHR(nKey) != "."
return
Endif

::kEnter := 3

::LabeledEdit6:caption := VAL(str(::LabeledEdit6:caption)+".00")
::LabeledEdit6:SelStart := len(ltrim(str(::LabeledEdit6:caption)))-2
::LabeledEdit6:SelLength := 3

return

Si alguien tiene alguna solucion mas sencilla o entiende como funciona el SelStart y el SelLengt
Un saludo


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 2 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron