Clipper On Line • Ver Tópico - Obter o nome do GET e voltar para ele após função

Obter o nome do GET e voltar para ele após função

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Obter o nome do GET e voltar para ele após função

Mensagempor LIST SYSTEMS » 25 Dez 2018 19:12

Olá, Amigos!

Um Feliz Natal para todos!

Sei que hoje é época de festas mas preciso de uma ajuda, caso seja possível.

1 - Preciso obter o nome do primeiro get de meu formulário
2 - Quando o usuário clica em um PushButton nesse formulário, é executada uma função que verifica se o usuário preencheu todas as variáveis. Se não, estabelece o foco com ":setfocus()" para o get cujo nome foi obtido anteriormente.

Como faço isso?

Eis meu código:

FUNCTION MAIN()
   //CORES DOS BOTOES
   //01 BOTAO SEM FOCO
   //02 BOTAO COM FOCO
   //03 BOTAO COM FOCO E PRESSIONADO
   //04 TECLA DE ATALHO DO BOTAO
   LOCAL cCORBOTOES := "W+/B,W+/R,W+/BG,W+/GR+"
  PUBLIC cEMPRESA := SPACE(20)
  PUBLIC cUSUARIO := SPACE(20)
  PUBLIC cSENHA := SPACE(20)
   PUBLIC bENTRAR := .T.
   PUBLIC bSAIR := .T.
   PUBLIC lACESSAR := .F.
 
  DO WHILE .T.
      SETCOLOR(N/W,W+/BG)
      @ 10,22 CLEAR TO 16,58
     @ 10,22 TO 16,58
    SET CURSOR ON
    @ 11,24 SAY "EMPRESA...:" GET cEMPRESA PICTURE "@!" SEND COLORSPEC := "W+/GR+,W+/BG"
      oGETPRI := ALLTRIM(STR(GETACTIVE():NAME))
    @ 12,24 SAY "USUARIO...:" GET cUSUARIO PICTURE "@!" SEND COLORSPEC := "W+/GR+,W+/BG"
    @ 13,24 SAY "SENHA.....:" GET cSENHA PICTURE "@!" SEND COLORSPEC := "W+/GR+,BG/BG"
      @ 15,34 GET bENTRAR PUSHBUTTON CAPTION "ENTRAR" COLOR cCORBOTOES STYLE "[]" STATE {||ACESSOBOTOES('ENTRAR')}
      @ 15,48 GET bSAIR PUSHBUTTON CAPTION "SAIR" COLOR cCORBOTOES STYLE "[]" STATE {||ACESSOBOTOES('SAIR')}
    READ
    IF LASTKEY() = 27
       EXIT
    ENDIF
      IF lACESSAR == .T.
         //CHAMA MENU PRINCIPAL
         //CARDAPIO()
         lACESSAR = .F.
         EXIT
      ELSEIF lACESSAR == .F.
         EXIT
      ENDIF
   ENDDO
  SET CURSOR OFF
RETURN(NIL)

FUNCTION ACESSOBOTOES(cACAO)
DO CASE
   CASE UPPER(ALLTRIM(cACAO)) == "ENTRAR"
      lACESSAR = .T.
      cEMPRESA = UPPER(ALLTRIM(cEMPRESA)) + SPACE(20 - LEN(ALLTRIM(cEMPRESA)))
    cUSUARIO = UPPER(ALLTRIM(cUSUARIO)) + SPACE(20 - LEN(ALLTRIM(cUSUARIO)))
    cSENHA = UPPER(ALLTRIM(cSENHA)) + SPACE(20 - LEN(ALLTRIM(cSENHA)))
    IF (LEN(ALLTRIM(cEMPRESA)) > 0) .AND. (LEN(ALLTRIM(cUSUARIO)) > 0) .AND. (LEN(ALLTRIM(cSENHA)) > 0)
         lACESSAR = .T.
     ELSE
        ALERT("PREENCHA OS CAMPOS EMPRESA, USUARIO E SENHA PARA OBTER ACESSO AO SISTEMA!",{"OK"},"W+/B")
         //ESTABELECE FOCO NO GET cEMPRESA
         lACESSAR = .F.
      ENDIF
   CASE UPPER(ALLTRIM(cACAO)) == "SAIR"
      lACESSAR = .F.
