Exemplo para o uso de entrada de dados estilo TABSTRIP

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Exemplo para o uso de entrada de dados estilo TABSTRIP

Mensagem por Pablo César »

Decidí abrir aqui um tópico novo para que sirva de exemplo e possa ser mais fácil de ser localizado.
Ppois extraí do tópico de rolagem de telas, o que me insentivou a buscar outras formas de edição/exbição em tela, pois a falta de espaço em tela quando é exigido muitos itens na hora do cadastro.

Eu achei uma outra forma modo FICHA que permite alternar (não sei o nome que se dá a este tipo de apresentação de dados), é aquele que tem orelhinhas ou ABAS. E disponibilizo para apreciação de TODOS:

Código: Selecionar todos

/*PROGRAMA   : FICHA.PRG
AUTOR      : Pablo Cesar Arrascaeta
RELEASE   : 01/06/2010
COMENTARIO : Ficha cadastral - Exemplo para o uso de entrada de dados estilo TABSTRIP
                               com auxilio de mouse
             Clipper 5.2 + CT.LIB + MOUSE.LIB
*/

#include "mouse.ch"

SET CONFIRM OFF
SET CENTURY ON
SET DATE TO BRITISH
SET CURSOR OFF
SETCOLOR("W/N")
CLS
@ 24,00 SAY SPACE(80) COLOR "N/W"
@ 24,10 SAY "³" COLOR "N/W"
@ 24,01 SAY "Esc-Sa¡da" COLOR "N/W"
@ 24,69 SAY "³" COLOR "N/W"
@ 24,71 SAY "F1-Ajuda" COLOR "N/W"
aTELA_LIN:={{},{},{},{}}
AADD(aTELA_LIN[1],"")
AADD(aTELA_LIN[1],"")
AADD(aTELA_LIN[1],"")
AADD(aTELA_LIN[1],"   C¢digo do cliente..:                                           ")
AADD(aTELA_LIN[1],"   Nome completo......:                                           ")
AADD(aTELA_LIN[1],"   Data de nascimento.:                                           ")
AADD(aTELA_LIN[1],"   Data de inscri‡„o..:                                           ")
AADD(aTELA_LIN[1],"")
AADD(aTELA_LIN[1],"")
AADD(aTELA_LIN[1],"")
AADD(aTELA_LIN[1],"")

AADD(aTELA_LIN[2],"")
AADD(aTELA_LIN[2],"")
AADD(aTELA_LIN[2],"  Logradouro..:                                                   ")
AADD(aTELA_LIN[2],"  Bairro......:                                                   ")
AADD(aTELA_LIN[2],"  Cidade......:                                                   ")
AADD(aTELA_LIN[2],"  C.E.P.......:                                                   ")
AADD(aTELA_LIN[2],"  Casa propria:                                                   ")
AADD(aTELA_LIN[2],"")
AADD(aTELA_LIN[2],"")
AADD(aTELA_LIN[2],"")
AADD(aTELA_LIN[2],"")

AADD(aTELA_LIN[3],"")
AADD(aTELA_LIN[3],"ÚÄÄÄÄÄÄ Nome completo ÄÄÄÄÄÄ¿Ú Grau de parentesco ¿")
AADD(aTELA_LIN[3],"³                           ³³                    ³")
AADD(aTELA_LIN[3],"³                           ³³                    ³")
AADD(aTELA_LIN[3],"³                           ³³                    ³")
AADD(aTELA_LIN[3],"³                           ³³                    ³")
AADD(aTELA_LIN[3],"³                           ³³                    ³")
AADD(aTELA_LIN[3],"³                           ³³                    ³")
AADD(aTELA_LIN[3],"³                           ³³                    ³")
AADD(aTELA_LIN[3],"³                           ³³                    ³")
AADD(aTELA_LIN[3],"ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ")

AADD(aTELA_LIN[4],"")
AADD(aTELA_LIN[4],"ÚÄÄÄ Banco ÄÄ¿Ú Ag  Conta Corrente ¿")
AADD(aTELA_LIN[4],"³BRADESCO    ³³    ³                ³")
AADD(aTELA_LIN[4],"³HSBC        ³³    ³                ³")
AADD(aTELA_LIN[4],"³DO BRASIL   ³³    ³                ³")
AADD(aTELA_LIN[4],"³CEF         ³³    ³                ³")
AADD(aTELA_LIN[4],"³            ³³    ³                ³")
AADD(aTELA_LIN[4],"³            ³³    ³                ³")
AADD(aTELA_LIN[4],"³            ³³    ³                ³")
AADD(aTELA_LIN[4],"³            ³³    ³                ³")
AADD(aTELA_LIN[4],"ÀÄÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ")

