Página 1 de 3

Entrada de dados com tela "rolando"

Enviado: 20 Mar 2008 11:21
por Kebe
Bom dia a todos !

Desenvolvi umas rotinas que permitem que vários GETS possam
"rolar" na tela sem termos que estar controlando tela 1, 2 ,3 ..etc..
Não existem limites de GETS e já está rodando 100% em alguns
clientes.

Disponibilizei um DEMO em :
http://rapidshare.com/files/100977346/DEMOGET.zip.html

Gostaria da análise da comunidade sobre a mesma.

Kebe

opppssss

Enviado: 20 Mar 2008 11:24
por Kebe
Esqueci de dizer que o ZIP está protegido, e a senha é "octal"

Kebe

Enviado: 20 Mar 2008 12:53
por Pablo César
Baixei o DEMOGET e executei, gostei. Mas você está dizendo que não utiliza controle de tela, é dizer não utiliza o SCROLL() ?. Este procedimento é muito bom quando existem vários GETs e não podem ser visualizados todos numa tela somente. Mas conta, qual foi a técnica utilizada. De preferência disponibilizar os códigos fontes. Estou curioso. Conta, conta....

Enviado: 20 Mar 2008 13:45
por Maligno
Rodei e achei muito bom. Só quero sugerir a inclusão das teclas PgDn e PgUp, pra melhorar mais um pouco. :)

Enviado: 20 Mar 2008 14:05
por Toledo
Pablo, no link abaixo tem um exemplo:

https://pctoledo.org/download/scroller.zip

Neste exemplo pode usar as teclas PgDn e PgUp.

Abraços,

Segue os fontes de como se deve usar no PROGRAMA

Enviado: 20 Mar 2008 14:17
por Kebe
Aqui abaixo está como eu USO o comando em meus programas :

// Sistema de demonstracao do uso do KBGET
// Cleberson Becker Alano
// 15/11/2007


// Para fazer uso das funcoes em formato de comando ..eu criei um arquivo de HEADER para ser pré-processado
// e que deve ser incluido usando o comando abaixo

#include "KBGET.CH"


// Deve-se declarar estes dois vetores.....

V_GET_S := {}
V_GET_G := {}


// no mais.. é só usar o comando "say" e "get" conforme a sintaxe abaixo
// Os comandos são os mesmos contidos no programa de demonstracao.


@@ 01,01 say padc("DÿA D O S P E S S O A I S",78) color "N/GR*"
@@ 01,02 say "Nome do Cliente....:"
@@ 00,22 get MC05NOMCLI

@@ 01,02 say "Data de Nascimento.:"
@@ 00,22 get MD05NASCIM

@@ 01,02 say "Estado Civil.......: <C>asado <S>olteiro <V>iuvo <D>esquitado <O>utros"
@@ 00,22 get MC05ESTCIV picture "!"

@@ 01,02 say "C.P.F..............:"
@@ 00,22 get MC05CPFCLI picture "@KR 999.999.999/99"

@@ 01,02 say "Outros Documentos..:"
@@ 00,22 get MC05DOCUME

@@ 01,02 say "Sexo...............: <M>asculino <F>eminino"
@@ 00,22 get MC05SEXO picture "!" valid MC05SEXO $ "MF "

@@ 01,02 say "Nome do Pai........:"
@@ 00,22 get MC05PAI

@@ 01,02 say "Nome da M„e........:"
@@ 00,22 get MC05MAE

@@ 01,02 say "Endere‡o Pai/M„e...:"
@@ 00,22 get MC05ENDEPM

@@ 01,01 say padc("RÿE S I D E N C I A D O C L I E N T E",78) color "N/GR*"
@@ 01,02 say "Endere‡o...........:"
@@ 00,22 get MC05ENDRES

@@ 01,02 say "Complemento 1......:"
@@ 00,22 get MC05CP1RES

@@ 01,02 say "Complemento 2......:"
@@ 00,22 get MC05CP2RES

@@ 01,02 say "Bairro.............:"
@@ 00,22 get MC05BAIRES

