Página 3 de 3
Enviado: 27 Set 2007 13:38
por Maligno
Sim. É só isso mesmo. Você poderia só acrescentar o switch /L na compilação, pra remover os números das linhas. Isso deixa o objeto um pouco menor. Se bem que não é algo crítico.
Re: Agradecimento
Enviado: 27 Set 2007 13:51
por Pablo César
pjtb escreveu:Blz Pablo, ja esta funcionando...
Que bom ! Fico feliz saber que resolveu e praticamente sozinho. Você utilizou TBROWSE mesmo ? Se for isso acrescerá um conhecimento extra em teus desenvolvimentos.
Maligno escreveu:mas não mexeria na GETSYS apenas para resolver esse problema
Ademir escreveu:Entendí o que quer dizer. Mas mesmo nas funções queria tirar a comparação de toda a hora
Eu entendo também e que a sua situação venha ser ecepcional sair do GET quando setinha pra cima for acionada. Mas lembre que esse tipo de mudança é uma forma muito radical e que poderá trazer algumas consequências. Lembre que todo o seu sistema de GETs passa por o GETSYS e que você poderá ter alguns inconvenientes como:
1. Seguindo o seu exemplo:
Código: Selecionar todos
@ 10,20 get var1
@ 12,20 get var2 valid var2 > 9
@ 14,20 get var3
read
2. Digamos que caso você queira ainda fazer esse controle pelo GETSYS e digite no segundo GET na var2 um número 3 (que esse número não seria aceitável, segundo seu exemplo de valid) e nesse momento o usuário em vez de pressionar o ENTER pressiona a SET-PRA-CIMA, daí então seu GET se tornará válido (por causa do seu GETSYS alterado), não é mesmo ?
Por isso o colega Maligno, desestimulou você a alterar o GETSYS e fazer a sua própria função para esse caso específico. Eu faria assim:
Código: Selecionar todos
@ 10,20 get var1
@ 12,20 get var2 valid MYFUN(var2)
@ 14,20 get var3
read
FUNCTION MYFUN(var2)
IF LASTKEY()=5 .AND. VAR2=0
RETURN .T.
ENDIF
IF var2 > 9
RETURN .T.
ELSE
RETURN .F.
ENDIF
Será que isso não resolveria seu caso Ademir ?. re-avalie essa questão pois imagino que você poderá ter outros GETs no seu sistema e se eles tem alguma condição declarada simplesmente irá ser ignorada quando o GETSYS sair com retorno .T.
Enviado: 27 Set 2007 15:05
por Maligno
e nesse momento o usuário em vez de pressionar o ENTER pressiona a SET-PRA-CIMA...
... e estando no primeiro campo, aciona o comando de gravação. Daí fica bem fácil visualizar que seria mais prático ter uma função externa de validação, que seria tanto utilizada pelo VALID quanto por uma eventual função de checagem de consistência pré-gravação. Mata-se dois coelhos com uma só caixa d'àgua.

))
Enviado: 27 Set 2007 15:10
por Ademir
Boa tarde Pablo ! Td bom ?
Eu acho que vc não entendeu o que quero fazer. Não quero sair do get teclando setinha pra cima. O que eu quero é me movimentar nos gets para cima e para baixo. Para baixo utilizando ENTER e para cima, setinha pra cima. O problema é que em toda função do usuario que valida os gets eu tenho que verificar se foi pressionada a tecla da setinha pra cima ou seja LASTKEY()=5. O exemplo da alteração que fiz no GetSys foi na função GetPostValidate(). Ela ja verifica se foi pressionado ESC (oGet:exitState==GE_ESCAPE). Apenas implementei, com a verificação de que se tentou retornar ao GET anterior (oGet:exitState==GE_UP). A unica coisa que faltou no exemplo que postei e que já corrigi na minha GETSYS foi dar um oGet:assign() para não perder o que foi digitado quando teclar a setinha pra cima.
Enviado: 27 Set 2007 15:17
por Ademir
Pablo. No exemplo 2 que vc postou, o Get nao se tornara valido. O que irá acontecer é que o foco passará para var1. O valid dos gets nao é ignorado devido ao retorno .t. da GetPostValidate().
Desculpe, posso até estar errado, mas pelos testes que fiz, funciona perfeitamente.
Enviado: 27 Set 2007 17:56
por Pablo César
Oi Ademir, tudo bem. Realmente o meu exemplo de 27 Set 2007 13:51, não está como deveria, tem furo. Refiz este outro exemplo, sugiro que pegue o exemplo a seguir e compile (mas não inclua seu GETSYS) e veja se é isso que você quer.
Código: Selecionar todos
CLS
var1:=0
var2:=0
var3:=0
DO WHILE .T.
@ 10,20 get var1
@ 12,20 get var2 valid MYFUN(var2)
@ 14,20 get var3
READ
IF LASTKEY()=27
IF ALERT("Deseja sair sem gravar ?",{"Nao","Sim"})=2
RETURN NIL
ENDIF
ENDIF
IF VAR2<=9
ALERT("O valor deve ser maior que 9 (mensagem no looping)")
KEYBOARD CHR(24)
ELSE
EXIT
ENDIF
ENDDO
? VAR1
? VAR2
? VAR3
FUNCTION MYFUN(var2)
IF VAR2=0
RETURN .T.
ENDIF
IF (LASTKEY()=5 .OR. LASTKEY()=24)
RETURN .T.
ENDIF
IF var2 > 9
RETURN .T.
ELSE
ALERT("O valor deve ser maior que 9 (mensagem na funcao)")
RETURN .F.
ENDIF
Entendí que você queria navegar entre os GETs (eu não tinha incluirdo a opção de setinha pra baixo), mas de todas as formas a idéia que queria passar é que você alterando o GETSYS estaria isentando SEMPRE a qualquer tipo de validação, me corrija se eu estiver errado.
Desculpe Ademir, mas eu ainda não entendí qual seria a vantagem de fazer essa alteração no GETSYS. Para poder entender melhor, poderias postar o seu exemplo com GETSYS alterado ? E assim eu poder testar na prática ?
Enviado: 27 Set 2007 18:12
por Ademir
Pablo. Na verdade a vantagem está no fato de não precisar configurar a setinha para cima em mais nenhuma função que valide gets. Na verdade, eu queria mesmo era tentar entender um pouco do GETSYS. Os testes que fiz deram certo, mas por via das duvidas, voltei a trabalhar no modo antigo que não é tão ruim assim e já funciona e bem ha muito tempo. Vou tentar me aprofundar um pouco mais na GETSYS, pois ví que atraves dela, podemos melhorar em muito alguns recursos de sistema. Mesmo assim valeu. É assim, trocando informações, que conseguimos aprimorar nosso trabalho. Acho que é esse o intuito desse forum.
Um grande abraço.
Enviado: 27 Set 2007 19:57
por Maligno
Se você pretende continuar com Clipper ainda por um bom tempo, sim, é uma ótima idéia alterar o GETSYS e implementar novos recursos. Mas vai precisar dispor de um bom tempo pra isso.

