dúvida de iniciante em HwGui: tela de login

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

dúvida de iniciante em HwGui: tela de login

Mensagem por cjp »

segue codigo para usuario e senha,
Testei teu código, mas deu erro na compilação:
Error BASE/1003 Variable does not exist: SELF
Called from \prg\chat_hwgui.PRG->LOGIN(294)
Called from \prg\chat_hwgui.PRG->MAIN(33)

HwGUI 2.17 (fork) Harbour 3.4.0dev (096e855) (2019-07-15 13:50)
Data : 11/03/21
Hora : 23:27:00
WKS : DESKTOP-IT12ARQ
Usuário : Inacio Carvalho
A linha 294 é esta:
VALID {|| ::SENHA:="", oSenha:Refresh(), .T. }
Na verdade eu não entendi este código, não sei como ele validaria a senha.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

dúvida de iniciante em HwGui: tela de login

Mensagem por cjp »

Olá!

Li o post das (11:17) deste tópico hoje pela manhã e estava bem diferente. Foi editado sem aviso....

Parece que o autor percebeu que estava errado quanto às coisas que havia escrito sobre o funcionamento de múltiplos comandos dentro de um code block, como citei em minha mensagem anterior e demonstro abaixo...
Eu não editei o post inicial.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

dúvida de iniciante em HwGui: tela de login

Mensagem por cjp »

Este último exemplo está dando esse erro na execução.

Error BASE/1004 Message not found: HDIALOG:OEDITBOX1
Called from ->__ERRRT_SBASE(0)
Called from ->HDIALOG:ERROR(0)
Called from ->(b)HBOBJECT(0)
Called from ->HDIALOG:MSGNOTFOUND(0)
Called from ->HDIALOG:OEDITBOX1(0)
Called from \prg\chat_hwgui.PRG->CHECKPASS(362)
Called from \prg\chat_hwgui.PRG->(b)LOGIN(245)
Called from ->ONDLGCOMMAND(477)
Called from ->(b)(_INITSTATICS00003)(0)
Called from ->HDIALOG:ONEVENT(208)
Called from ->HWG_DLGBOXINDIRECT(0)
Called from ->HDIALOG:ACTIVATE(149)
Called from \prg\chat_hwgui.PRG->LOGIN(251)
Called from \prg\chat_hwgui.PRG->VELHAMAIN(33)

HwGUI 2.17 (fork) Harbour 3.4.0dev (096e855) (2019-07-15 13:50)
Data : 11/03/21
Hora : 23:46:49
WKS : DESKTOP-IT12ARQ
Usuário : Inacio Carvalho
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

dúvida de iniciante em HwGui: tela de login

Mensagem por JoséQuintas »

HWGUI não é console.
A execução não segue o fonte em sequência.

Em INIT define a tela.
Em ACTIVATE a tela vai aparecer.

Colocar alguma coisa antes de ACTIVATE, antes da tela existir, não funciona.

Como já foi dito, ACTIVATE equivale ao READ, DA TELA INTEIRA.
Só vai retornar depois do activate quando fechar a tela, enquanto isso, é tudo na base do que fazer quando clicar no botão de login, por exemplo.
Se programa pra internet, já deveria saber disso.

Mas ao contrário da internet, as rotinas não fazem parte do html, e sim do programa.
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

dúvida de iniciante em HwGui: tela de login

Mensagem por JoséQuintas »

cjp escreveu:A linha 294 é esta:
VALID {|| ::SENHA:="", oSenha:Refresh(), .T. }
Na verdade eu não entendi este código, não sei como ele validaria a senha.
Você tem um aplicativo funcionando há muito tempo.
Vai nos dizer que em nenhum lugar do aplicativo existe um VALID?

Uma coisa é dúvida na HWGUI, e outra coisa é o VALID que existe há mais de 40 anos.

E uma coisa é ajudar, e outra coisa é fazer fontes pra você colar no seu aplicativo prontos para uso.
Nesse caso ao invés de ajuda, passa a ser "funcionário grátis".
É necessário que você faça sua parte durante a ajuda.

Nota: Pode ser que você está querendo fazer 500 coisas de uma vez, e nem está tentando entender o que é passado.
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