@@ 01,02 say "Cidade.............:"
@@ 00,22 get MC05CIDRES

@@ 01,02 say "C.E.P..............:"
@@ 00,22 get MC05CEPRES picture "@KR 99999-999"

@@ 01,02 say "Telefone principal.:"
@@ 00,22 get MC05FONRES picture "@KR (#**##)##99-9999"

@@ 01,02 say "Outros telefones...:"
@@ 00,22 get MC05OUTFON

@@ 01,02 say "Mora desde.........:"
@@ 00,22 get MD05MORADT

@@ 01,02 say "Aluguel............:"
@@ 00,22 get MN05VALUGA picture "@R 999,999.99"

@@ 01,02 say "Casa Pr¢pria.......:"
@@ 00,22 get MC05CASPRO picture "!" valid MC05CASPRO $ "SN "

@@ 01,01 say padc("DÿA D O S D I V E R S O S ( 1 )",78) color "N/GR*"
@@ 01,02 say "XxxxxxXXxxxxxxXx...:"
@@ 00,22 get C_VAR1
@@ 01,02 say "YzzzYyyyYYYy.......:"
@@ 00,22 get C_VAR2
@@ 01,02 say "XxxxxxXXxxxxxxXx...:"
@@ 00,22 get C_VAR3
@@ 01,02 say "YzzzYyyyYYYy.......:"
@@ 00,22 get C_VAR4

@@ 01,01 say padc("DÿA D O S D I V E R S O S ( 2 )",78) color "N/GR*"
@@ 01,02 say "XxxxxxXXxxxxxxXx...:"
@@ 00,22 get C_VAR5
@@ 01,02 say "YzzzYyyyYYYy.......:"
@@ 00,22 get C_VAR6
@@ 01,02 say "XxxxxxXXxxxxxxXx...:"
@@ 00,22 get C_VAR7
@@ 01,02 say "YzzzYyyyYYYy.......:"
@@ 00,22 get C_VAR8

// o comando read deve ser seguido da palavra "janela" juntamente com as cordenas da janela a ser visualizada!

read janela N_LING1 01 19 78


------------------------------------------
é só isto que deve ser feito

Kebe

Enviado: 20 Mar 2008 14:24
por Maligno
Porque cada GET fica configurado com a mesma posição?

Resposta...

Enviado: 20 Mar 2008 15:52
por Kebe
Porque na verdade não existe mais uma posição fixa em janela.
O @@ 01,XX é para indicar ao gerenciador de tela que este GET/SAY fica uma linha após o SAY/GET anterior ou 00 se fica na mesma linha.

Vou preparar um material para poder publicar melhor o funcionamento
desta função bem como os OBJS para que possam fazer testes.

Kebe

Enviado: 20 Mar 2008 17:14
por Maligno
Então vou dar uma dica. Eu também já tenho essa rolagem e quando fiz, resolvi eliminar a informação de linha. Uso apenas a coluna, e sempre em relação à janela. Quando quero uma linha em branco, incluo um comando em branco. Mais ou menos isso:

Código: Selecionar todos

defGet        col  8    say       "Pessoa:" get _CLI_PESSOAFJ   ...
defGet "NOME" col  2    say "Razão Social:" get _CLI_NOME       ...
defGet        col 10    say         "Sexo:" get _CLI_SEXOFM     ...
defGet        col  4    say   "Nascimento:" get _CLI_DATANASC   ...
defGet "ATIV" col  5    say    "Atividade:" get _CLI_ATIVIDADE  ...
defGet
defGet "CC"   col 10    say         "CNPJ:" get _CLI_CC         ...
defGet "UF"   col 12    say           "IE:" get _CLI_UF         ...
defGet "IE"   col 19 sl say             "-" get _CLI_RGIE       ...
defGet "RG"   col 12    say           "RG:" get _CLI_RGIE       ...
defGet
defGet "CEP"  col 11    say          "CEP:" get _CLI_CEP        ...
defGet "LOG"  col  4    say   "Logradouro:" get _CLI_ENDLOGRAD  ...
defGet        col  8    say       "Número:" get _CLI_ENDNUMERO  ...
defGet        col  3    say  "Complemento:" get _CLI_ENDCOMPLEM ...
defGet "BAI"  col  4    say   "Bairro/Sub:" get _CLI_ENDBAIRRO  ...
defGet "MUN"  col  5    say    "Município:" get _CLI_MUNICIPIO  ...
defGet "UF"   col 47 sl say             "-" get _CLI_UF         ...
makeGet aGetCLI line 3 pre PreGetCLI()
Cortei parte dos GETs, pra simplificar. O comando da última linha é o meu READ. Por ele eu digo onde está a primeira linha em relação à janela. A partir dessa linha os campos são apresentados e a rolagem acontece.

