@...SAY
 Exibe dados em uma linha e coluna especificadas
------------------------------------------------------------------------------

 Sintaxe

     @ <nLin>, <nCol>
        [SAY <exp> [PICTURE <cSayPicture>]]

 Argumentos

     <nLin> e <nCol> sao as coordenadas de linha e coluna da saída.
     Os valores de linha podem variar entre zero e MAXROW() para o
     dispositivo corrente (DEVICE) se este for a tela ou entre zero e 32.776
     caso o dispositivo (DEVICE) seja PRINTER.  O mesmo vale para as
     colunas.

     SAY <exp> exibe o resultado de uma expressao de qualquer
     tipo--inclusive um campo memo--ao DEVICE corrente.

     PICTURE <cSayPicture> define a máscara para a saída de exp.  O
     Clipper fornece dois mecanismos de controle de formataçao: funçoes e
     templates.  Funçoes aplicam-se ao SAY inteiro, enquanto que templates
     mascaram caracteres posiçao por posiçao.

 Descriçao

     @...SAY é um comando de tela que exibe os resultados de <exp> para tela
     ou impressora nas coordenadas de linha e coluna especificadas.  Ele
     pode opcionalmente formatar a saída usando a cláusula PICTURE.  @...SAY
     é usado para criar telas de entrada de dados ou relatórios que podem
     ser enviados para a tela ou impressora.

     Quando um @...SAY é executado, a saída de <exp> é enviada ao
     dispositivo corrente definido por SET DEVICE.  O DEVICE corrente pode
     ser SCREEN (tela) ou PRINTER (impressora).  De forma diferente de
     outros comandos de console, @...SAY nao é ecoado em tela quando está
     sendo enviado para a impressora e SET CONSOLE nao tem efeito na saída
     de @...SAY em tela.

     Se o DEVICE corrente é SCREEN (o padrao do sistema), @...SAY exibe a
     saída em tela deixando o cursor uma coluna à direita do último
     caractere mostrado.  ROW() e COL() sao atualizados.  Exibiçao que saia
     fora da tela definida por MAXROW() e MAXCOL() faz com que o cursor seja
     posicionado fora da tela visível.  Todas as saídas de @...SAY sao
     exibidas na cor padrao.  Consulte a referência a SETCOLOR(), no
     capítulo Funçoes Padrao neste livro para maiores informaçoes sobre cor.

     Se o dispositivo corrente (DEVICE) for impressora (PRINTER), a saída é
     direcionada para esta em <nLin> adicionando ao valor de SET MARGIN e
     <nCol>.  A cabeça de impressao sofre avanço para uma coluna à direita
     do último caractere impresso.  PROW() e PCOL() sao atualizados conforme
     esta posiçao.  Comandos @...SAY para a impressora comportam-se de uma
     forma levemente diferente que na tela quando a saída é endereçada para
     a impressora numa linha e coluna menor que a corente em PROW() e
     PCOL().

       Caso <nLin> seja menor que PROW(), um EJECT automático
        (CHR(12)) é enviado à impressora seguido pelo número de caracteres
        line-feed (CHR(10)) necessários para posicionar a cabeça de
        impressao em <nLin>.

       Caso <nCol> inclua o valor SET MARGIN menor que PCOL(), um
        caractere carriage return (CHR(13)) e o número de espaços
        necessários para posicionar <exp> em <nCol> sao enviados à
        impressora.

     Para evitar este comportamento de forma a enviar códigos de controle
     para a impressora, ou por qualquer outra razao, você pode usar SETPRC()
     para reconfigurar PROW() e PCOL() para novos valores.  Veja a
     referência sobre SETPRC() no capítulo Funçoes Padrao neste livro para
     mais informaçoes.

     Se DEVICE corrente for PRINTER, a saída de comandos @...SAY pode ser
     redirecionada para um arquivo usando SET PRINTER TO <xcArquivo>.

     Como citado acima, @...SAY pode ter sua saída formatada usando a
     cláusula PICTURE com <cSayPicture>.  Isto executa a mesma açao que
     TRANSFORM().  Uma <cSayPicture> pode consistir em uma funçao e/ou
     template.  Uma funçao PICTURE impoe uma regra de como @...SAY deve ser
     exibido como um todo.  Um template PICTURE define o tamanho da saída de
     @...SAY, e a regra de formataçao dentro da saída.

       Funçoes: Uma funçao PICTURE é um símbolo precedido do
        símbolo @.  Um símbolo de template segue a funçao, e deve ser
        precedido de um espaço.  Note que mais de uma funçao pode ser
        aplicada dentro da mesma PICTURE.  A tabela seguinte resume as
        opçoes disponíveis para as funçoes PICTURE:

        Tabela 4-3: PICTURES para SAY e TRANSFORM()
        ---------------------------------------------------------------------
        Funçao      Açao
        ---------------------------------------------------------------------
        B           Exibe números alinhados à esquerda
        C           Exibe CR após números positivos
        D           Exibe datas no formato SET DATE
        E           Exibe datas e números no formato British
        R           Caracteres nao template serao inseridos
        X           Exibe DB após números negativos
        Z           Exibe zeros como brancos
        (           Coloca números negativos entre parênteses
        !           Converte caracteres alfabéticos para maiúsculas
        ---------------------------------------------------------------------

       Templates: Símbolos de template seguem as funçoes no
        string de PICTURE se forem especificados.  Cada posiçao no fluxo de
        entrada ou saída é mapeada para o símbolo na mesma posiçao no string
        template.  Clipper fornece vários símbolos os quais estao
        discriminados na tabela da página seguinte:

        Tabela 4-4: Símbolos Template para SAY e TRANSFORM()
        ---------------------------------------------------------------------
        Template       Açao
        ---------------------------------------------------------------------
        A,N,X,9,#      Exibe dígitos em qualquer tipo de dados
        L              Exibe lógicos como "T" ou "F"
        Y              Exibe lógicos como "Y" ou "N"
        !              Converte um caractere alfabético para maiúscula
        $              Exibe o sinal de dolar em lugar de espaços à esquerda
                       de um numérico
        *              Exibe asteriscos em lugar de espaços à esquerda de um
                       numérico
        .              Especifica a posiçao do ponto decimal
        ,              Especifica a posiçao da vírgula
        ---------------------------------------------------------------------

        Outros caracteres especificados no template sobreescrevem o
        caractere na mesma posiçao no stream fonte e saída.  Se, entretanto,
        você usar a funçao R, símbolos nao-template especificados serao
        inseridos para exibiçao.

 Exemplos

       O exemplo seguinte demonstra o uso de @...SAY com uma
        cláusula PICTURE para exibir saída formatada:

        nNetIncome = 7125.50
        nNetLoss = -125.50
        cPhone = "2134567890"
        cName = "Kate Mystic"
        //
        @ 1, 1 SAY nNetIncome PICTURE "@E 9,999.99"  //Resulta: 7,125.50
        @ 2, 1 SAY nNetLoss PICTURE "@)"             //Resulta: (125.50)
        @ 3, 1 SAY cPhone PICTURE "@R (999)999-9999" //Resulta: (213)456-7890
        @ 4, 1 SAY cName PICTURE "@!"                //Resulta: KATE MYSTIC

       Este exemplo é uma pequena impressao de etiquetas que
        utiliza  SET DEVICE para direcionar para impressora e SETPRC() para
        suprimir EJECTs automáticos:

        USE Salesman INDEX Salesman NEW
        SET DEVICE TO PRINTER
        DO WHILE !EOF()                        // Imprime todos registros
           @ 2, 5 SAY RTRIM(FirstName) + " " + LastName
           @ 3, 5 SAY Street
           @ 4, 5 SAY RTRIM(City) + ", " + State + "  " + PostalCode
           @ 6, 0 SAY SPACE(1)                 // Para a base da etiqueta
           SETPRC(0, 0)                        // Suprime ejeçao de página
           SKIP                                // Próximo registro
        ENDDO
        SET DEVICE TO SCREEN
        CLOSE Salesman

 Arquivos:  BIblioteca CLIPPER.LIB.
 To download this example - click here.

See Also: @...GET SET DEVICE COL() PCOL() Códigos PICTURE