dúvida de iniciante em HwGui: tela de login

Mensagem por Itamar M. Lins Jr. »

Olá!
e outra coisa é fazer fontes pra você colar no seu aplicativo prontos para uso.
Por isso apaguei partes da minha postagem, pq a pessoa pergunta uma coisa usando um determinado código(raciocínio), vem outra pessoa e coloca mais dezenas de códigos que não foi a pessoa que codificou ou seja não é o pensamento dele, ai ele pega o código da outra pessoa, e começa a querer entender e fazer mais perguntas... Não sabe o que ele fez e vai entender o pensamento dos outros ? Fora ficar ignorando as postagens que estou fazendo, mas isso é o de menos, com tanto que ele aprenda, tá valendo.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

dúvida de iniciante em HwGui: tela de login

Mensagem por cjp »

Fora ficar ignorando as postagens que estou fazendo, mas isso é o de menos, com tanto que ele aprenda, tá valendo.
Não estou ignorando as tuas postagens. Estou apenas tentando entendê-las antes de responder.

Por isso apaguei partes da minha postagem, pq a pessoa pergunta uma coisa usando um determinado código(raciocínio), vem outra pessoa e coloca mais dezenas de códigos que não foi a pessoa que codificou ou seja não é o pensamento dele, ai ele pega o código da outra pessoa, e começa a querer entender e fazer mais perguntas... Não sabe o que ele fez e vai entender o pensamento dos outros ?
Procurei testar e entender todas as sugestões que me foram dadas, como forma de aprendizado.

É curioso que, se eu testo, você critica. Se eu não tivesse testado, como ainda não consegui testar o exemplo que vc postou, vc também critica!
Vai nos dizer que em nenhum lugar do aplicativo existe um VALID?
Tenho sim VALID nos sistemas que uso. Só nunca usei VALID com codeblock. E não consegui descobri onde estaria o erro aí.

E uma coisa é ajudar, e outra coisa é fazer fontes pra você colar no seu aplicativo prontos para uso.
Nesse caso ao invés de ajuda, passa a ser "funcionário grátis".
É necessário que você faça sua parte durante a ajuda.

Nota: Pode ser que você está querendo fazer 500 coisas de uma vez, e nem está tentando entender o que é passado.
Não quero funcionário grátis. Quero aprender.
Eu postei a minha função para que vocês possam entender a minha dúvida e, se possível, indicar onde estou errando. Não pedi para ninguém refazer pra mim.
Não quero fazer 500 coisas de uma vez. Postei uma dúvida específica: quero fazer uma tela de login, para tentar começar um programinha bem simples em modo gráfico. Estou indo aos poucos. Consegui montar uma tela mínima, com alguns botões simples e umas pequenas funções básicas, que já servem para meu uso pessoal. Aos poucos, estou tentando avançar e, quem sabe, permitir o uso por outros usuários. Mas esbarrei na dificuldade com a tela de login, e por isso postei a dúvida.
Se puderem ajudar, agradeço. Se não puderem, agradeço também.
Inacio de Carvalho Neto
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

dúvida de iniciante em HwGui: tela de login

Mensagem por Itamar M. Lins Jr. »

Olá!
Não estou ignorando as tuas postagens. Estou apenas tentando entendê-las antes de responder.
Eu respondi em cima do SEU código, e vc está fazendo perguntas referente a outros códigos que não é seu.
Ja disse que INIT DIALOG e ACTIVATE é equivalente a GET e READ
Não adianta nada vc ficar estudando coisas POSSIBILIDADES antes de entender isso.
Se depois do ACTIVATE(função login) do SEU código tem um RETURN .T., como vai retornar .F. ?
É só isso p/ vc entender. Depois vc vai aprofundando o seu conhecimento. Pode colocar no meio(dentro) do INIT DIALOG e ACTVATE milhões de comandos. Mas uma ora ele vai ter que SAIR dessa JANELA e nisso vai executar o resto dos comandos. Pq a função LOGIN continua depois do ACTIVATE.
Não se encante com o código dos outros, estude o SEU.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

dúvida de iniciante em HwGui: tela de login

Mensagem por Fernando queiroz »

ja que fui citado indiretamente vamos lá:

