Execução de Scripts

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Endrigo Rodrigues
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 27 Fev 2009 01:30
Localização: Belo Horizonte/MG

Execução de Scripts

Mensagem 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?
Imagem
Endrigo Rodrigues
Fantastsoft Sistemas
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Execução de Scripts

Mensagem por sygecom »

Eu desconheço algo assim, mas lhe pergunto, já deu uma procurada no Help do xHarbour ?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
vailton
Colaborador
Colaborador
Mensagens: 390
Registrado em: 17 Nov 2005 19:08
Localização: Brasil
Contato:

Re: Execução de Scripts

Mensagem 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
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Endrigo Rodrigues
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 27 Fev 2009 01:30
Localização: Belo Horizonte/MG

Re: Execução de Scripts

Mensagem 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?
Imagem
Endrigo Rodrigues
Fantastsoft Sistemas
Endrigo Rodrigues
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 27 Fev 2009 01:30
Localização: Belo Horizonte/MG

Re: Execução de Scripts

Mensagem por Endrigo Rodrigues »

Isso Vailton.

Exatamente isso que eu queria. No xHarbour, não possui essa funcionalidade?
Imagem
Endrigo Rodrigues
Fantastsoft Sistemas
Endrigo Rodrigues
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 27 Fev 2009 01:30
Localização: Belo Horizonte/MG

Re: Execução de Scripts

Mensagem 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?
Imagem
Endrigo Rodrigues
Fantastsoft Sistemas
Avatar do usuário
vailton
Colaborador
Colaborador
Mensagens: 390
Registrado em: 17 Nov 2005 19:08
Localização: Brasil
Contato:

Re: Execução de Scripts

Mensagem por vailton »

Pelo que andei pesquisando... esta característica de compilação em run-time é um recurso exclusivo do Harbour.
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Endrigo Rodrigues
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 27 Fev 2009 01:30
Localização: Belo Horizonte/MG

Re: Execução de Scripts

Mensagem 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.
Imagem
Endrigo Rodrigues
Fantastsoft Sistemas
Avatar do usuário
vailton
Colaborador
Colaborador
Mensagens: 390
Registrado em: 17 Nov 2005 19:08
Localização: Brasil
Contato:

Re: Execução de Scripts

Mensagem 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.
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Endrigo Rodrigues
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 27 Fev 2009 01:30
Localização: Belo Horizonte/MG

Re: Execução de Scripts

Mensagem 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?
Imagem
Endrigo Rodrigues
Fantastsoft Sistemas
Responder