Page 1 of 1

Otra Sugerencia GET

PostPosted: Tue Jul 04, 2006 1:06 pm
by manuramos
Hace algunos meses colgué algunas sugerencias para TGET's propios, que, como nadie me ha dicho nada en contra, ahí va otra que a un buen amigo mío le ha gustado mucho.

Consiste en que en un Get cualquiera se pueda escribir consecutivamente el contenido de un array pulsando la barra espaciadora. Es decir, tengo un array con cuatro o cinco datos (pocos), y en el GET pulsando "Espacio" se escribe el primer elemento del array. Pulso "espacio" otra vez y se escribe el segundo, etc.. todo ello sin perder la capacidad de poder escribir en el GET lo que queramos. La única condición para rotar el array dentro del GET es que el contenido de éste esté vacio o contenga uno de los elementos del ARRAY. Es un buen sustituto del COMBOBOX.

Yo lo utilizo en una ficha de personal para los GET's donde algunos valores se repiten mucho. Por ejemplo, para Hobbies tengo el array: {"DeporteS","Informática","Jardinería","Lectura","Maquetas"}. Cuando se va rellenar la ficha, si al socio le gusta leer, pulso cuatro veces la barra espaciadora. Si tuviese un hobby distinto, simplemente lo escribo.

Por si a alguién le interesa, este es el código:

1) añadir los datas:

DATA aVals AS ARRAY
DATA nVals AS NUMERIC INIT 1

2) modificar el método:

METHOD KeyChar( nKey, nFlags ) CLASS MIGET
...
...
IF ::aVals # NIL .AND. nKey = VK_SPACE // RECORRIDO TABLA CON 'ESPACIO'
nAt := ASCAN(::aVals,{ |a| RTRIM(a) == RTRIM(::cText) })
nLong := LEN(::cText)
IF Empty(::cText) .OR. nAt > 0
::nVals := IF(nAt = LEN(::aVals), 1, nAt+1)
::cText( PADR(::aVals[::nVals],nLong) )
::SetPos( 1 )
RETURN 0
ENDIF
ENDIF
...
...
RETURN Super:KeyChar( nKey, nFlags )

Espero que os guste.