Label - Macro Substituição (&) e for/next

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Label - Macro Substituição (&) e for/next

Mensagem por microvolution »

Pessoal, tô com o seguinte código:

Código: Selecionar todos

     for I := 1 to 10
          ESPACO := ESPACO + len (ARRAY [I,1]) + len (ARRAY [I,2]) + 2
               @ 370 + (10 *I) ,  480 LABEL &I ;
                  VALUE ARRAY [I,1] ;
                  AUTOSIZE
     endif
Acontece que na linha que pertence ao LABEL, apresenta a mensagem de erro:
Date:15/03/2016 Time: 11:17:43
Error BASE/1081 Erro nos parƒmetros: +
Called from _DEFINELABEL(92)
Called from TECLAS_FUNCAO_GUI(6383)
Called from OPCOES_CAMPOS(2035)
Called from TRATA_CAMPOS_GUI(6282)
(...)
A linha 6383 acima mencionada é a linha do AUTOSIZE, mas, por causa do ponto e vírgula (;) o local correto é no @ 370 + (10*I).
Alguém sabe ajudar?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por HASA »

:))

Código: Selecionar todos

for I := 1 to 10
     *
     Y := "xlabel"+ALLTRIM(SRT(I))
     *
     ESPACO := ESPACO + len (ARRAY [I,1]) + len (ARRAY [I,2]) + 2
       @ 370 + (10 *I) , 480 LABEL &Y ;
         VALUE ARRAY [I,1] ;
         AUTOSIZE
  endif

:)Pos

HASA
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por microvolution »

Olá
HASA escreveu:HASA
obrigado por ser o primeiro a tentar me ajudar, mas, infelizmente não funcionou, o mesmo erro permanece.
Bom, aumentei o código, pois aquela hora postei tão somente o que "penso ser o erro", mas, o que penso, na maioria, não o é, pois
sou um eterno aprendiz e estou sempre em construção!
veja(m) por favor:

Código: Selecionar todos

     for I := 1 to NUM_TECLAS
          ESPACO := ESPACO + len (ARRAY [I,1]) + len (ARRAY [I,2]) + 2
          // nLIN := nLIN + ( 10 * I ) 
          Y := "xlabel" + ALLTRIM ( STR ( I ) )
          
          if ESPACO < 81
               @ nLIN ,  nCOL LABEL &Y ;
                  VALUE ARRAY [I,1] ;
                  AUTOSIZE
               if I < NUM_TECLAS
                    @ nLIN ,  nCOL LABEL &Y ;
                        VALUE ARRAY [I,2] ;
                        AUTOSIZE
               else
                    @ nLIN ,  nCOL LABEL &Y2 ;
                        VALUE ARRAY [I,2] ;
                        AUTOSIZE
               endif
          else
               if ESPACO < 83
                     @ nLIN ,  nCOL LABEL &Y ;
                        VALUE ARRAY [I,1] ;
                        AUTOSIZE
                     @ nLIN ,  nCOL LABEL &Y2 ;
                        PARENT Frm_TELA_ENTRADA ;
                        VALUE ARRAY [I,2] ;
                        AUTOSIZE
               else
               endif
          endif
     next I
Esse é o código real, observe(m) que tem uma linha comentada, pois pensei que fosse a responsável, mas, não o é.
O erro está no primeiro label, que consequentemente todos possuem o mesmo erro.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por Claudio Soto »

Como esta definida la variable Y2
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por Toledo »

Amigo, é bem provável que o erro está em PARENT Frm_TELA_ENTRADA ;

Lembrando: o parâmetro PARENT só deve ser usado quando a WINDOW já estiver ativa (ACTIVATE WINDOW).

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por microvolution »