TECLA := 0
BO_TAO := 0
LIN := 0
COL := 0
nOp:=1
DO WHILE .T.
   MENSAGEM("Utilize o mouse ou as setas "+CHR(26)+" "+CHR(27)+" e <Enter> seleciona")
   TELA(nOp)

   MOUSE( LIGA )
   DO WHILE (TECLA := INKEY() ) == 0
      IF TECLA = 0
         MOUSE( @BO_TAO, @LIN, @COL )
      ENDIF
      IF BO_TAO = M_ESQUERDO .OR. BO_TAO = M_OS_DOIS
         DADO_CUR := SUBS( SAVESCREEN( LIN, COL, LIN, COL ), 1, 1 )
         DO CASE
            CASE DADO_CUR = CHR( 254 ) .OR. BO_TAO = M_OS_DOIS
                 TECLA := T_ESC
            CASE LIN = 24
                 IF ( COL >= 71 .AND. COL <= 78 )
                    TECLA := T_F1
                 ELSEIF ( COL >= 01 .AND. COL <= 9 )
                    TECLA := T_ESC
                 ELSE
                    DO CASE
                       CASE DADO_CUR = CHR(26)
                            TECLA := 24
                       CASE DADO_CUR = CHR(27)
                            TECLA := 5
                       CASE DADO_CUR = CHR(13)
                            TECLA := 13
                    ENDCASE
                 ENDIF
            CASE ( COL >= 10 .AND. COL <= 73 ) .AND. ( LIN >= 7 .AND. LIN <= 17 )
                 TECLA := T_ENTER
            CASE LIN >=4 .AND. LIN <=7
                 DO CASE
                    CASE COL>=10 .AND. COL<=22
                         TECLA=49
                    CASE COL>=23 .AND. COL<=35
                         TECLA=50
                    CASE COL>=36 .AND. COL<=48
                         TECLA=51
                    CASE COL>=49 .AND. COL<=61
                         TECLA=52
                    OTHERWISE
                         BEEP_MOUSE()
                         LOOP
                 ENDCASE
            OTHERWISE
                 BEEP_MOUSE()
                 LOOP
         ENDCASE
         EXIT
      ELSEIF BO_TAO = M_DIREITO
         TECLA := T_ENTER
         EXIT
      ENDIF
   ENDDO
   MOUSE( DESLIGA )

   // nKey:=INKEY(0)

   DO CASE
      CASE TECLA=1                // Home
      nOp:=1
      CASE TECLA=6                // End
      nOp:=3
      CASE TECLA=13               // Enter
           EDITAR(nOp)
           // Pode ser aplicado a edi‡Æo com GETs e TBROWSEs
      CASE TECLA=4 .OR. TECLA=24  // Right ou Down
      nOp:=nOp+1
           IF nOp>4
         nOp:=1
      ENDIF
      CASE TECLA=19 .OR. TECLA=5  // Left ou Up
      nOp:=nOp-1
      IF nOp<1
              nOp:=4
      ENDIF
      CASE TECLA=27              // Esc
      EXIT
      CASE TECLA=28              // F1
           HELP(PROCNAME(),READVAR(),PROCLINE())
      CASE TECLA=49              // 1
           nOp:=1
      CASE TECLA=50              // 2
           nOp:=2
      CASE TECLA=51              // 3
           nOp:=3
      CASE TECLA=52              // 4
           nOp:=4
   ENDCASE
ENDDO



FUNCTION TELA(nOp)
@ 04,10 SAY "ÚÄÄÄÄÄÄÄÄÄÄÄ.ÄÄÄÄÄÄÄÄÄÄÄÄ.ÄÄÄÄÄÄÄÄÄÄÄÄ.ÄÄÄÄÄÄÄÄÄÄÄÄ¿" COLOR "W+/BG"
@ 05,10 SAY "³ Cadastro  ³ Residencia ³ Dependentes³Ref.Bancaria³" COLOR "W+/BG"
DO CASE
   CASE nOp=1
        @ 04,10 SAY "ÉÍÍÍÍÍÍÍÍÍÍÍ»" COLOR "W+/B"
        @ 05,10 SAY "º Cadastro  º" COLOR "W+/B"
        @ 06,07 SAY "ÉÍͼ           ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»" COLOR "W+/B"
   CASE nOp=2
        @ 04,22 SAY "ÉÍÍÍÍÍÍÍÍÍÍÍÍ»" COLOR "W+/B"
        @ 05,22 SAY "º Residencia º" COLOR "W+/B"
        @ 06,07 SAY "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍͼ            ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»" COLOR "W+/B"
   CASE nOp=3
        @ 04,35 SAY "ÉÍÍÍÍÍÍÍÍÍÍÍÍ»" COLOR "W+/B"
        @ 05,35 SAY "º Dependentesº" COLOR "W+/B"
        @ 06,07 SAY "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ            ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»" COLOR "W+/B"
   CASE nOp=4
        @ 04,48 SAY "ÉÍÍÍÍÍÍÍÍÍÍÍÍ»" COLOR "W+/B"
        @ 05,48 SAY "ºRef.Banc riaº" COLOR "W+/B"
        @ 06,07 SAY "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ            ÈÍÍÍÍÍÍÍÍÍÍÍÍ»" COLOR "W+/B"
