Clipper On Line • Ver Tópico - Eval no Clipper 5.3 roda, no Harbour não

Eval no Clipper 5.3 roda, no Harbour não

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

Moderador: Moderadores

 

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor microvolution » 03 Mar 2019 17:46

ah!
se eu apenas mudar uma das linhas para:
oMenu:AddItem( acMenu[ nCont, 1 ] , bCode )

aí o erro encerra.
Mas, o clique no mouse nada faz!

??? :%
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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor JoséQuintas » 03 Mar 2019 18:26

Aff

Como dizia o gerente do shopping Eldorado de Santos... Porr... Caralh... essa merd... tá fod....

De novo....

seu menu tem isto: "PCI10001()"

Eval( "PCI10001()" )


Não adianta postar quilômetros de fonte aqui, não adianta falar que copiou rotina, não adianta falar que é WVG...

O resultado de tudo é isto, e isto não funciona:

Eval( "PCI10001()" )


Porque não funciona? porque Eval() é pra codeblock e isso não é codeblock.
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: 18157
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor JoséQuintas » 03 Mar 2019 18:31

Vamos simplificar?

Já não tem seu menu original que funciona?
Porque não copia dele o que já funciona?
Porque insiste em copiar outra rotina feita pra outro menu?

Como faz no menu velho?

usa &( nome ) no velho?
Então usa &( nome ) no novo

usa Do( nome ) no velho?
Então usa do( nome ) no novo

usa Eval( nome ) no velho?
Então usa Eval( nome ) no novo.

usa &( nome + "()" ) no velho?
Então usa &( nome + "()" ) no novo

usa &( [ { || Executa_Prog( "] + nome + [" ) }] ) no velho?
então usa &( [ { || Executa_Prog( "] + nome + [" ) }] ) no novo.

Cada um funciona de um jeito, cada um funciona conforme o parâmetro recebido, UM NÃO FUNCIONA PARA O PARÂMETRO NO FORMATO DO OUTRO.
Qual a dúvida?

É igual somar 1 + "A", isso não funciona, os parâmetros são diferentes. Como corrigir?
Sei lá... quem fez o fonte deveria saber. Pode ser 1 errado, pode ser "A" errado, pode ser que era pra somar números, pode ser que era pra somar letras, pode ser que era pra somar o ASCII, como é que eu vou saber? Fazer funcionar é uma coisa, corrigir é outra.
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: 18157
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor MSDN » 04 Mar 2019 10:27

Só para lembrar, o Fórum é para quem sabe programar, portanto, tirar dúvidas de programadores, e não ensinar alguém a programar !
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor JoséQuintas » 04 Mar 2019 12:01

Ou vamos simplificar:
Porque não adiciona um item de cada vez?

AddItem( texto, codeblock )
AddItem( texto, codeblock )
AddItem( texto, codeblock )
AddItem( texto, codeblock )
AddItem( texto, codeblock )
AddItem( texto, codeblock )


Que eu saiba, vai apenas testar, então apenas faça o teste, nem precisa do menu inteiro pra testar.

O pior de tudo:
quando o menu funcionar é que vão começar as perguntas, porque nada mais do aplicativo vai funcionar.
Eu já sei disso, e já avisei, mas parece que não adianta escrever....
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: 18157
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor JoséQuintas » 05 Mar 2019 03:17

menuwvg.png


PROCEDURE Main

   LOCAL oMenu, oSubMenu, oSubMenu2

   SetMode( 30, 90 )
   CLS
   oMenu := wvgSetAppWindow():MenuBar()

   oMenu:AddItem( "teste 1", { || Teste() } )
   oMenu:AddItem( "teste 2", { || Teste() } )
      // cria submenu de oMenu
      oSubMenu := wvgMenu():New( oMenu, , .T. ):Create()
      oSubMenu:AddItem( "teste 3, 1 ", { || Teste() } )
      oSubMenu:AddItem( "teste 3, 2 ", { || Teste() } )
         // cria submenu de oSubMenu
         oSubMenu2 := wvgMenu():New( oSubMenu, , .T. ):Create()
         oSubMenu2:AddItem( "teste 3, 3, 1 ", { || Teste() } )
         oSubMenu2:AddItem( "teste 3, 3, 2 ", { || Teste() } )
         oSubMenu2:AddItem( "teste 3, 3, 3 ", { || Teste() } )
         // criou, agora adiciona
         oSubMenu:AddItem( oSubMenu2, "teste 3, 3" )
      // continua adicionando
      oSubMenu:AddItem( "teste 3, 4 ", { || Teste() } )
      oSubMenu:AddItem( "teste 3, 5 ", { || Teste() } )
      // criou, agora adiciona
      oMenu:AddItem( oSubMenu, "teste 3" )
   // continua adicionando
   oMenu:AddItem( "teste 4", { || Teste() } )
   oMenu:AddItem( "teste 5", { || Teste() } )
   oMenu:AddItem( "teste 6", { || Teste() } )
   DO WHILE Inkey(0) != 27
   ENDDO

   RETURN