Claudio Soto escreveu:Como esta definida la variable Y2
opa obrigado Dr. por fazer parte deste tópico, és mui benevuto / bien vindo!
Bom, realmente a variavel Y2 não existe, foi só uma tentativa errônea de usar a macro-substituição. A ideia era a seguinte:
&Y = conteúdo da variável
&Y2 = conteúdo da variável + 2, então acho que essa deveria ser assim:
&Y.2, ou &Y."2" ou &Y+"2" ou &Y+2...
Bom, mas, isso não vem ao caso, o caso aqui é que dá erro de Argument Error + já no primeiro LABEL.
Então, pensei e fiz uma drástica redução no código para tirar as dúvidas. E, ficou assim:

Código: Selecionar todos

     for I := 1 to NUM_TECLAS
         mVALUE := ARRAY [I,1] + HB_EOL()
     next I
     @ nLIN ,  nCOL LABEL LABEL_TECLAS  ;
     VALUE mVALUE ;
     AUTOSIZE
Infelizmente, o mesmo erro continua:

Código: Selecionar todos

Date:15/03/2016 Time: 15:55:33
 Error BASE/1081 Erro nos parƒmetros: +
 Called from _DEFINELABEL(92) 
 Called from TECLAS_FUNCAO_GUI(6384) 
 Called from OPCOES_CAMPOS(2035) 
A linha 6384 (acima), é exatamente onde está escrito AUTOSIZE, mas, sabemos que o erro não está nela, e, sim na 6382 ou 6383, ou seja, num dois dois comandos/funções:

Código: Selecionar todos

     @ nLIN ,  nCOL LABEL LABEL_TECLAS  ;
     VALUE mVALUE ;