ENDCASE
FOR I=1 TO 11
    @ 06+I,07 SAY "º"+PADC(aTELA_LIN[nOp,I],66)+"º" COLOR "W+/B"
NEXT
@ 18,07 SAY "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ" COLOR "W+/B"
RETURN NIL

FUNCTION EDITAR(nOp)
FOR I=1 TO 11
    @ 06+I,08 SAY PADC(aTELA_LIN[nOp,I],66) COLOR "GR+/B"
NEXT
DO CASE
   CASE nOp=1
        // Faz GETs normais
        ed_tela1()
   CASE nOp=2
        INKEY(0) // Substituir pelo READ
   CASE nOp=3
        INKEY(0) // Substituir pelo TBROWSE
   CASE nOp=4
        INKEY(0) // Substituir pelo TBROWSE
ENDCASE
RETURN NIL

FUNCTION ed_tela1()
SET CURSOR ON
nCodi:=0
cNome:=SPACE(40)
dDat1:=CTOD("")
dDat2:=DATE()
@ 10,32 GET nCodi PICT "9999"
@ 11,32 GET cNome PICT "@!S25"
@ 12,32 GET dDat1 PICT "@D"
@ 13,32 GET dDat2 PICT "@D"
READ
SET CURSOR OFF
// atribui novamente valor para efeito de tela
aTELA_LIN[1,4]:="   C¢digo do cliente..: "+PADR(STRZERO(nCodi,4,0),43)
aTELA_LIN[1,5]:="   Nome completo......: "+PADR(cNome,43)
aTELA_LIN[1,6]:="   Data de nascimento.: "+PADR(DTOC(dDat1),43)
aTELA_LIN[1,7]:="   Data de inscri‡„o..: "+PADR(DTOC(dDat2),43)
RETURN NIL

FUNCTION MOUSE( BOTAO, LIN, COL )
LOCAL REGISTRADORES := {}, NUM_PAR := PCOUNT()
IF NUM_PAR = 0
   REGISTRADORES := { M_INICIALIZA, 0, 0, 0, 0, 0, 0 }
ELSEIF NUM_PAR = 1
   IF BOTAO = LIGA
      REGISTRADORES := { M_CURSOR_ON, 0, 0, 0, 0, 0, 0 }
   ELSE
      REGISTRADORES := { M_CURSOR_OFF, 0, 0, 0, 0, 0, 0 }
   ENDIF
ELSEIF NUM_PAR = 2
   REGISTRADORES := { M_POS_CURSOR, 0, LIN * 8, BOTAO * 8, 0, 0, 0 }
ELSEIF NUM_PAR = 3
   REGISTRADORES := { M_LER_STATUS, 0, 0, 0, 0, 0, 0 }
ELSE
   RETURN NIL
ENDIF
cint86( M_INTERRUPCAO, REGISTRADORES, REGISTRADORES )
IF NUM_PAR = 0
   RETURN REGISTRADORES[ AX ] = -1
ELSEIF NUM_PAR = 3
   BOTAO := REGISTRADORES[ BX ]
   LIN := INT( REGISTRADORES[ DX ] / 8 )
   COL := INT( REGISTRADORES[ CX ] / 8 )
   IF BOTAO != 0
      INKEY( 0.2 )
   ENDIF
ENDIF
RETURN NIL