para iniciante não pense que pingo é rotina.
as vezes é melhor passar uma rotina mesmo que seja com a logica de outro para facilitar o entendimento e foi isso que eu fiz
no primeiro post ele mesmo avisa que a rotina de login não esta feita
logo após ele pergunta como fazer para que apareça os * em vez do que foi digitado , ai coloquei um trecho referente a PASSWORD na senha
em nenhum momento eu me referi a retorno de verdadeiro ou falso, mesmo vendo que a logica dele estava errada.

pessoal ajudar as vezes passa por pegar na mão mesmo, não é ser programador gratuito, sofri muito para aprender e tive ajuda de algumas pessoas como o Quintas , sempre tento fazer sozinho mas quando empaca e não vai em frente a melhor forma é mostrar como fazer , se depois a pessoa vai seguir ou não é decisão dele
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

dúvida de iniciante em HwGui: tela de login

Mensagem por Itamar M. Lins Jr. »

Olá!
que apareça os * em vez do que foi digitado
Vc usou seu código, não o dele.
mesmo vendo que a logica dele estava errada.
Pois eu procuro ir bem devagar, até pq aprendo na pirraça, sou muito cabeça dura.
Por isso procuro me ater ao código dele, pelo código dele sabemos o estágio em que ele se encontra.
Não adiantaria eu postar minha @ GET PASSWD. Pq deu no que deu, houve mais perguntas(extras) que a compreensão do que ele programou.
Até pq ele já disse que não é da área, mas se quer aprender, isso é o que importa.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

dúvida de iniciante em HwGui: tela de login

Mensagem por cjp »

Olá!
Seu código na função login, qual é o ultimo comando ? Depois de ACTIVATE ?
COmo vc quer que retorne .T. ou .F. ?
Use ai:
LOCAL lRet := .F.
If pass == OK ; lRet := .T.
e no firnal, return lRet
Não ficarei analisando códigos muito grande.
No final de toda função existe algum tipo de retorno para quem a chamou.
Acho que finalmente consegui entender o que vc quis dizer aqui. Consegui fazer esta parte funcionar. Está verificando corretamente a senha e saindo quando digita senha errada; e entra quando digita a correta.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

dúvida de iniciante em HwGui: tela de login

Mensagem por cjp »

@ 15,65 GET oE5 ;
VAR snh ;
PASSWORD ; // ---> NOTE
SIZE 150, 26
Consegui usar a PASSWORD para omitir os caracteres da senha. Obrigado.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

dúvida de iniciante em HwGui: tela de login

Mensagem por cjp »

ja que fui citado indiretamente vamos lá:

para iniciante não pense que pingo é rotina.
as vezes é melhor passar uma rotina mesmo que seja com a logica de outro para facilitar o entendimento e foi isso que eu fiz
no primeiro post ele mesmo avisa que a rotina de login não esta feita
logo após ele pergunta como fazer para que apareça os * em vez do que foi digitado , ai coloquei um trecho referente a PASSWORD na senha
em nenhum momento eu me referi a retorno de verdadeiro ou falso, mesmo vendo que a logica dele estava errada.

pessoal ajudar as vezes passa por pegar na mão mesmo, não é ser programador gratuito, sofri muito para aprender e tive ajuda de algumas pessoas como o Quintas , sempre tento fazer sozinho mas quando empaca e não vai em frente a melhor forma é mostrar como fazer , se depois a pessoa vai seguir ou não é decisão dele
Agradeço a compreensão e reafirmo tudo que vc diz.
Sobretudo na tua primeira frase, o que é óbvio para quem entende, para mim, iniciante, não é tão simples.
Pra exemplificar, aprendi a mexer com ADO com um exemplo postado pelo Quintas. Fui testando, fazendo, perguntando, até conseguir. Hoje todo o meu sistema está em ADO, o que corrigiu vários problemas que tinha no sistema antes, funcionando bem. Mas no início foi bem difícil, perguntei bastante, incomodei bastante.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

dúvida de iniciante em HwGui: tela de login

Mensagem por cjp »

Para prosseguir avançando nesta questão, uma dúvida, por favor: como faço para avançar na tela da senha teclando apenas Enter, ao invés de clicar em Entrar. Ou seja, sem o mouse, é possível avançar na tela de login?
Inacio de Carvalho Neto
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

