Nota: Se puede especificar una cláusula VALID o RANGE pero no
     ambas.
     PICTURE: Cuando especifica la cláusula PICTURE para un mandato GET,
     la cadena de caracteres especificada por <cPatróndeFormatoGet>
     controla el formato y la validación de la edición. El patrón de entrada
     controla el formato de pantalla como un patrón de formato SAY. Controla
     también la forma en que el usuario puede editar la memoria intermedia.
     Una cadena picture está formada por dos partes diferentes: una cadena
     de función y una cadena de plantilla que pueden ser utilizadas
     individual o simultáneamente.

       Cadena de función: Una cadena de función PICTURE especifica
        las reglas de formato o de validación que se aplican a toda la
        visualización del valor GET, y no a posiciones particulares de dicho
        valor. La cadena de función está formada por el carácter @ seguido
        de uno o más caracteres adicionales, cada uno de los cuales tiene un
        significado particular (consulte la tabla siguiente). La cadena de
        función debe ser el primer elemento de una cláusula PICTURE y no
        puede contener espacios. Puede especificarse sola o acompañada de
        una cadena de plantilla. Si se indica, la cadena de función debe
        preceder a la cadena de plantilla y estar separada por un espacio en
        blanco.

        Funciones de Formato GET PICTURE
        ---------------------------------------------------------------------
        Función       Tipo     Acción
        ---------------------------------------------------------------------
        A              C       Sólo permite caracteres alfabéticos
        B              N       Justifica a la izquierda los números mostrados
        C              N       Muestra CR después de los números positivos
        D              D,N     Muestra las fechas en el formato indicado
                               por SET DATE
        E              D,N     Muestra las fechas con el día y el mes
                               invertidos, independientemente del valor actual
                               de SET DATE, y los valores numéricos con coma
                               en vez de punto decimal (estilo europeo)
        K              Todos   Borra el texto por defecto si la primera tecla
                               no es una tecla del cursor
        R              C       Se insertan caracteres en la visualización a
                               través del patrón de formato, pero no se
                               almacenan en la variable
        S<n>           C       Permite desplazamiento horizontal en la lectura
                               de un objeto GET. <n> es un número entero que
                               especifica la anchura de la región.
        X              N       Muestra DB después de los valores negativos
        Z              N       Muestra los ceros como espacios en blanco
        (              N       Muestra los números negativos entre paréntesis,
                               con espacios iniciales
        )              N       Muestra los números negativos entre paréntesis,
                               sin espacios iniciales
        !              C       Convierte en mayúsculas los caracteres
                               alfabéticos
        ---------------------------------------------------------------------

     ■ Cadena de plantilla: Las cadenas de plantilla PICTURE
        especifican las reglas de formato o de validación carácter a
        carácter. La cadena de plantilla está formada por una serie de
        caracteres, algunos de los cuales tienen significados especiales
        (consulte la tabla siguiente). Cada posición de la cadena de
        plantilla corresponde a una posición en el valor GET mostrado. Los
        caracteres de la cadena de plantilla que no tienen significados
        asignados se copian textualmente en el valor GET mostrado. Si
        utiliza la función @R, estos caracteres se insertan entre los
        caracteres del valor mostrado y se eliminan automáticamente cuando
        el valor mostrado se reasigna a <idVar>; en caso contrario
        sobreescriben los caracteres correspondientes del valor mostrado y
        afectan también al valor asignado a <idVar>. Puede especificar una
        cadena de plantilla sola o acompañada de una cadena de función. Si
        utiliza ambas, la cadena de función debe preceder la cadena de
        plantilla e ir separada de ella.

        Símbolos de Plantilla GET PICTURE
        ---------------------------------------------------------------------
        Plantilla       Acción
        ---------------------------------------------------------------------
        A               Sólo permite caracteres alfabéticos
        N               Sólo permite caracteres alfabéticos y numéricos
        X               Permite cualquier carácter
        9               Permite dígitos de cualquier tipo de datos
                        incluidos los signos numéricos
        #               Permite dígitos, signos y espacios con cualquier
                        tipo de datos
        L               Sólo permite T, F, Y o N
        Y               Sólo permite Y o N
        !               Convierte en mayúsculas los caracteres alfabéticos
        $               Muestra un signo de dólar en las posiciones de los
                        espacios iniciales de un valor numérico
        *               Muestra un asterisco en lugar de un espacio en blanco
                        en un valor numérico
        .               Muestra un punto decimal
        ,               Muestra una coma
        ---------------------------------------------------------------------

     SCOREBOARD: Si se rechaza un nuevo valor porque no supera la
     comprobación RANGE*, o porque es un valor de fecha de formato
     incorrecto, aparece un mensaje en la pantalla. Este mensaje aparece en
     el área SCOREBOARD y se puede activar o desactivar con el mandato SET
     SCOREBOARD.

     Salida con la tecla Esc: Si el usuario sale del GET pulsando la
     tecla Esc, la variable GET vuelve a tomar el valor que tenía antes de
     entrar en el GET y se termina el mandato READ. No se efectúa ninguna
     validación posterior. Active o desactive esta función con el mandato
     SET ESCAPE.

     Procedimientos SET KEY: El mandato SET KEY especifica un
     procedimiento que se ejecuta al pulsar una tecla determinada durante un
     mandato READ. Cuando termina un procedimiento SET KEY, GET se reactiva
     y el cursor vuelve a su posición anterior.

     Tiempo de vida de un objeto GET: Los objetos Get, al igual que las
     matrices, existen mientras existan referencias activas a ellos en
     alguna parte del programa actual. Normalmente, sólo la matriz GetList
     contiene una referencia a los objetos Get; el GET se libera cuando
     GetList se libera o se reasigna. Al igual que el mandato READ, los
     mandatos CLEAR y CLEAR GETS asignan una matriz vacía a GetList, a menos
     que especifique la cláusula SAVE.

     Asignación: Cada GET está asociado a una variable, <idVar>,
     mediante el mandato @...GET. En varios momentos del proceso de edición,
     puede asignarse a <idVar> el valor actual de la memoria intermedia del
     objeto Get. Esto ocurre en los casos siguientes:

      Cuando el usuario pulsa una tecla de salida antes de que se
        haya ejecutado la validación de la expresión.

      Cuando el usuario pulsa una tecla activada mediante SET KEY.

     Asimismo, la memoria intermedia del objeto Get se actualiza con el
     contenido de <idVar> y se vuelve a mostrar a intervalos diferentes:

      Cuando termina un procedimiento SET KEY.

      Cuando se evalúa una expresión WHEN

      Cuando se evalúa una expresión VALID

     Esto permite asignar explícitamente <idVar> dentro de cualquiera de
     estas operaciones. Si desea más información, consulte la nota
     siguiente.

     Visualización y coordenadas GET: Cuando crea un objeto Get
     utilizando el mandato @...GET, las coordenadas de la fila y columna en
     las que se muestra inicialmente GET se almacenan en el objeto Get.
     Cuando se ejecuta el mandato @...GET, el nuevo GET aparece en <nFila>
     y <nColumna>, a menos que especifique una cláusula SAY que sitúe al GET
     de forma que haya una columna entre el último carácter mostrado por SAY
     y el primer carácter mostrado por GET (o de los DELIMITERS).

     Si se ha establecido SET DELIMITERS ON, cuando se ejecuta el mandato
     @...GET, los caracteres delimitadores actuales aparecen en uno de los
     lados del GET inicialmente mostrado y la coordenada de columna del GET
     se ajusta como corresponde. Recuerde que los delimitadores no son
     atributos del objeto Get sino que se visualizan simplemente como lo
     hace la cláusula SAY.

     Si se ha establecido SET INTENSITY ON, los GET se muestran inicialmente
     en el color actual no destacado (o en el color destacado si éste no se
     ha especificado). Durante un READ, el GET activo se muestra en el color
     destacado mientras que los restantes GET aparecen en el color no
     destacado. Si se ha establecido SET INTENSITY OFF, todos los GET
     aparecen en el color estándar.

     Cuando aparece un GET, la anchura del valor mostrado se determina
     mediante la longitud del valor de <idVar> o por el número de posiciones
     en <cPatróndeFormatoGet> si especifica la cláusula PICTURE. Si
     especifica la función @S como parte de <cPatróndeFormatoGet>, el
     argumento @S controla la anchura del valor visualizado.

 Notas

     ■ WHEN y VALID: Las expresiones especificadas en las cláusulas
        WHEN y VALID pueden ser de complejidad arbitraria e incluir llamadas
        a funciones definidas por el usuario. Esto es útil para asignar
        acciones automáticas a la activación o desactivación de un GET.

     ■ Asignación de automáticas <idVar>: Gracias a las funciones de
        visualización y actualización  automáticas de un objeto Get durante
        un mandato READ, puede realizar asignaciones específicas al<idVar>
        del objeto Get en una expresión WHEN o VALID. Es posible asignar
        directamente la variable por su nombre en la expresión de validación
        o, en variables privadas, públicas, locales o estáticas, pasando una
        referencia a una función <idVar>. La función puede asignar entonces
        <idVar> asignando el parámetro formal correspondiente. Si <idVar> es
        un campo, es visible globalmente y puede ser asignado mediante su
        nombre en una función invocada por la expresión de validación.

        Cuando incluya un GET en una función llamada, no incluya una
        variable de campo que también se llame <idVar>. Las referencias de
        campo tienen prioridad sobre las variables públicas, por lo que se
        ignoraría la variable pública <idVar>.

     ■ Ayuda contextual en cada GET: Puede utilizar un procedimiento
        SET KEY para mostrar el texto de ayuda correspondiente a un objeto
        GET. En el procedimiento SET KEY, la función READVAR() determina la
        <idVar> asociada al objeto Get actual. Utilice esta información para
        mostrar el texto de ayuda adecuado. Recuerde que cuando se carga un
        programa compilado con CA-Clipper, la tecla F1 activa automáticamente un
        procedimiento o función Help definido por el usuario.

     ■ SET DEVICE TO PRINTER: SET DEVICE TO PRINTER no envía a
        la impresora o a un fichero la visualización de un objeto Get
        mostrado con el mandato @...GET.

 Ejemplos

     Este ejemplo muestra la utilización de una cláusula VALID para
        validar los datos de un GET:

        LOCAL nNumero := 0
        @ 10, 10 SAY "Introduzca un número:" ;
           GET nNumero VALID nNumero > 0

      Este ejemplo muestra la forma de pasar un bloque de código con
        una cláusula VALID. El parámetro oGet es el objeto Get actual. Udf()
        cambia el valor del GET:

        LOCAL ListaGet := {}, cVar := SPACE(12)
        CLS
        @ 10, 10 GET cVar  VALID { |oGet| Udf1( oGet ) }
        READ
        .
        .
        .
        * Udf( <oGet> ) --> .T.

        FUNCTION Udf1( oGet )

        IF "prueba" $ oGet:BUFFER          // Comparar el contenido de
                                           // la memoria intermedia
        oGet:varPut( "nuevo valor " )      // Cambiar el contenido
        ENDIF

        RETURN .T.

      Este ejemplo utiliza una cláusula WHEN para prohibir la
        entrada en algunos GET basándose en el valor de otro GET. En este
        ejemplo, al introducir Y en el campo Asegurado se indica que el
        cliente ha sido asegurado y se le permite introducir la información
        correspondiente. Si el cliente no tiene seguro, el cursor pasa al
        campo Accidente:

        @ 10, 10 GET Asegurado PICTURE "Y"
        @ 11, 10 GET NumSeguro WHEN Asegurado
        @ 12, 10 GET CompSeguro WHEN Asegurado
        @ 13, 10 GET Accidente PICTURE "Y"
        READ

      Este es un ejemplo de un GET en un área de trabajo secundaria:

        USE Factura NEW
        APPEND BLANK
        USE Inventario NEW
        @ 1, 1 GET Factura->NoCliente
        READ

      Este ejemplo utiliza la función @K para sugerir un valor de
        entrada por defecto, pero lo borra si la primera tecla pulsada no es
        una tecla de cursor o Intro:

        LOCAL cFichero := "Cuentas"
        @ 1, 1 SAY "Introduzca el fichero" GET cFichero PICTURE "@K"
        READ

      Este es un ejemplo de un mandato READ anidado que utiliza
        Getlist un Getlist y ámbito lexicográfico:

        #include "Inkey.ch"
        //
        // Local sólo en esta función
        LOCAL GetList   := {}
        LOCAL cNombre   := SPACE( 10 )
        //
        CLS
        SETKEY( K_F2, { || InfoVar() } )   // tecla activa para
                                           // READ especial
        //
        // Objeto Get añadido a getList
        // actúa en la GetList local
        @ 10, 10 SAY "Nombre" GET cNombre
        READ
        //
        RETURN NIL

        /***
        *  InfoVar() ---> NIL
        */FUNCTION InfoVar()
        //
        LOCAL GetList    := {}             // Local sólo en
        LOCAL cInfoExtra := SPACE( 30 )    // esta función
        //
        // El objeto Get añadido a GetList
        // actúa en la GetList local
        @ 12, 10 SAY "Nota: " GET cInfoExtra
        READ
        //
        RETURN NIL


 Ficheros   La biblioteca asociada es CLIPPER.LIB.

 To download this example - click here.

See Also: ?|?? @...SAY CLEAR COL() PCOL() PROW() READ