Função para Getar senha

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Uai, 2 campos? É só ter 2 inkey(0), dentro de 2 DO WHILEs etc etc.

Cara, o GETSYS tem o que dentro dele? INKEY(0)! E o Tbrowse()?? INKEY(0)! Po, se os dois usam, porque eu não posso usar também?

Eu, particularmente, tenho "n" usuários com "y" senhas em "p" sistemas, sem mexer uma vírgula no GETSYS nem no STD nem no Cargo nem em mais nada. Só que essa funçãozinha chulé que eu postei antes. E que funciona.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

A idéia, Eolo, é proporcionar todos os controles que se encontra no GETSYS, mas sem gambiarra. Uma coisa mais natural. E havendo um nome e duas senhas a coisa já precisaria ficar gambiarra demais. Minha opinião. :)

Eu alterei o GETSYS e consegui deixar super simples: @... GET ... PIC "@R!P 10". Senha em maiúscula com 10 caracteres. É dessa naturalidade que estou falando.

Mas a função (de autor desconhecido) que o Stanis postou já fica bem legal. Não altera, mas apenas acrescenta uma função no GETSYS. Depois é só configurar o reader especial no objeto do campo. Não é uma maravilha, mas pra quem não tem nada, resolve muitíssimo bem.
[]'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!
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Eolo escreveu:Eu, particularmente, tenho "n" usuários com "y" senhas em "p" sistemas, sem mexer uma vírgula no GETSYS nem no STD nem no Cargo nem em mais nada.
Isso varia de sistema para sistema, e de programador para programador. Evidente que o Clipper por si só oferece quase que todos os recursos em sua forma padrão.

Mas acredito sinceramente que não seja possível desenvolver um sistema muito versátil sem realizar nenhuma alteração nos processos do Clipper. Um grande exemplo disso foi de o dbEdit ter sido obsoletado pela própria CA, em favor do TBrowse. O pessoal já andava tentando fazer milagre com o coitado do dbEdit. Já vi rotina que muda cor de coluna do dbEdit, coisa de louco!

Alterar o GETSYS propriamente eu não digo, mas trabalhar com a GetList é fundamental em vários aspectos (este da senha é um exemplo).

Outra coisa: o ERRORSYS do Clipper é também muito pobre, impossível ter um sistema grande baseado nele. O próprio manual do Clipper se refere a ele como um EXEMPLO, para servir de base a controle de erros e excessões mais complexas.

Se assim não fosse, nenhum deles viria com fontes, estariam em LIBs.

Acredito que o verdadeiro potencial do Clipper COMEÇA quando se chega nas limitações de seus padrões. É quando vem a necessidade de se alterar este tipo de rotina "interna".

Mas é só uma opinião.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Mas é só uma opinião.
Da qual partilho totalmente. E acrescento: todo o sistema básico do Clipper é pobre. E não ocorre isso apenas com o Clipper. Em praticamente qualquer linguagem. Daí a necessidade de expansão. Quem se dispõe a isso só tem a ganhar.
[]'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
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

Tô com o Malígno e o Stanis

O que eu queria fazer, e já fiz, era enviar e-mail pelo sistema, usando o smtpsend.exe, com os seguintes campos:

Código: Selecionar todos

Host SMTP.........:
Email remetente...:
Email destinatário:
Título do email...:
Senha do remetente:
... daí porque eu queria um campo de senha mais dinâmico.

O meu sistema já tem um box de ajuda a cada campo, como o hint do delphi, tem um gerenciador do ERROS, que grava todos os erros em um DBF e manda para mim via e-mail (dica de vocês aqui do forum), envia e-mail de um backup da base de dados, e sempre tô querendo colocar novidades nele, com a ajuda de TODOS VOCÊS.
Maligno escreveu: Eu alterei o GETSYS e consegui deixar super simples: @... GET ... PIC "@R!P 10". Senha em maiúscula com 10 caracteres. É dessa naturalidade que estou falando.
Malígno, onde devo alterar o getsys para colocar uma mascara nova?
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
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Malígno, onde devo alterar o getsys para colocar uma mascara nova?
Poxa, faz uma pergunta mais fácil. :)))
São em vários lugares: onde se faz a impressão, no aplicador de teclas, etc. Pra te dar o caminho das pedras certinho vou ter que estudar o GETSYS de novo. Vai ficar difícil.
[]'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
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