FUNCTION Teste()

   wapi_MessageBox( ,"teste", "teste" )

   RETURN NIL
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: 18157
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor JoséQuintas » 05 Mar 2019 03:32

Agora pentelhar com um menu mais simples....

imagemmenu.jpg


Quem quer apostar que ele vai perguntar como faz?
Seria normal ele perguntar, mas não quando ele já sabe fazer.... kkkk
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: 18157
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor microvolution » 05 Mar 2019 16:23

JQuintas, funcionou assim:
MenuOption(HB_AnsiToOem("Orçamento ~Simplificado"),{||PCI10001()})

Mas, no caso, já executa o codbloque dentro desta linha:
oMenu:AddItem( acMenu[ nCont, 1 ] , bCode )

Ou seja, já executa automatimente sem o EVAL ou sem a minha função EXECUTA_PROGRAMA_WVG.
Aí assim funciona e ao retornar ao menu principal, tenta executar novamente:
MenuOption(HB_AnsiToOem("Orçamentos"),{|| EXECUTA_PROGRAMA_WVG (PCI10001())})

Antes de abrir o PCI10001() preciso executar algumas funções tipo: CLOSE ALL e desta forma:
oMenu:AddItem( acMenu[ nCont, 1 ] , bCode )

não é possível, pois o additem("prompt","ação") já executa automaticamente ao clique do mouse.
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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor JoséQuintas » 05 Mar 2019 17:07

microvolution escreveu:Mas, no caso, já executa o codbloque dentro desta linha:

oMenu:AddItem( acMenu[ nCont, 1 ] , bCode )

Ou seja, já executa automatimente sem o EVAL ou sem a minha função EXECUTA_PROGRAMA_WVG.


Impossível.

Antes de abrir o PCI10001() preciso executar algumas funções tipo: CLOSE ALL e desta forma:

oMenu:AddItem( acMenu[ nCont, 1 ] , bCode )

não é possível, pois o additem("prompt","ação") já executa automaticamente ao clique do mouse.


Já conseguiu executar um módulo? não? então primeiro faça funcionar.
Precisa executar algumas coisas? coloque dentro do PCI10001() ExecutarAlgumasCoisas()

Só depois de fazer funcionar uma opção do menu é que vai pensar nas outras opções.
Este deveria ter sido o primeiro teste de todos.
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: 18157
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor MSDN » 05 Mar 2019 17:29

A questão é que nosso amigo não quer tirar uma dúvida, ele quer que alguém faça por ele.
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor microvolution » 05 Mar 2019 19:39

JoséQuintas escreveu:oMenu:AddItem( acMenu[ nCont, 1 ] , bCode )
está executando sim. basta clicar no mouse sobre a sub-opção desejada que executa sem o EVAL. Como está lá no exemplo da pasta contrib\gwvg\tests\demowvg.PRG/EXE e comparando com o q vc gentilmente me ajudou como sempre.
JoséQuintas escreveu:Já conseguiu executar um módulo? não? então primeiro faça funcionar.
sim. já funciona. Mas, para funcionar corretamente tenho que colocar um CLOSE ALL e HIDE nos pusbhuttons.
Como é uma coisa que precisa ser genérica pra todos, se eu entrar em todos os PCIxxxx(s) além de dar muito trabalho desnecessário, não funcionará mais o menu clipper antigo.
JoséQuintas escreveu:Este deveria ter sido o primeiro teste de todos.
posso não ter compreendido a métrica correta, mas, este sempre foi e é o desejo: testar um, pra depois ir para o próximo passo.
Por favor, veja as 2 telas. uma antes de clicar e outra depois de clicado:
19-0305 - teste de funcionalidade 1.png

19-0305 - teste de funcionalidade 2.png