No meu modo de ver, é no VALUE mVALUE.
Agora, me perguntei o "porquê" :? "dio no compriendo que tu ablas"... rsrsrs :-o :(
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por microvolution »

Toledo escreveu:Amigo, é bem provável que o erro está em PARENT Frm_TELA_ENTRADA ;
bom conforme o outro tópico a respeito disso, para ser um paliativo, deixei o FRM_TELAENTRADA.ACTIVATE para depois desses comandos/funções.
Então, onde ele existe "observe-se" que está comentado.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por Toledo »

microvolution escreveu:Então, onde ele existe "observe-se" que está comentado.
O que você quis dizer com "onde ele existe"? Ele quem? O que está "comentado"?

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por microvolution »

Toledo escreveu:O que você quis dizer com "onde ele existe"? Ele quem? O que está "comentado"?
uai sô... o tal PARENT
microvolution escreveu:25 PARENT Frm_TELA_ENTRADA ;
, mas, o Sr. tem razão numa coisa, ele, realmente não estava comentado na minha postagem... mas, por outro lado, como ainda o processador runtime não havia chegado até ele, o erro não é nele e sim antes dele, no primeiro @LABEL.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por Toledo »

microvolution escreveu:como ainda o processador runtime não havia chegado até ele
Amigo, por acaso você retirou o PARENT Frm_TELA_ENTRADA ; e fez um teste?

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por Claudio Soto »

Esto funciona:

Código: Selecionar todos


#include "hmg.ch"

Function Main
LOCAL ARRAY [10]

	DEFINE WINDOW Form_Main ;
		AT 0,0 ;
		WIDTH 640 HEIGHT 480 ;
		TITLE 'Main Window' ;
		MAIN 


for I := 1 to 10
  
  Y := "xlabel"+ALLTRIM(STR(I))
  
  ARRAY [I] := { Y , I } 
  
  @ 10 + (30 * I) , 100 LABEL &Y ;
    VALUE ARRAY [I,1] ;
    AUTOSIZE
Next


	END WINDOW


	CENTER WINDOW Form_Main

	ACTIVATE WINDOW Form_Main

Return 

Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por microvolution »

Toledo escreveu:Amigo, por acaso você retirou o PARENT Frm_TELA_ENTRADA; e fez um teste?
na verdade prezado Toledo, o meu engano de ter colocado-o no último LABEL, me fez refletir e resolvi colocá-lo em todos os outros... e num é que deu certo...
Este é o código melhorado:

Código: Selecionar todos

     for I := 1 to NUM_TECLAS
          ESPACO := ESPACO + len (ARRAY [I,1]) + len (ARRAY [I,2]) + 2
          nLIN := nLIN + 20
          Y  := "xlabel"  + ALLTRIM ( STR ( I ) )
          Y2 := "xlabel2" + ALLTRIM ( STR ( I ) )

          @ nLIN ,  nCOL LABEL &Y ;
               VALUE ARRAY [I,1] ;
               PARENT Frm_TELA_ENTRADA ;
               FONTCOLOR { 255, 255, 0 } ;
               AUTOSIZE
          @ nLIN ,  nCOL + 50 LABEL &Y2 ;
               VALUE ARRAY [I,2] ;
               PARENT Frm_TELA_ENTRADA ;
               AUTOSIZE
     next I
parabéns a todos, pois, aqui, apesar das minhas interpretações errôneas do fórum, tenho logrado mais êxito que noutros tópicos!
Dr. Cláudio Soto, obrigado, por ter V.Sa. em minha vida. Me sinto muito honrado, por ter um dos "dinossauros" do clipper, c, c++, harbour, respondendo a questões tão insignificantes. Desculpa o incômodo! Se eu puder fazer alguma coisa, ou se, souber algo, pode contar comigo. Creio que no clipper/harbour/hmg, estarei precisando mais dos Srs. do que o contrário.
Mas, na área de áudio, instrumentos musicais e produção de vídeo, talvez eu possa contribuir com algo mais!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por Claudio Soto »

microvolution escreveu:Mas, na área de áudio, instrumentos musicais e produção de vídeo, talvez eu possa contribuir com algo mais!
Muchas gracias.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por Claudio Soto »

Código: Selecionar todos

#include "hmg.ch"

Function Main
LOCAL ARRAY [10]

	DEFINE WINDOW Frm_TELA_ENTRADA ;
		AT 0,0 ;
		WIDTH 640 HEIGHT 480 ;
		TITLE 'Main Window' ;
		MAIN 




NUM_TECLAS := 10
nLIN := 5
nCOL := 50
ESPACO := 0

for I := 1 to NUM_TECLAS

  ARRAY [I] := { "label" , "test" } 

     ESPACO := ESPACO + len (ARRAY [I,1]) + len (ARRAY [I,2]) + 2
     nLIN := nLIN + 20
     Y := "xlabel" + ALLTRIM ( STR ( I ) )
     Y2 := "xlabel2" + ALLTRIM ( STR ( I ) )

     @ nLIN , nCOL LABEL &Y ;
       VALUE ARRAY [I,1] ;
       PARENT Frm_TELA_ENTRADA ;
       FONTCOLOR { 255, 255, 0 } ;
       AUTOSIZE
     @ nLIN , nCOL + 50 LABEL &Y2 ;
       VALUE ARRAY [I,2] ;
       PARENT Frm_TELA_ENTRADA ;
       AUTOSIZE
  next I

	END WINDOW


	CENTER WINDOW Frm_TELA_ENTRADA

	ACTIVATE WINDOW Frm_TELA_ENTRADA

Return 

Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

HMG Label - Macro Substituição (&) e for/next

Mensagem por Toledo »

Amigos, este mesmo exemplo postado pelo Dr. Claudio Soto se excluir PARENT Frm_TELA_ENTRADA ; será executado sem qualquer problema.
microvolution escreveu:na verdade prezado Toledo, o meu engano de ter colocado-o no último LABEL, me fez refletir e resolvi colocá-lo em todos os outros... e num é que deu certo...
Amigo, de duas uma, ou você colocou este seu código depois de END WINDOW ou no ON INIT (depois de ACTIVATE WINDOW Frm_TELA_ENTRADA), pois o uso de PARENT só será necessário nestes dois casos. Se este seu código estivesse dentro de DEFINE WINDOW Frm_TELA_ENTRADA e END WINDOW (que é o que pensei que estava ocorrendo) o PARENT não seria necessário, então se este fosse o caso, ocorreria o erro.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Responder