Tenho uma rotina de impresão de formularios ondo o usuario mesmo define onde serão impressos os campos e os efeitos de impressão que deseja dar, mas agora necessito que o conteudo de um get seja interpretado como comando do clipper (Por exemplo um get tenha digitado SET CENTURY OFF, e o clipper veja o conteudo deste get como o comando do clipper.
Grande abraço a todos
Como tornar o conteudo de um get em comando do clipper
Moderador: Moderadores
- vagucs
- Membro Master

- Mensagens: 1480
- Registrado em: 10 Jul 2004 10:45
- Localização: Ipanema - MG
- Contato:
Vc pode usar macro substituição para fazer, ou mesmo no caso citado usar condicional tipo
Outro exemplo:
Ou mesmo usar macro para isto:
macro="__setcentury("+opc+")"
¯o
Código: Selecionar todos
opc="ON "
@ 10,10 get opc picture "@!" valid opc$"ON*OFF"
read
if lastkey()#27
if opc="ON "
set century on
else
set century off
end if
end if
Código: Selecionar todos
opc="ON "
@ 10,10 get opc picture "@!" valid opc$"ON*OFF"
read
if lastkey()#27
__SetCentury( alltrim(opc))
end if
macro="__setcentury("+opc+")"
¯o
Boa noite Wagner seus exemplos são muito interessantes, mas gostaria de que fosse um pouco diferente, pois não é só o set cent on/off que desejo colocar no get
Vou tentar explicar em poucas palavras a rotina.
tenho um dbf com os seguintes campos
i_linha - define a linha onde sera inpresso o campo
i_coluna - define a coluna onde sera impresso o campo
i_campo - o campo do dbf que sera impresso na linha e coluna acima
i_efeito - o efeito que desejo dar na impressao (negrito,condesado, etc)
i_comand - um comando do clipper <------
i_vfixos - um valor fixo que sera impresso na linha/coluna informado
este dbf coloca num dbedit fica mais ou menos assim:
i_linha 00 - i_coluna 00 - i_efeito chr(27)+"@" <------ reseta impr.
i_linha 01 - i_coluna 01 - i _campo nome <-----imprime campo nome
i_linha 02 - i_coluna 00 - i_comand set cent off <----o comando
i_linha 03 - i_coluna 23 - i_campo endereco
.
.
.
.
e assim por diante até imprimir todos os campo do formulario
o caso é que no campo comando eu posssa digitar um comando qq e quando chegar neste campo o programa executar o comando escrito dentro dele
Espero ter conseguido explicar bem
Boa noite a todos e grande abraço
Vou tentar explicar em poucas palavras a rotina.
tenho um dbf com os seguintes campos
i_linha - define a linha onde sera inpresso o campo
i_coluna - define a coluna onde sera impresso o campo
i_campo - o campo do dbf que sera impresso na linha e coluna acima
i_efeito - o efeito que desejo dar na impressao (negrito,condesado, etc)
i_comand - um comando do clipper <------
i_vfixos - um valor fixo que sera impresso na linha/coluna informado
este dbf coloca num dbedit fica mais ou menos assim:
i_linha 00 - i_coluna 00 - i_efeito chr(27)+"@" <------ reseta impr.
i_linha 01 - i_coluna 01 - i _campo nome <-----imprime campo nome
i_linha 02 - i_coluna 00 - i_comand set cent off <----o comando
i_linha 03 - i_coluna 23 - i_campo endereco
.
.
.
.
e assim por diante até imprimir todos os campo do formulario
o caso é que no campo comando eu posssa digitar um comando qq e quando chegar neste campo o programa executar o comando escrito dentro dele
Espero ter conseguido explicar bem
Boa noite a todos e grande abraço
- vagucs
- Membro Master

- Mensagens: 1480
- Registrado em: 10 Jul 2004 10:45
- Localização: Ipanema - MG
- Contato:
Vc poderá usar os valores destes campos para fazer o relatório usando macro substituição
exemplo
Supondo que digitei 'NOME' dentro de i_campo, então quando correr o relatório ele vai exibir o conteúdo da variável ou campo NOME, sacou.
exemplo
Código: Selecionar todos
@ i_linha,i_coluna say &(i_campo)
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
o_comando := 'set century on' // tb pode entrar pelo get
if ! expvalid(o_comando)
Tecle('Redigite o comando.')
loop
end
/*
* ExpValid()
*/
FUNCTION ExpValid( cExp )
local lOk := .T.
local bError := ErrorBlock( { |e| ExpError( e, bError ) } )
local xResult
cExp = alltrim(cExp)
BEGIN SEQUENCE
if !Empty( cExp )
// xResult := Eval( bCompile( cExp ))
lOk := .t.
telaerr := &cExp
// cExp := "@ 10,10 say "+AllTrim( cExp )
if !(lOk)
Tecle( "Tipo de expressÆo inv lida." )
end
end
RECOVER
lOk := .F.
END SEQUENCE
ErrorBlock( bError )
RETURN (lOk)
/*
* ExpError()
*/
STATIC FUNCTION ExpError( e, bOldErr )
if e:subSystem == "BASE"
if procname(7) = "ENTRADA" .or. procname(8) = "ENTRADA" .or. procname(10)=;
"EDITAREF"
Tecle( e:descriptio +". ExpressÆo Inv lida." )
End
BREAK e
end
RETURN Eval( bOldErr, e )
-
evolver
- Membro Master

- Mensagens: 189
- Registrado em: 28 Ago 2004 01:02
- Localização: Cruz Alta - RS
- Contato:
Para ter mais idéias tem no diretório sources/samples do clipper5 original um programa chamado dot que é um interpretador de comandos ao estilo dbase. Quem sabe isso não pode lhe dar mais idéias de como fazer o que deseja?
Sergio "Evolver" Fagundes
CURVE-SE DIANTE DE MIM SER INSIGNIFICANTE, POIS EU SOU ROOT
Só respondo em PVT perguntas relativas ao que eu faço. Qualquer outra dúvida favor postar no fórum.
Peço aos veteranos que antes de responder a uma pergunta repetida dêem uma pesquisada e instruam a quem perguntou a fazer o mesmo.
CURVE-SE DIANTE DE MIM SER INSIGNIFICANTE, POIS EU SOU ROOT
Só respondo em PVT perguntas relativas ao que eu faço. Qualquer outra dúvida favor postar no fórum.
Peço aos veteranos que antes de responder a uma pergunta repetida dêem uma pesquisada e instruam a quem perguntou a fazer o mesmo.
