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 NILCó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 */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