dúvida de iniciante em HwGui: tela de login

Mensagem por gilbertosilverio »

Ola CJP

Creio que o segredo e usar CLIPPER, para usar o ENTER.

INIT DIALOG oDlgAcesso TITLE FIRMA+alltrim(aPasta) AT 0, 0 SIZE 814, 484 CLIPPER COLOR x_WHITE ;
STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+DS_CENTER ;
ON INIT {|| INI_SENHAS() }
Para você ver como faço e ter um ideia, pois sou igual a você, entendo pouco de programação, mais basicamente e no VALID que faço as verificações, não sei se e certo, mais para mim funciona...

O INI_SENHAS, e onde monto a matriz com o dados dos usuários, decodificação da senha e acesso...

Código: Selecionar todos


FUNCTION LoginUsuario()
   PRIVATE lVal1  := .F., lVal2 := .F., oGetcUsuario, oGetcSenha, aUSUARIO:={}
   PRIVATE vSenha := Space(06), vUsuario:=spac(10), oDlgAcesso

   INIT DIALOG oDlgAcesso TITLE FIRMA+alltrim(aPasta)  AT 0, 0  SIZE 814, 484 CLIPPER COLOR x_WHITE ;
               STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+DS_CENTER         ;
               ON INIT {|| INI_SENHAS() }

      @  60, 404 SAY "  Usuario:" SIZE  80, 22 BACKCOLOR x_WHITE COLOR x_BLACK
      @ 135, 400 GET vUsuario   SIZE 120, 26 PICTURE '@!'     ;
                 MAXLENGTH 10 TOOLTIP "Digite o usuario"      ;
                 VALID  { || ValidaUsuario() }

      @ 555, 404 SAY "  Senha:"        SIZE  80, 22 Tooltip 'Digite a Senha' BACKCOLOR x_WHITE COLOR x_BLACK
      @ 625, 400 GET vSenha PASSWORD SIZE 120, 26                 ;
                 MAXLENGTH 06 TOOLTIP "Digite a senha de acesso"  ;
                 VALID  { || ValidaSenha(), IF( lVal1 = .T. .AND. lVal2 = .T. , ( HWG_ENDDIALOG(),TELAPRINCIPAL() ), ( vSENHA:=SPAC(06), oDLGACESSO:REFRESH()) ) }

   ACTIVATE DIALOG oDlgAcesso
RETURN NIL

FUNCTION ValidaUsuario()
   LOCAL BB:=0
   DO CASE
      CASE Empty(vUsuario)
         lVal1:=.F.
         vUsuario := Space(10)
         vSenha   := Space(06)
         RETURN .F.
      CASE !Empty(vUsuario)
         BB:=ASCAN( aUSUARIO, { |aVal| aVal[1] == vUSUARIO } )
         IF BB > 0
            lVal1:=.T.
            RETURN .T.
         ELSE
            HWG_MSGSTOP([Usuário não cadastrado], [Aviso do sistema])
            lVal1:=.F.
            vUsuario :=Space(10)
            vSenha   :=Space(06)
            RETURN .F.
         ENDIF
   ENDCASE
RETURN .T.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
FUNCTION ValidaSenha()
   LOCAL BB:=0
   DO CASE
      CASE Empty(vSenha)
            vSenha := (Space(06))
            lVal2  := .F.
            RETURN .F.
      CASE !Empty(vSenha)
         BB:=ASCAN( aUSUARIO, { |aVal| aVal[2] == vUSUARIO+vSenha } )
         IF BB > 0
            nUSO  := aUSUARIO[BB,3] ; CVV:=aUSUARIO[BB,4]   ; cUsuario:=aUSUARIO[BB,1]
            lVal2 := .T.
            RETURN .T.
         ELSE
            HWG_MSGSTOP([Senha não confere com a cadastrada], [Aviso do sistema])
            vSenha := Space(06)
            lVal2  := .F.
            RETURN .F.
         ENDIF
   ENDCASE
RETURN .T.

Só espero não te confundir ainda mais, pois cada louco tem suas manias...
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
Responder