Vou tentar por aqui, pois a GAS alterou o getsys e pode num ter muita coisa a ver com o seu getsys.

Valeu.
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
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

pode num ter muita coisa a ver com o seu getsys
Pode ter certeza de que não tem nada a ver com o meu GETSYS. :)
[]'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!
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Opa,

No Volume 2 do Ramalho também tem uma alteração bacana no getsys para fazer os "reads temporizados", isso é legal pro sujeito não esquecer uma tela de alteração aberta e ir almoçar, enquanto outra pessoa pode estar alterando o mesmo registro...

Isso aí...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

clodoaldomonteiro escreveu:O que eu queria fazer, e já fiz, era enviar e-mail pelo sistema
Ja pensou alterar o GETSYS para aceitar nos GETs somente minúsculas ?
clodoaldomonteiro escreveu:... daí porque eu queria um campo de senha mais dinâmico.
Isso aí, aconteceu comigo também. E a alteração do GETSYS nesse caso a considero essencial. Claro que quando falamos GETSYS não necessáriamente tem que manter o mesmo nome de arquivo. Isto é, eu tenho GETSYS1.PRG, GETSYS2.PRG dependendo cada caso. Principalmente no meu caso que o meu sistema é modular, onde tenho dezenas de executáveis que compõem o sistema.
clodoaldomonteiro escreveu:grava todos os erros em um DBF e manda para mim via e-mail (dica de vocês aqui do forum)
Isso aí, isso que é usar a cabeça ! Parabéns Clodoaldo. Eu também tenho isso funcionando, só que não exatamente por email (mas também recebo em forma de mensagem em casa). Inclusive, permita-me aconselhar-lhe que na hora que o sistema dá um erro, que esse erro somente seja enviado uma única vez por email. Senão acaba te enchendo de erros que ás vezes são corrigidos e o que falta é atualizar o sistema. Apenas, comento isto para lembrete.
clodoaldomonteiro escreveu:Tô com o Malígno e o Stanis
Ahhhh, somente eles mercem crédito ?. Buahhhh.... Tá vendo, isso porque eu não me manifestei mais... Muitas vezes não me manifesto, porque acabo concordando com o que os colegas dizem. Brincadeira, o crédito não interessa e sim o objetivo cumprido. Sempre é bom comentar coisas que até parecem óbvias mas que no fundo podem serem aperfeiçoadas sempre.
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.
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

Pablo!

Desculpe não ter mencionado vc nos agradecimentos, mas fique sabendo que vc já me ajudou muito com as suas dicas, inclusive nesse tópico, e gostaria sempre a ajuda de todos vocês, senhores da programação em clipper. hehe.

Realmente esse é o melhor forum da internet. Fico feliz de participar dele, ainda que, não ajudando muito e sim usufruindo das dicas, mais prometo melhorar e ajudar mais do que ser ajudado.

Grato pela atenção de todos.
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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Ahhh não precisa pedir desculpas, foi apenas uma coçadinha minha... hihihi.
Fico feliz de participar dele, ainda que, não ajudando muito e sim usufruindo das dicas, mais prometo melhorar e ajudar mais
Eu também sou grato e tenho certeza que você algum dia irá contribuir com os seus conhecimentos ao pessoal que taí e por quê não eu ainda aprenda algo de você também. Todos nós sempre temos algo aprender na vida. Por isso que existe este 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.
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

Olá amigos!

Foi questionado a possibilidade de se colocar no getsys campos tipo senha, pois depois de muito trabalho consegui fazer isso.

Para dizer ao getsys que o campo é uma senha é necessário informar o picture '@P'.

Fiz a modificação no getsys postado pelo Daniel, mesclando um exemplo de campo senha que foi postado aqui no forum.

O bom é que ficou tudo junto: campo senha '@R', minusculo '@M', AJUDA a cada campo e números rolando para a direita.

A função do getsys a alterar foi a GETREADER e eu tirei os tratamentos de acentos somente para ficar menor.

Código: Selecionar todos

