Página 2 de 3
dúvida de iniciante em HwGui: tela de login
Enviado: 03 Nov 2021 23:30
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.
dúvida de iniciante em HwGui: tela de login
Enviado: 03 Nov 2021 23:40
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.
dúvida de iniciante em HwGui: tela de login
Enviado: 03 Nov 2021 23:48
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
dúvida de iniciante em HwGui: tela de login
Enviado: 04 Nov 2021 09:09
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.
dúvida de iniciante em HwGui: tela de login
Enviado: 04 Nov 2021 09:52
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.
dúvida de iniciante em HwGui: tela de login
Enviado: 04 Nov 2021 12:09
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.
dúvida de iniciante em HwGui: tela de login
Enviado: 05 Nov 2021 01:57
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.
dúvida de iniciante em HwGui: tela de login
Enviado: 05 Nov 2021 08:39
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.
dúvida de iniciante em HwGui: tela de login
Enviado: 05 Nov 2021 09:57
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
dúvida de iniciante em HwGui: tela de login
Enviado: 05 Nov 2021 13:55
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.
dúvida de iniciante em HwGui: tela de login
Enviado: 05 Nov 2021 23:46
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.
dúvida de iniciante em HwGui: tela de login
Enviado: 05 Nov 2021 23:56
por cjp
@ 15,65 GET oE5 ;
VAR snh ;
PASSWORD ; // ---> NOTE
SIZE 150, 26
Consegui usar a PASSWORD para omitir os caracteres da senha. Obrigado.
dúvida de iniciante em HwGui: tela de login
Enviado: 06 Nov 2021 00:08
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.
dúvida de iniciante em HwGui: tela de login
Enviado: 06 Nov 2021 00:12
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?
dúvida de iniciante em HwGui: tela de login
Enviado: 06 Nov 2021 07:20
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...