FUNCTION HELP(H_A,H_B,H_C)
LOCAL ULT_CURSOR := SETCURSOR()
SAVE SCREEN TO T_HELP
SET CURSOR ON
VHLPARQ:=BEFORATNUM(".EXE",TOKEN(EXENAME(),"\"))+".HLP"
VHLPTEXT:=MEMOREAD(VHLPARQ)
@ 03,03 TO 21,76
@ 03,04 SAY PADC(" Help - Ajuda on line ",72,"Ä")
MENSAGEM("Escreva seu proprio help (Ctrl W para gravar)")
VHLPTEXT:=MEMOEDIT(VHLPTEXT,04,04,20,75,.T.)
MEMOWRIT(VHLPARQ,HARDCR(VHLPTEXT))
RESTORE SCREEN FROM T_HELP
SETCURSOR( ULT_CURSOR )
RETURN NIL

FUNCTION MENSAGEM(VMSG)
@ 24,11 SAY PADC(VMSG,58) COLOR "N/W"
RETURN NIL
DIRETIVAS DE PRE-PROCESSADOR (MOUSE.CH)

Código: Selecionar todos

#define DESLIGA  0
#define LIGA     1
#define GE_NOEXIT 0
#define GE_ENTER  5
#define M_INICIALIZA       0   // Reseta o drive do mouse e retorna
                               // status
                               // AX tem status, -1 se hardware e software
                               // instalado, 0 se nao instalado.  BX tem
                               // numeros de botoes
#define M_CURSOR_ON        1   // Torna o cusror do mouse visivel
#define M_CURSOR_OFF       2   // Esconde o cursor do mouse
#define M_LER_STATUS       3   // Ler botao e status do posicao do mouse
                               // BX tem status do botao, bit 0 botao esq.,
                               // bit 1 botao dir. Se bits esta 0
                               // botao para cima, se 1 para baixo.
#define M_POS_CURSOR      4    // Seta posicao do cursor
#define M_INTERRUPCAO    51    // 0x33, vetor de interrupcao do mouse.
#define AX                1
#define BX                2
#define CX                3
#define DX                4
#define SI                5
#define DI                6
#define CFLAG             7
#define M_ESQUERDO  1
#define M_DIREITO   2
#define M_OS_DOIS   3
#define BEEP_MOUSE()   TONE( 200, 1 )
#command @ <row>, <col>                                                 ;
      => MOUSE( DESLIGA )                                               ;
       ; Scroll( <row>, <col>, <row> )                                  ;
       ; SetPos( <row>, <col> )                                         ;
       ; MOUSE( LIGA )

#command @ <top>, <left> CLEAR                                          ;
      => MOUSE( DESLIGA )                                               ;
       ; Scroll( <top>, <left> )                                        ;
       ; SetPos( <top>, <left> )                                        ;
       ; MOUSE( LIGA )


#command @ <top>, <left> CLEAR TO <bottom>, <right>                     ;
      => MOUSE( DESLIGA )                                               ;
       ; Scroll( <top>, <left>, <bottom>, <right> )                     ;
       ; SetPos( <top>, <left> )                                        ;
       ; MOUSE( LIGA )

#command @ <top>, <left>, <bottom>, <right> BOX <string>                ;
                                            [COLOR <color>]             ;
      => MOUSE( DESLIGA )                                               ;
       ; DispBox(                                                       ;
                  <top>, <left>, <bottom>, <right>, <string>            ;
                  [, <color> ]                                          ;
                )                                                       ;
       ; MOUSE( LIGA )


#command @ <top>, <left> TO <bottom>, <right> [DOUBLE]                  ;
                                              [COLOR <color>]           ;
      => MOUSE( DESLIGA )                                               ;
       ; DispBox(                                                       ;
                  <top>, <left>, <bottom>, <right>, 2                   ;
                  [, <color> ]                                          ;
                )                                                       ;
       ; MOUSE( LIGA )


#command @ <top>, <left> TO <bottom>, <right> [COLOR <color>]           ;
                                                                        ;
      => MOUSE( DESLIGA )                                               ;
       ; DispBox(                                                       ;
                  <top>, <left>, <bottom>, <right>, 1                   ;
                  [, <color> ]                                          ;
                )                                                       ;
       ; MOUSE( LIGA )

#command @ <row>, <col> SAY <xpr>                                       ;
                        [PICTURE <pic>]                                 ;
                        [COLOR <color>]                                 ;
                                                                        ;
      => MOUSE( DESLIGA )                                               ;
       ; DevPos( <row>, <col> )                                         ;
       ; DevOutPict( <xpr>, <pic> [, <color>] )                         ;
       ; MOUSE( LIGA )


#command @ <row>, <col> SAY <xpr>                                       ;
                        [COLOR <color>]                                 ;
                                                                        ;
      => MOUSE( DESLIGA )                                               ;
       ; DevPos( <row>, <col> )                                         ;
       ; DevOut( <xpr> [, <color>] )                                    ;
       ; MOUSE( LIGA )
 
/* Final MOUSE.CH */
Este um bom exercício que permite manipular recursos como MATRIZES, TBROWSE, MOUSE e um HELP proprio que possa ser editado. Claro que este exemplo pode ser aprimorado e personalizado. Apreciarei os comentários e se alguém tem outra forma, favor comentar.

Para quem não quiser se dar o trabalho de compilar, disponibilizei o pacote compactado na seção de downloads:

https://pctoledo.org/forum/fileba ... 137&page=1
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Exemplo para o uso de entrada de dados estilo TABSTRIP

Mensagem por Pablo César »

Mudei o layout colocando um ponto na interseção das abas, fundo, sombra e coloquei um exemplo de uso de GETs só para dar mais sentido.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder