Problema com Get e comando VALID
Moderador: Moderadores
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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Re: Agradecimento
Que bom ! Fico feliz saber que resolveu e praticamente sozinho. Você utilizou TBROWSE mesmo ? Se for isso acrescerá um conhecimento extra em teus desenvolvimentos.pjtb escreveu:Blz Pablo, ja esta funcionando...
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:Maligno escreveu:mas não mexeria na GETSYS apenas para resolver esse problemaAdemir escreveu:Entendí o que quer dizer. Mas mesmo nas funções queria tirar a comparação de toda a hora
1. Seguindo o seu exemplo:
Código: Selecionar todos
@ 10,20 get var1
@ 12,20 get var2 valid var2 > 9
@ 14,20 get var3
readPor 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
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.
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.
... 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.e nesse momento o usuário em vez de pressionar o ENTER pressiona a SET-PRA-CIMA...
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
Ademir
- Usuário Nível 3

- Mensagens: 170
- Registrado em: 31 Jul 2007 16:28
- Localização: Porto Ferreira-SP
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.
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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.
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 ?
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 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 ?
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.
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.
-
Ademir
- Usuário Nível 3

- Mensagens: 170
- Registrado em: 31 Jul 2007 16:28
- Localização: Porto Ferreira-SP
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.
Um grande abraço.
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. 
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
É 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:Ademir escreveu:Vou tentar me aprofundar um pouco mais na GETSYS, pois ví que atraves dela, podemos melhorar em muito alguns recursos de sistema.
https://pctoledo.org/forum/viewto ... 59&start=0
https://pctoledo.org/forum/viewto ... 25&start=0
https://pctoledo.org/forum/viewto ... ght=getsys
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.É assim, trocando informações, que conseguimos aprimorar nosso trabalho. Acho que é esse o intuito desse forum.
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.
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.
-
Ademir
- Usuário Nível 3

- Mensagens: 170
- Registrado em: 31 Jul 2007 16:28
- Localização: Porto Ferreira-SP
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 )
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 )
- clodoaldomonteiro
- Usuário Nível 4

- Mensagens: 821
- Registrado em: 30 Dez 2006 13:17
- Localização: Teresina-PI
- Contato:
Vocês usam hints (box com memssagems) nos get´s dos campos?
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
