Página 1 de 1
Execução de Scripts
Enviado: 02 Mar 2009 09:14
por Endrigo Rodrigues
No Visual FoxPro existe uma função com a seguinte sintaxe:
ExecScript(cExpression [, eParameter1, eParameter2, ...])
Essa função executa qualquer .prg em tempo de execução, posso criar o prg no cliente e executá-lo, acessando objetos, classes, variáveis de memória, formulários, relatórios, e tudo o mais que existir no sistema e estiver público. Gostaria de saber se existe algo parecido no xHarbour?
Re: Execução de Scripts
Enviado: 03 Mar 2009 10:19
por sygecom
Eu desconheço algo assim, mas lhe pergunto, já deu uma procurada no Help do xHarbour ?
Re: Execução de Scripts
Enviado: 03 Mar 2009 11:49
por vailton
Se você estiver trabalhando e/ou testando o Harbour (não xHB), poderia fazer isto:
Código: Selecionar todos
#define EOL chr(10)
proc main
local CONTENT, HANDLE_HRB, PRG, HRBCODE
PRG := ;
"proc p()" + EOL + ;
" ? 'Hello World'" + EOL + ;
" alert( 'Hello World' )" + EOL + ;
"return"
HRBCODE := hb_compileFromBuf( PRG, "harbour", "-n", "-w3", "-es2", "-q0" )
HANDLE_HRB := hb_hrbload( HRBCODE )
hb_hrbDo( HANDLE_HRB )
hb_hrbunload( HANDLE_HRB )
WAIT
Re: Execução de Scripts
Enviado: 03 Mar 2009 11:50
por Endrigo Rodrigues
Sim, por isso estou perguntando aqui no fórum.
Talvez eu não esteja pesquisando de maneira correta, pois só achei Code Blocks e Macro Substituição, e não é isso que eu quero. Quero poder criar e ler formulários, classes e objetos em tempo de execução sem precisar recompilar o sistema novamente.
É isso que o ExecScript do Visual FoxPro faz.
Consigo criar uma rotina de validação de dados e gravar essa rotina em uma tabela específica de personalizações do sistema e o meu sistema a executa como se fosse parte do programa.
Entenderam?
Re: Execução de Scripts
Enviado: 03 Mar 2009 11:51
por Endrigo Rodrigues
Isso Vailton.
Exatamente isso que eu queria. No xHarbour, não possui essa funcionalidade?
Re: Execução de Scripts
Enviado: 03 Mar 2009 11:53
por Endrigo Rodrigues
No Visual FoxPro consigo criar um TextBox em um formulário utilizando ExecScript de um código não compilado no sistema.
É possível fazer isso Vailton no Harbour? E no xHarbour?
Re: Execução de Scripts
Enviado: 03 Mar 2009 12:21
por vailton
Pelo que andei pesquisando... esta característica de compilação em run-time é um recurso exclusivo do Harbour.
Re: Execução de Scripts
Enviado: 03 Mar 2009 12:37
por Endrigo Rodrigues
Veja bem esses códigos em Visual FoxPro. (Não usei recursos da IDE para criação de Forms)
Programa principal, onde criei o formulário e o botão para executar o conteúdo de um PRG externo ao sistema (não compilado):
Código: Selecionar todos
oForm = CREATEOBJECT("MeuForm")
oForm.Show(1)
DEFINE CLASS MeuForm AS Form
Caption = "Teste ExecScript()"
FontName = "Tahoma"
FontSize = 8
AutoCenter = .T.
BorderStyle = 2
MaxButton = .F.
MinButton = .F.
Height = 320
Width = 640
nCodigo = 0
ADD OBJECT Label1 AS Label WITH ;
Top = 8, ;
Left = 8, ;
Caption = "Código", ;
AutoSize = .T., ;
FontName = "Tahoma", ;
FontSize = 8
ADD OBJECT Codigo AS TextBox WITH ;
Top = 8, ;
Left = 160, ;
Width = 80, ;
ControlSource = "THISFORM.nCodigo", ;
Format = "KL", ;
InputMask = "######", ;
FontName = "Tahoma", ;
FontSize = 8
ADD OBJECT Criar AS CommandButton WITH ;
Top = 8,;
Left = 320,;
Height = 32,;
Width = 80,;
Caption = "Criar",;
FontName = "Tahoma", ;
FontSize = 8
PROCEDURE CriarClick
LOCAL cCmds
cCmds = FILETOSTR("COMANDOS.PRG")
EXECSCRIPT(cCmds)
ENDPROC
PROCEDURE Init
BINDEVENT(THISFORM.Criar, "Click", THISFORM, "CriarClick")
ENDPROC
ENDDEFINE
Esse é o PRG externo:
Código: Selecionar todos
oForm.AddProperty("cDescricao", "")
oForm.AddObject("Label2", "Label")
WITH oForm.Label2
.Visible = .T.
.Top = 32
.Left = 8
.Caption = "Descrição"
.AutoSize = .T.
.FontName = "Tahoma"
.FontSize = 8
ENDWITH
oForm.AddObject("Descricao", "TextBox")
WITH oForm.Descricao
.Visible = .T.
.Top = 32
.Left = 160
.Width = 160
.ControlSource = "THISFORM.cDescricao"
.Format = "K!"
.FontName = "Tahoma"
.FontSize = 8
ENDWITH
Isso é que eu gostaria de fazer no Harbour ou xHarbour, têm como traduzir esse código para Harbour ou xHarbour e postá-lo aqui para mim por favor.
Agradeço a ajuda.
Re: Execução de Scripts
Enviado: 03 Mar 2009 17:10
por vailton
Eu sei que em xHarbour você poderia fazer algo assim:
Código: Selecionar todos
oForm:AddProperty("cDescricao", "")
oForm:AddObject("Label2", "Label")
WITH OBJECT oForm:Label2
:Visible = :T:
:Top = 32
:Left = 8
:Caption = "Descrição"
:AutoSize = :T:
:FontName = "Tahoma"
:FontSize = 8
END
oForm:AddObject("Descricao", "TextBox")
WITH OBJECT oForm:Descricao
:Visible = :T:
:Top = 32
:Left = 160
:Width = 160
:ControlSource = "THISFORM:cDescricao"
:Format = "K!"
:FontName = "Tahoma"
:FontSize = 8
END
Pelo que consta no exemplo omacro.prg da pasta testes, o HB também suporta o operador "WITH" mas eu mesmo nunca usei ele.
Re: Execução de Scripts
Enviado: 04 Mar 2009 00:17
por Endrigo Rodrigues
Bom, o meu questionamento não foi o WITH, e sim o código do PRG principal (que foi compilado e gerado um .exe) chamar o código do PRG secundário sem ter sido compilado. Esse segundo PRG eu posso digitar ele em um editor de textos no próprio cliente sem precisar recompilar o sistema.
Entendeu agora o meu questionamento?