Está funcionando. as linhas do seu exemplo que alterei e entendi que fazem o funcionamento são:
MenuOption(HB_AnsiToOem("Orçamento")               ,{||PCI10001()})

bCode := acMenu[ nCont, 3 ] // LINHA QUE REALMENTE FUNCIONA ATÉ AGORA 5/3/19w
oMenu:AddItem( acMenu[ nCont, 1 ] , bCode)

Só q os botões não poderiam continuar no PCI10001. Se fosse só nele, fácil, vou lá bem no início - após as declarações LOCALs e encerrava os botões.
Mas, daí a necessidade de uma função. a função EXECUTA_PROGRAMA_WVG() que faz o que tem que ser feito.
Por hora, pra não haver erro de abertura duplicada dos arquivos DBF/NTX colquei bem abaixo da linha acima, a seguinte linha:
close all // acrescentado para fechar todos os arquivos e não dar erro DBF já aberto.
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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor JoséQuintas » 05 Mar 2019 20:05

Precisa então de executar antes, e executar depois.

Ok.

Pra não precisar mexer em muita coisa, criar um novo codeblock, com as duas rotinas antes/depois.

cDescricao := acMenu[ nCont, 1 ]
bCode       := acMenu[ nCont, 3 ]
bCode := { || ExecutaAntes(), Eval( bCode ), ExecutaDepois() }
oMenu:AddItem( cDescricao, bCode )
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: 18157
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor microvolution » 05 Mar 2019 22:34

JoséQuintas escreveu:Precisa então de executar antes, e executar depois.
prezado fiz como sugerido e o conteúdo das 2 funções novas ficou assim:
function EXECUTAANTES()
     fDESTROI_BOTOES()
     set key TECLA_UTIL to UTIL_PROG
     close all
return nil
function EXECUTADEPOIS ()
     ABRE_ARQ_ACESSO ()
     set key TECLA_HELP to
     set key TECLA_UTIL to
     fCRIA_BOTOES('PCI10000')
return nil

infelizmente ambas as funções no novo codeblock travam o sistema por alguns segundos que fecha em seguida. Mas, abrir o módulo, isso não acontece.
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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor microvolution » 05 Mar 2019 23:11

desta forma funcionou:
         cDescricao  := acMenu[ nCont, 1 ]
         bCode       := acMenu[ nCont, 3 ]
         // bCode := { || Executa_Antes_wvg(),  eval(bCode) , Executa_Depois_wvg() }
         oMenu:AddItem( cDescricao, bCode )

eliminei o novo bcode e alterei a linha abaixo:
// MenuOption(HB_AnsiToOem("Orçamento")               ,{||PCI10001()})

para a seguinte linha:
MenuOption(HB_AnsiToOem("Orçamentos")              ,{|| ExecutePrg_wvg({||PCI10001()})})

a função executePrg_wvg() ficou assim:
static FUNCTION ExecutePrg_wvg( PROGRAMA )
     fDESTROI_BOTOES()
     set key TECLA_UTIL to UTIL_PROG
     close all // não funcionou 17/12/15w
     WvgSetAppWindow():oMenu := nil // linhas oferecidas pelo JQuintas para remover o menu.

     eval (PROGRAMA)

     ABRE_ARQ_ACESSO ()
     set key TECLA_HELP to
     set key TECLA_UTIL to
     fCRIA_BOTOES('PCI10000')
RETURN NIL // ExecutePrg_wvg

funcionando beleza. Coloquei temporariamente a função WvgSetAppWindow():oMenu := nil até entender ou encontrar uma que seja do tipo HIDE para que o usuário não clique no menu e gere erros.
Como no modo console o usuário não consegue abrir várias telas/janelas, se o menu continuar habilitado gerará os tais erros que o nobre JoséQuintas já havia pre-dito.
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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor microvolution » 05 Mar 2019 23:14

obs.: apesar de se clicar no menu em qualquer opção, abre sem erro. Fica uma atrás da outra.
à medida que vai se dando ESC vai se retornando uma a uma.
Mas, mesmo assim, prefiro um HIDE ou ENABLED .f. ou DESABLED. no WvgSetAppWindow():oMenu - se houver.
vou estudar aqui nos fontes da pasta contrib\gtwvg\tests\demowvg.prg pra ver se encontro alguma coisa.
Poucos exemplos da wvg.
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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Anterior Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 8 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