PROCEDURE GetReader( oGet )

   LOCAL   nKey,cKey,cRet,original
   PRIVATE lPrimKey := .T.

   // Read the GET if the WHEN condition is satisfied
   IF ( GetPreValidate( oGet ) )

      // Activate the GET for reading
      oGet:setFocus()
      oGet:CARGO := "" //senha

      WHILE ( oGet:exitState == GE_NOEXIT )

         // Check for initial typeout (no editable positions)
         IF ( oGet:typeOut )
            oGet:exitState := GE_ENTER
         ENDIF

         // Tratamento para entrada Direita -> Esquerda
         IF ( oGet:type == "N" )   .And. ( Len( oGet:buffer ) > oGet:DecPos )
            oGet:Pos := Len( oGet:buffer ) + 1
            oGet:End()
            oGet:ToDecPos()
            oGet:Left()
         ELSEIF ( oGet:type == "N" )
            oGet:Pos := Len( oGet:buffer ) + 1
            oGet:End()
         ENDIF

         cKey := ''
         nKey := 0

         // Apply keystrokes until exit

         original := oGet:buffer

         WHILE ( oGet:exitState == GE_NOEXIT )

            // Armazena a tecla que foi pressionada anteriormente
            cKey := Chr(nKey)

            // Le a Pr¢xima tecla
            nKey := inkey( 0 )

            // Ajusta Caract‚r de Retorno
            IF !READINSERT()
               cRet := CHR(19)
            ELSE
               cRet := CHR(08)
            ENDIF

            //tratamento de campo senha senha
            if '@P' $ oget:picture
               IF     nKey >= 32 .AND. nKey <= 255
                  oGet:CARGO := oGet:CARGO() + CHR(nKey)
                  GetApplyKey(oGet, 42, original)  // NOME COMPLETO
               ELSEIF nKey = 8
                  oGet:CARGO := SUBSTR(oGet:CARGO(), 1, LEN(oGet:CARGO()) - 1)
                  GetApplyKey(oGet, nKey, original)  // NOME COMPLETO
               ELSEIF nKey = 13 // Sai com tecla ENTER e retorna a
                  // senha digitada
                  GetApplyKey(oGet, nkey, original)  // NOME COMPLETO
               ELSEIF nKey = 27 // Sai com Tecla ESC e retorna vazio
                  GetApplyKey(oGet, nkey, original)  // NOME COMPLETO
               ELSEIF nKey = 5           // Volta para o get anterior
                  oGet:CARGO := space(15)//preenche o get com espa‡os
                  GetApplyKey(oGet, nKey, original) // NOME COMPLETO
               ENDIF
            endif
            // Verifica tecla pressionada
            if !('@P' $ oget:picture)  //se nÆo for campo senha
               GetApplyKey( oGet, nkey, original )
            endif
            *
            lPrimKey := .F.
            *
         ENDDO

         // Disallow exit if the VALID condition is not satisfied
         IF ( !GetPostValidate( oGet ) )
            oGet:exitState := GE_NOEXIT
         ENDIF
      ENDDO

      // De-activate the GET
      oGet:killFocus()

   ENDIF

   //tratamento de campo senha senha
   if '@P' $ oget:picture
      IF oGet:EXITSTATE() <> 7
         oGet:VARPUT(oGet:CARGO())
      ENDIF
   endif
   
   RETURN
Sei que postei essa informação em outro post, mais quis deixar aqui também, pois foi nesse post que pedi ajuda aos amigos.
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
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem por asimoes »

Clodoaldo,
Blz.

Como você faz para validar uma senha usando a modificação feita no getsys.

EX.:
cSenha:=SPACE(6)
Exemplo: @10,00 SAY "Informe a senha: " GET cSenha PICT "@P" VALID VALSEN(cSenha)=.T.
READ

Não consegui validar desta forma o get passa "******" para a função ValSen()

Tem jeito?

Obs.: estou usando o getsys2.prg que você me enviou.

[]´S

clodoaldomonteiro escreveu:Seguindo a dica de vocês incluí as seguintes linhas:

Código: Selecionar todos

...
...
ELSEIF L2 = 5           // Volta para o get anterior
   P1:CARGO := space(15)//preenche o get com espaços
   GetApplyKey(P1, L2)  // NOME COMPLETO
....
....
... e ficou tudo certinho.

Valeu a força.[/code]
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

Não tinha testado com o VALID.

Mas me diga o que é que você quer validar, para que eu possa entender melhor, pois eu só valido se a senha é válida depois do READ e se não existir eu LOOP e volto pro início do WHILE, depois se o contador estourar três tentativas sai definitivamente.

Mas se ainda assim você quiser usar o VALID, eu posso tentar concertar o erro.
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
Responder