Página 1 de 1

Como tornar o conteudo de um get em comando do clipper

Enviado: 22 Fev 2005 08:15
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

Enviado: 22 Fev 2005 12:23
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

Enviado: 23 Fev 2005 19:40
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

Enviado: 23 Fev 2005 21:38
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.

Enviado: 24 Fev 2005 08:24
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 )

Enviado: 24 Fev 2005 11:52
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?