Funções pra gets

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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funções pra gets

Mensagem por JoséQuintas »

Tem horas que precisamos algo mais nos gets.
Seguem algumas com exemplo de uso

Código: Selecionar todos


@ 1, 2 GET nValor VALID True( nTotal := nValor * 1.5 )

FUNCTION True( ... )
   RETURN .t.

// se preferir

@ 1, 2 GET nValor VALID Calculo( nValor * 1.5, @nTotal )

FUNCTION Calculo( xValue, xVariable )
   xVariable := xValue
   RETURN .t.

// pra desabilitar um get sem o When (obrigando a passar pelo campo/validação)

@ 1, 1 GET xVar WHEN GetDisable()

FUNCTION GetDisable()
   KEYBOARD Chr( iif( LastKey() == K_UP, K_UP, K_ENTER ) ) // repete navegação em andamento
   RETURN .t.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funções pra gets

Mensagem por JoséQuintas »

Hoje pensei nesta, pode equivaler a todas juntas.

Código: Selecionar todos

FUNCTION ReturnValue( xValue, ... )
   RETURN xValue
Num valid com muitos cálculos:

Código: Selecionar todos

@ 5, 5 GET nValor VALID ReturnValue( .t., nIcms := nValor * 0.18, nIpi := nValor * 0.10, nPis := nValor * 1.65, nCofins := nValor * 7.6 )
ou

Código: Selecionar todos

cTxt := ReturnValue( "", Encontra( cCodigo, "jpcadas", "numlan" ) ) + jpcadas->cdCodigo
A do valid fica mais interessante do que usar vários vcalc()
E a outra, pode substituir meus iif( Encontra( cCodigo, "jpcadas", "numlan" ), "", "" ) + jpcadas->cdCodigo

Importante: não se pode esquecer que a compilação faz otimização de código.
No caso de um .AND. / .OR. , se na execução um retornar falso, a execução não verifica o restante do valid.
Só tomar cuidado com a ordem do valid.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Funções pra gets

Mensagem por Maligno »

No caso de um .AND. / .OR. , se na execução um retornar falso, a execução não verifica o restante do valid.
Isso se chama "avaliação de curto-circuito", desligável em alguns compiladores. Mas não no Clipper. Provavelmente no [x]Harbour também não. Portanto, é bom lembrar que não se pode esquecer de forçar o teste de todas as expressões antes da finalização, já que a última expressão concatenada, poucas vezes atingível, pode esconder um erro. Pela "Lei de Murphy", erro desse tipo só aparece na cara do cliente. :)
[]'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!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funções pra gets

Mensagem por JoséQuintas »

Só corrigindo, dá pra desligar no Clipper e Harbour, usando /z :

/z suppress shortcutting (.and. & .or.)

Eu até fazia isso antigamente no Clipper. Mas evitar que o programa faça as coisas mais rápido é esquisito.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder