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

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

Moderador: Moderadores

Avatar do usuário
LIST SYSTEMS
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 06 Dez 2018 09:06
Localização: São Paulo

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

Mensagem por LIST SYSTEMS »

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:

Código: Selecionar todos

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)
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

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

Mensagem por Fernando queiroz »

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: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

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

Mensagem por Fernando queiroz »

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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem por JoséQuintas »

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)

Código: Selecionar todos

@ 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 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/
Responder