ENDCASE
RETURN(lACESSAR)
Avatar de usuário

LIST SYSTEMS
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 6
Data de registro: 06 Dez 2018 08:06
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Obter o nome do GET e voltar para ele após função

Mensagempor Fernando queiroz » 25 Dez 2018 21:45

eu mudaria um pouco a logica em vez de

@ 11,24 SAY "EMPRESA...:" GET cEMPRESA PICTURE "@!" SEND COLORSPEC := "W+/GR+,W+/BG"
oGETPRI := ALLTRIM(STR(GETACTIVE():NAME))
@ 12,24 SAY "USUARIO...:" GET cUSUARIO PICTURE "@!" SEND COLORSPEC := "W+/GR+,W+/BG"
@ 13,24 SAY "SENHA.....:" GET cSENHA PICTURE "@!" SEND COLORSPEC := "W+/GR+,BG/BG"

usaria assim

@ 11,24 SAY "EMPRESA...:" GET cEMPRESA PICTURE "@!" VALID {|| IF( LEN(ALLTRIM(cEMPRESA)) > 0), .T., .F.) }
@ 12,24 SAY "USUARIO...:" GET cUSUARIO PICTURE "@!" VALID {|| IF( LEN(ALLTRIM(cUSUARIO)) > 0), .T., .F.) }
@ 13,24 SAY "SENHA.....:" GET cSENHA PICTURE "@!" VALID {|| IF( LEN(ALLTRIM((cSENHA)) > 0), .T., .F.) }

ELE SO PASSARIA PARA O PROXIMO CAMPO SE ESTIVESSE PREENCHIDO CORRETAMENTE

Uma outra opção é criar uma função de validação para cada campo

@ 11,24 SAY "EMPRESA...:" GET cEMPRESA PICTURE "@!" VALID {|| VERIFICAEMPRESA( ) }
@ 12,24 SAY "USUARIO...:" GET cUSUARIO PICTURE "@!" VALID {|| VERIFICAUSUARIO( ) }
@ 13,24 SAY "SENHA.....:" GET cSENHA PICTURE "@!" VALID {|| VERIFICASENHA( ) }

FUNCTION VERIFICAEMPRESA( )
IF (LEN(ALLTRIM(cEMPRESA)) > 0)
RETURN .T.
ELSE
ALERT("PREENCHA O CAMPOS EMPRESA*",{"OK"},"W+/B")
RETURN .F.
ENDIF
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

Obter o nome do GET e voltar para ele após função

Mensagempor Fernando queiroz » 25 Dez 2018 22:12

Outra coisa que achei estranho é que você não criou os OBJETOS para poder setar o foco neles

ex:

Local oEdit2, mCPFCGC

@ 89,134 GET oEdit2 VAR mCPFCGC SIZE 128,24 PICTURE '99999999999999' MAXLENGTH 14 VALID {|| VERIFICA_CLIENTE( )}

oEdit2:setfocus()
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

Obter o nome do GET e voltar para ele após função

Mensagempor JoséQuintas » 26 Dez 2018 05:04

Fernando queiroz escreveu:Outra coisa que achei estranho é que você não criou os OBJETOS para poder setar o foco neles


Tá confundindo HWGui e Harbour

LIST SYSTEMS escreveu:1 - Preciso obter o nome do primeiro get de meu formulário


Pra ficar bom, seria melhor alterar a getsys e dividir o valid em duas partes, uma pra validar, e outra pra interagir com o usuário.
Poderia até deixar com cor diferente o que estiver inválido.
No módulo, poderia tirar vantagem do READ SAVE.

Só uma rotina simbólica, porque depende muito do que existe em VALID pra dar certo, e depende da GETSYS que estiver usando.
Também deve precisar ajuste para o que não é GET (como button e outros)

@ 2, 2 SAY "dddd" GET x VALID x > 0
@ 3, 2 SAY "xxxx" GET z VALID z > 0
DO WHILE .T.
   READ SAVE
   lExit := .T.
   FOR EACH oElement IN GetList
      IF oElement:When() .AND. ! oElement:Validate()
         oElement:SetFocus()
        lExit := .F.
         EXIT
      ENDIF
   NEXT
   IF lExit
      EXIT
   ENDIF
ENDDO
CLEAR GETS
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro