Página 3 de 4
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 03 Mar 2019 17:46
por microvolution
ah!
se eu apenas mudar uma das linhas para:
aí o erro encerra.
Mas, o clique no mouse nada faz!

:%
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 03 Mar 2019 18:26
por JoséQuintas
Aff
Como dizia o gerente do shopping Eldorado de Santos... Porr... Caralh... essa merd... tá fod....
De novo....
seu menu tem isto: "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:
Porque não funciona? porque Eval() é pra codeblock e isso não é codeblock.
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 03 Mar 2019 18:31
por JoséQuintas
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.
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 04 Mar 2019 10:27
por MSDN
Só para lembrar, o Fórum é para quem sabe programar, portanto, tirar dúvidas de programadores, e não ensinar alguém a programar !
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 04 Mar 2019 12:01
por JoséQuintas
Ou vamos simplificar:
Porque não adiciona um item de cada vez?
Código: Selecionar todos
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....
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 05 Mar 2019 03:17
por JoséQuintas

Código: Selecionar todos
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
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 05 Mar 2019 03:32
por JoséQuintas
Agora pentelhar com um menu mais simples....
Quem quer apostar que ele vai perguntar como faz?
Seria normal ele perguntar, mas não quando ele já sabe fazer.... kkkk
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 05 Mar 2019 16:23
por microvolution
JQuintas, funcionou assim:
Código: Selecionar todos
MenuOption(HB_AnsiToOem("Orçamento ~Simplificado"),{||PCI10001()})
Mas, no caso, já executa o codbloque dentro desta linha:
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:
Código: Selecionar todos
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:
não é possível, pois o additem("prompt","ação") já executa automaticamente ao clique do mouse.
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 05 Mar 2019 17:07
por JoséQuintas
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.
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 05 Mar 2019 17:29
por MSDN
A questão é que nosso amigo não quer tirar uma dúvida, ele quer que alguém faça por ele.
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 05 Mar 2019 19:39
por microvolution
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:
Está funcionando. as linhas do seu exemplo que alterei e entendi que fazem o funcionamento são:
Código: Selecionar todos
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:
Código: Selecionar todos
close all // acrescentado para fechar todos os arquivos e não dar erro DBF já aberto.
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 05 Mar 2019 20:05
por JoséQuintas
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.
Código: Selecionar todos
cDescricao := acMenu[ nCont, 1 ]
bCode := acMenu[ nCont, 3 ]
bCode := { || ExecutaAntes(), Eval( bCode ), ExecutaDepois() }
oMenu:AddItem( cDescricao, bCode )
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 05 Mar 2019 22:34
por microvolution
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:
Código: Selecionar todos
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.
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 05 Mar 2019 23:11
por microvolution
desta forma funcionou:
Código: Selecionar todos
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:
Código: Selecionar todos
// MenuOption(HB_AnsiToOem("Orçamento") ,{||PCI10001()})
para a seguinte linha:
Código: Selecionar todos
MenuOption(HB_AnsiToOem("Orçamentos") ,{|| ExecutePrg_wvg({||PCI10001()})})
a função
executePrg_wvg() ficou assim:
Código: Selecionar todos
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.
Eval no Clipper 5.3 roda, no Harbour não
Enviado: 05 Mar 2019 23:14
por microvolution
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.