2012-09-10 37 views
13

Estoy buscando un buen motor de scripting gratuito para Delphi. Quiero agregar scripts a una aplicación para que pueda escribir pequeños scripts de prueba. Específicamente necesito:¿Hay un buen script de Pascal para Delphi?

  • Pascal-como sintaxis
  • actual (Miré a RemObjects Pascal Scripting pero es "obsoleta", según un anuncio que vi).

No necesito soporte de idioma completo, solo lo básico. Vi esto: https://stackoverflow.com/questions/226135/scripting-library-for-delphi, pero supongo que las cosas han cambiado un poco desde entonces.

Todo lo que quiero ser capaz de hacer es añadir un componente del memorándum a mi programa, y ​​en tiempo de ejecución añadir un fragmento de la fuente a la nota y haga clic en un botón de marcha. Quiero que el script pueda acceder a las variables y funciones de mi aplicación.

¿Cuál es el camino más fácil para lograr esto? El programa de ejemplo sigue.

program Project31; 

uses 
    Forms, 
    Unit36 in 'Unit36.pas' {Form36}; 

{$R *.res} 

begin 
    Application.Initialize; 
    Application.CreateForm(TForm36, Form36); 
    Application.Run; 
end. 

.

unit Unit36; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls; 

type 
    TForm36 = class(TForm) 
    Button1: TButton; 
    Memo1: TMemo; 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form36: TForm36; 

implementation 

{$R *.dfm} 

procedure RoutineInMyApplication ; 

begin 
ShowMessage ('Hello from my Application') ; 
end ; 

procedure TForm36.Button1Click(Sender: TObject); 
begin 
//ExecuteScript (Memo1.Lines) ; 
end ; 

end. 

.

object Form36: TForm36 
    Left = 0 
    Top = 0 
    Caption = 'Form36' 
    ClientHeight = 174 
    ClientWidth = 391 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    OldCreateOrder = False 
    PixelsPerInch = 96 
    TextHeight = 13 
    object Button1: TButton 
    Left = 300 
    Top = 72 
    Width = 75 
    Height = 25 
    Caption = 'Button1' 
    TabOrder = 0 
    OnClick = Button1Click 
    end 
    object Memo1: TMemo 
    Left = 8 
    Top = 21 
    Width = 241 
    Height = 145 
    Lines.Strings = (
     'begin' 
     'ShowMessage ('#39'Hello world'#39') ;' 
     'CallSomehow (RoutineInMyApplication) ;' 
     'end.' 
     ' ') 
    TabOrder = 1 
    end 
end 
+1

Todavía prefiero personalmente PascalScript. La falta de compatibilidad con el compilador Delphi de 64 bits podría ser la debilidad, pero cuando utilizas el compilador Delphi de 32 bits (la compatibilidad está actualmente con Delphi XE2), estarás bien, creo. Actualmente, PascalScript tiene baja prioridad en la corrección de errores (principalmente para problemas encontrados para el compilador de 64 bits), pero no significa que no sea estable para 32 bits. Proyectos como InnoSetup lo usan y todavía está vivo. Después de una búsqueda muy rápida, no creo que haya una alternativa gratuita en la misma calidad probada. – TLama

+0

Gracias @TLama. Lo había instalado para D2006 y XE1, pero no instaló ningún D10 BPL, el ReadMe.html era un enlace inactivo, el archivo de la última entrada changes.txt era "NUEVO Soporte para Borland Developer Studio 2006", así que no estaba t seguro. Voy a mirar de nuevo. Me interesaría ver qué implicaría la ejecución de mi aplicación de muestra si tiene el tiempo y el software instalado. – rossmcm

+2

No tomaría ese archivo ['changelog.txt'] (https://github.com/remobjects/pascalscript/blob/master/Source/changelog.txt) demasiado en serio. Hubo ['many commits'] (https://github.com/remobjects/pascalscript/commits/master) desde la última vez que se registró en ese archivo, por lo que diría que simplemente se detuvieron para iniciar sesión en ese archivo. – TLama

Respuesta

14

buscar en la biblioteca dwscript que en la actualidad se mantiene por Eric Grange.

+0

Gracias @RRUZ. ¿Algún comentario sobre cómo se compara con PascalScript? – rossmcm

+1

1. el dwscript admite la sintaxis de Delphi y también agrega extensiones muy agradables al lenguaje 2. se [mantiene activamente] (http://code.google.com/p/dwscript/source/list) 3.) buena [documentación y samples] (http://code.google.com/p/dwscript/w/list) 4. tienen un extenso conjunto de pruebas unitarias. – RRUZ

+0

Encontré esto: http://stackoverflow.com/questions/4889810/what-are-the-pros-and-cons-of-remobjects-pascalscript-versus-the-dws-script que fue bastante útil. Definitivamente voy a intentarlo. – rossmcm

4

El JVCL Jedi también incluye TJvInterpreter que es una (pequeña) intérprete muy ligero, pero con mucho más limitadas que las características dwscript.

Por muy pequeñas (fórmulas introducidas por el usuario, o de cadena sencilla y tareas de procesamiento numérico) JvInterpreter ha funcionado bastante bien para mí. Hace

+0

¿es posible llamar a rutinas y variables de acceso en su aplicación? – rossmcm

+0

Tienes que escribir un poco de código, pero sí, puedes. Mucho menos código en las versiones más recientes de Delphi, ya que RTTI y la invocación de métodos ahora se pueden hacer mucho más inteligentemente. Pero se requiere un código por unidad que desea que se pueda llamar. De hecho, me gusta tener un control de envoltura A QUÉ se puede acceder. Hace que sea más difícil para mi script bloquear mi aplicación. –

+0

Gracias @Warren. Intenté una aplicación "Hello World" y quedé impresionado con lo fácil que fue ponerme en marcha, incluso con un editor de Delphi. Aquí hay algo de documentación [aquí] (http://jvcl.delphi-jedi.org/JvInterpreter.htm), pero hay muy pocos ejemplos que vayan en otra dirección, es decir, acceder a variables de aplicación desde el script. ¿Hay alguna _real_ ayuda de JVCL? La mayoría de las cosas en http://wiki.delphi-jedi.org/wiki/JEDI_Visual_Component_Library parecen estar vacías y el [JvInterpreter] (http://jvcl.delphi-jedi.org/JvInterpreter.htm) es una excepción bienvenida. – rossmcm

0

FastScript de FastReport (la pila no permite dar un enlace). Incluye PascalScript, C++ Script, JScript y BasicScript. PascalScript parece ser exactamente lo que usted solicita.

+1

La pregunta especifica Gratis. FastReport es comercial. Aunque es bueno. –

+0

@WarrenP Oh, lo siento, tienes razón. Extraño la palabra "libre". – Badiboy

0

Try incrustar Lua. Ver Lua 5.1 for Delphi por ejemplo.

+0

Lua tiene una palabra clave 'end' y una palabra clave' function', pero no es muy parecida a un pascal. –

Cuestiones relacionadas