Como tornar o conteudo de um get em comando do clipper

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Paulao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 09 Jul 2004 11:03
Localização: Franca
Contato:

Como tornar o conteudo de um get em comando do clipper

Mensagem por Paulao »

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
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Vc pode usar macro substituição para fazer, ou mesmo no caso citado usar condicional tipo

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
Outro exemplo:

Código: Selecionar todos

opc="ON "
@ 10,10 get opc picture "@!" valid opc$"ON*OFF"
read
if lastkey()#27
   __SetCentury( alltrim(opc))
end if
Ou mesmo usar macro para isto:
macro="__setcentury("+opc+")"
&macro
Sem mais
Wagner Nunes
www.vagucs.com.br
Paulao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 09 Jul 2004 11:03
Localização: Franca
Contato:

Mensagem por Paulao »

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
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Vc poderá usar os valores destes campos para fazer o relatório usando macro substituição

exemplo

Código: Selecionar todos

@ i_linha,i_coluna say &(i_campo)
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.
Sem mais
Wagner Nunes
www.vagucs.com.br
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Mensagem por Mário Isa »

:-o Porém poderá ocorrer que, se for o usuário que digitará o comando ele poderá errar. Assim, antes dar o comando através da macro teste o comando assim:
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
Membro Master
Mensagens: 189
Registrado em: 28 Ago 2004 01:02
Localização: Cruz Alta - RS
Contato:

Mensagem por evolver »

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.
Responder