Enviado: 28 Set 2007 08:19
por Pablo César
Ademir escreveu:Vou tentar me aprofundar um pouco mais na GETSYS, pois ví que atraves dela, podemos melhorar em muito alguns recursos de sistema.
É isso mesmo !. Faz bem você em meter as caras com o intuito de aprender. Realmente tem muitos recursos que poderia ser tratados através do GETSYS. Você já viu estes tópicos, irão aflorar idéias nas mais inusitados recursos do GETSYS:
https://pctoledo.org/forum/viewto ... 59&start=0
https://pctoledo.org/forum/viewto ... 25&start=0
https://pctoledo.org/forum/viewto ... ght=getsys
É assim, trocando informações, que conseguimos aprimorar nosso trabalho. Acho que é esse o intuito desse forum.
Com certeza colega !. Foi por isso que eu estava curioso para ver seu GETSYS. Mas acredito que você conseguiu boas experiências expandindo seu conhecimento.
Enviado: 28 Set 2007 08:33
por Ademir
Bom dia Pablo !
Desculpe não ter enviado a alteração que fiz na GetSys. A correria tá enorme. Lá vai a alteração. Alterei apenas a GetPostValidate.
/***
*
* GetPostValidate( <oGet>, <aMsg> ) --> lValid
*
* Test exit condition (VALID clause) for a GET
*
* NOTE: Bad dates are rejected in such a way as to preserve edit buffer
*
***/
FUNCTION GetPostValidate( oGet, aMsg )
LOCAL lSavUpdated
LOCAL lValid := .T.
LOCAL nCursor // Added.
IF ( oGet:exitState == GE_ESCAPE )
RETURN ( .T. )
ENDIF
// IF ( oGet:exitState == GE_UP ) // alteração
// oGet:assign() // alteração
// RETURN ( .T. ) // alteração
// ENDIF // alteração
IF ( oGet:badDate() )
oGet:Home()
DateMsg()
ShowScoreboard()
RETURN ( .F. )
ENDIF
// If editing occurred, assign the new value to the variable
IF ( oGet:changed )
oGet:assign()
saStatics[ SLUPDATED ] := .T.
ENDIF
// Reform edit buffer, set cursor to home position, redisplay
nCursor := SETCURSOR() // Added.
oGet:reset()
SETCURSOR( nCursor ) // Added.
// Check VALID condition if specified
IF !( oGet:postBlock == NIL )
lSavUpdated := saStatics[ SLUPDATED ]
// S'87 compatibility
IF VALTYPE( oGet:Buffer ) == "C"
SETPOS( oGet:row, oGet:Col + LEN( oGet:Buffer ) )
ENDIF
lValid := EVAL( oGet:postBlock, oGet, aMsg )
// Reset S'87 compatibility cursor position
SETPOS( oGet:row, oGet:Col )
ShowScoreBoard()
oGet:updateBuffer()
saStatics[ SLUPDATED ] := IIF( oGet:changed, .T., lSavUpdated )
IF ( saStatics[ SLKILLREAD ] )
oGet:exitState := GE_ESCAPE // Provokes ReadModal() exit
lValid := .T.
ENDIF
ENDIF
RETURN ( lValid )
Enviado: 01 Out 2007 23:19
por clodoaldomonteiro
Vocês usam hints (box com memssagems) nos get´s dos campos?
Enviado: 02 Out 2007 00:50
por Maligno
Meu GETSYS é modificado pra incluir não os hints propriamentes (balões), mas mensagens que são apresentadas na barra de auxílio (última linha do vídeo). Isso é bem simples de fazer. Você só precisa modificar o comando GET para aceitar mais uma cláusula, que agiria de forma combinada com o comando WHEN.