Enviado: 20 Mar 2008 17:43
por Pablo César
Obrigado Toledo pela sua indicação. Baixei e testei, só que notei que quando utilizado o prenchimento e excedendo a área de visualização, perde-se o focus e o cursor.

Espero que o colega Kebe faça uma explanação mais detalhada do seu procedimento, pois faltando funções fica mais dificil entender.

E o seu Maligno, parece que não é Clipper. Por acaso não estaria faltando algo ?. Teria como colocar um exemplo simples para poder compilar e ver resultados, abusando um pouco da sua paciência e tempo ??

Mas que este assunto é muito interessante. E as técnicas até agora apresentada, não são de código simples não. Bem essa é a minha opinião. Mas estou interessado em saber, se puder clarear mais ainda seus exemplos.

Enviado: 20 Mar 2008 17:47
por Maligno
Meu código é totalmente Clipper. E o que está faltando? Nada. A não ser, claro, a GETSYS totalmente modificada, alguns headers e algumas funções de apoio. O exemplo de código é esse. Há outras características, bem mais complexas. Não contei nem 1/4 do que é meu GETSYS hoje.

Enviado: 20 Mar 2008 17:58
por Pablo César
Maligno escreveu:E o que está faltando?
O que seria esses defGet ? Pseudo Functions ?
a GETSYS totalmente modificada, alguns headers e algumas funções de apoio.
É... acho que a modificação e utilização de GETSYS específica é fundamental para um bom resultado na navegação dos GETs. Pena que é estes procedimentos não é uma coisa simples de se fazer.

Enviado: 20 Mar 2008 18:44
por Maligno
Pablo César escreveu:O que seria esses defGet ? Pseudo Functions ?
São comandos comuns, assim como qualquer comando que consta no STD.CH. Você cria o que bem entender. Tenho dezenas de comandos meus, que desempenham (e são traduzidos para) funções específicas.
É... acho que a modificação e utilização de GETSYS específica é fundamental para um bom resultado na navegação dos GETs. Pena que é estes procedimentos não é uma coisa simples de se fazer.
Realmente. Isso não é uma tarefa trivial. Exige tanto uma compreensão do sistema quanto um esforço muito grande. Mas o resultado compensa.

Lembra da função de divisão silábica? Mesma coisa. Se não começar, não termina. Mas depois que termina, é só alegria. :)

Enviado: 20 Mar 2008 21:47
por Manuel Luis Modernel
Boa Noite mestre Maligno, feliz pascoa a todos !!

Engraçado, a muitos anos atras no meu querido Summer 87 fiz uma pequena função que me permitia subir uma linha a cada get solicitado, ou seja numa unica tela eu digitava quantas informações quisesse (alem das 22 linhas possíveis da tela (sempre usei a 23ª e 24ª para fazer o micro se comunicar com o operador).

Já vi no forum pessoas usando uma faixa branca para mostrar seus codigos, como uso para enviar minha função para os colegas ??

abraços !!

Enviado: 20 Mar 2008 21:59
por Maligno
Para entrar no modo de exibição de código, prefixe-o com a tag [ code ]. No término do código, finalize-o com a tag [/ code ]. Apenas remova os espaços que coloquei aqui para evitar que a tag seja ativada.