Clipper On Line • Ver Tópico - macro / bloco de codigo
Mudar para estilo Clássico
Discussão sobre a biblioteca Fivewin - O Clipper para Windows.
Postar uma resposta

macro / bloco de codigo

11 Fev 2017 10:24

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,

macro / bloco de codigo

11 Fev 2017 21:50

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

macro / bloco de codigo

11 Fev 2017 22:11

Da uma lida akive se te ajuda, apesar de ser outra lib grafica o assunto é macro etc... pode ser q te auxilie.

macro / bloco de codigo

12 Fev 2017 00:05

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

macro / bloco de codigo

12 Fev 2017 19:48

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

macro / bloco de codigo

12 Fev 2017 20:40

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.

macro / bloco de codigo

13 Fev 2017 02:15

Amiguinhos,

Neste caso voce deveria usar assim no lugar de bBlock := &( "{||" + cMacro + "}" )
Código:
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.
Postar uma resposta