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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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