macro / bloco de codigo

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

Igor Fricks
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 03 Jan 2017 13:20
Localização: Santo André / SP

macro / bloco de codigo

Mensagem por Igor Fricks »

Ola pessoal,

Estou iniciando nessa linguagem e venho lendo muita coisa nesses últimos meses e acabei me deparando com um problema!
Estou tentando executar um comando através de uma macro ou bloco de código e não consigo.

Estou tentando jogar o comando inteiro de um listbox em uma variavel e tentando executar ela.

cPrg := " Redefine ListBox oLbx Fields "+cCampos"" HEADERS "+cTitulos+" id 4005 Of oDlg ON CHANGE (cRegistro:= "+cAlias+"->(OrdKeyNo()) ,cTotReg:= cDe+' '+ALLTRIM(TRANSFORM("+cAlias+"->(Reccount()),'@E 999,999')),oSay4:Refresh(),oGet:Refresh()) "
&cPrg

como eu deveria executar essa variavel cPrg?

Eu consegui executar fazendo assim:
Redefine ListBox oLbx Fields &cCampos HEADERS &cTitulo id 4005 Of oDlg ;
ON CHANGE (cRegistro:= (cAlias)->(OrdKeyNo()) ,cTotReg:= cDe+" "+ALLTRIM(TRANSFORM((cAlias)->(Reccount()),'@E 999,999')),oSay4:Refresh(),oGet:Refresh())

mas como pretendo colocar várias linhas de comando de uma função contidas na mesma variável, essa solução não vai me servir.
estou usando uma base em DBF e usando o peles para desenhar os formulários.

Espero que logo estudando bastante possa colaborar com vcs também.

Obrigado,
wmanesco
Usuário Nível 3
Usuário Nível 3
Mensagens: 116
Registrado em: 09 Set 2016 13:18
Localização: ITAJAI - SC

macro / bloco de codigo

Mensagem por wmanesco »

Olá Igor,

Sinceramente nunca usei muito a opção de macro do harbour, mas as vezes em que precisei usar, notei que não consigo acessar constantes através dela, por exemplo...

Nunca tentei definir um componente do fivewin assim, não sei qual comportamento teria.

Não entendi direito seu problema, por que usar o macro?

Por que vai montar uma string definindo vários componentes e vai concatenando na variavel para executar depois? Se conseguir explicar um pouco melhor talvez nós possamos dar alguma solução alternativa para voce!

Abraços
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

macro / bloco de codigo

Mensagem por fladimir »

Da uma lida akive se te ajuda, apesar de ser outra lib grafica o assunto é macro etc... pode ser q te auxilie.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

macro / bloco de codigo

Mensagem por rochinha »

Amiguinhos,

Olhando por cima o que o igor pretende é executar scripts xBase.

Então neste caso o caminho não seria por macrosubstituição e sim pelo uso de HBRun ou similar.

Dê uma olhada no tópico Compilar função em tempo de execução
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

macro / bloco de codigo

Mensagem por Pablo César »

Não sei quase nada sobre FiveWin, mas acho que o Rochinha tem razão.

O proprio Harbour pode te ajudar a interpretar código, principalmente esse includes que a FW, HMG, etc possuem.

Esperoq ue te ajude este (mesmo que feito em HMG) você poderá entenderas funções do Harbour de pre-compilação: http://www.hmgforum.com/viewtopic.php?p=47483#p47483
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Igor Fricks
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 03 Jan 2017 13:20
Localização: Santo André / SP

macro / bloco de codigo

Mensagem por Igor Fricks »

a minha ideia é principal é usar uma macro para poder inserir campos nas dialog sem ter que toda vez mexer no código fonte. Inseriu na tabela já aprece na dialog!

Oi Rochinha... li o link e tentei fazer isso:

cMacro := " Redefine ListBox oLbx Fields "+cCampos+" HEADERS "+cTitulo+" id 4005 Of oDlg "
cPCode := HB_MacroCompile( cMacro )
bBlock := &( "{||" + cMacro + "}" )
HB_VMExecute( cPCode )
EVal( bBlock )

e deu esse erro:
Descricao: Erro BASE/1449 Erro de sintaxe: &
na linha do HB_MacroCompile

pode ter algo a ver com a versão do harbour?
estou usando a xharbour902.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

macro / bloco de codigo

Mensagem por rochinha »

Amiguinhos,

Neste caso voce deveria usar assim no lugar de bBlock := &( "{||" + cMacro + "}" )

Código: Selecionar todos

bBlock := eval( "{||" + cMacro + "}" )
Não sei qual versão de Fivewin você está utilizando mas acho que a apartir das versões 11 tinha um exemplo que usava a classe xBrowse montando dois browses onde no primeiro voce navegava pela lista de registros de uma tabela enquanto o outro browse apresentava todos os campos do registro corrente permitindo edição.

Outro exemplo que pode te ajudar a gerar as telas on-the-fly é o DBF2RC.prg que a partir de um .DBF gera todos os DEFINES e REDEFINES necessários.

Vale a pena olhar eles e afiná-los, pois eles tem alguns buguesinhos.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder