Delphi-PRAXiS
Seite 4 von 12   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   ScriptEngine II (v. 0.6.1) (https://www.delphipraxis.net/140590-scriptengine-ii-v-0-6-1-a.html)

Florian Hämmerle 30. Sep 2009 10:10

Re: ScriptEngine II (v. 0.3.3.0)
 
Hat deine Scriptsprache bzw. deine Scripengine schon einen Namen? Deine erste Engine hieß ja SY.... .
Arbeitest du schon in einem deiner Projekte mit der neuen Scriptsprache (Widget-Engine oder ähnliches)?

mfg Florian

littleDave 30. Sep 2009 17:53

Re: ScriptEngine II (v. 0.3.4.0)
 
Zitat:

Zitat von toms
Es läuft soweit unter Delphi 2010, es gibt jedoch einige Warnungen.

Ich hab mir jetzt die Trial von Delphi 2010 heruntergeladen und die ScriptEngine darin kompiliert. Ich habe alle Warnungen behoben und ein paar Tests gemacht. Bisher gab es keine Probleme mehr mit Delphi 2010 - somit sollte man die ScriptEngine ab der neuen Version (ist bereits online) auch mit Delphi 2009/2010 benutzen können.

@himitsu
Das $IF scheint ja sehr mächtig zu sein :shock:. Mal schauen, ob ich das benutzen kann ;-) Danke für die Infos


Zitat:

Zitat von Florian Hämmerle
Hat deine Scriptsprache bzw. deine Scripengine schon einen Namen? Deine erste Engine hieß ja SY.... .

Ja, einen Namen hat die schon: ScriptEngine II ;-).

Zitat:

Zitat von Florian Hämmerle
Arbeitest du schon in einem deiner Projekte mit der neuen Scriptsprache (Widget-Engine oder ähnliches)?

Also die Script-Engine ist schon produktiv in einem Projekt drinnen, jedoch hab ich das bisher in der DP noch nicht veröffentlicht - das dauert auch noch eine Weile. Wer aber mehr wissen will, kann sich meinen Gael Development Blog anschauen - ist mal wieder was mit OpenGL ;-).

Die Widget-Engine befindet sich gerade noch im Winterschlaf ;-). Jedoch will ich die neue Script-Sprache auch in die Widget-Engine einbauen. Zuvor muss ich mir aber erst ein Interface für die Widget-Engine überlegen und vielleicht die ein oder andere Veränderung machen.

@All: Es gibt eine neue Version der Script-Engine :arrow: Version: 0.3.4.0
Ich habe gerade eine neue Version der Script-Engine hochgeladen. Diesmal hab ich einiges verbessert:
  • Delphi 2010 Support
    Dank toms hab ich die Script-Engine jetzt auch kompatibel mit Delphi 2010 (und somit auch mit 2009) gemacht. Um das zu Testen, hab ich mir zudem noch die Trial heruntergeladen. Bisher gab es mit D2010 keine Probleme.
  • Delphi 6 Support
    Dank toms hab ich die 4 Funktionen, die in Delphi 6 nicht vorhanden waren, durch eigene ersetzt. Somit sollte die Script-Engine jetzt auch mit Delphi 6 funktionieren - jedoch hab ich keine weiteren Tests gemacht, da ich kein Delphi 6 habe.
  • FreePascal Support
    Ich habe (hoffentlich) alle Windows-spezifischen Teile in FreePascal deaktiviert. Somit sollten nun keine Probleme mehr vorhanden sein.
  • Konfiguration
    Ich habe die Datei "ScriptEngine.inc" extrem aufgepeppt. Jetzt findet man in der Include-Datei einen Konfigurations-Abschnitt, mit dem man die Script-Engine beim kompilieren des Delphi-Projektes ein wenig anpassen kann. Ich hoffe, ich habe alle Defines genügend beschrieben
  • Erweiterung bei der Script-Engine
    Ich habe die Helper-Klassen von Single und Double noch um ein paar weitere Funktionen erweitert. Zudem gibt es ein neues Keyword in der ScriptEngine: deprecated. Mit diesem Keyword kann man Typen, Variablen, Klassen oder Funktionen als Veraltet markieren. Nach dem Keyword kann man noch einen String eingeben, der dann der Compiler-Warnung hinzugefügt wird.
  • IntelliSense
    Ich habe den Inhalt, der in der IntelliSense-Klasse ausgegeben wird, erweitert. Somit werden jetzt auch Unit-Namen und die Basis-Typen von Klassen und von eigenen Typen angezeigt.
  • Dokumentation
    Ich habe nun endlich Partielle Klassen und Class Helper mit in das PDF mit aufgenommen. Zwar sind die Abschnitt nicht sehr lang, doch ich hoffe, dass es verständlich rübergekommen ist.
  • Mitgelieferte IDE
    Ich habe nun meine aktuelle IDE mit in den Download gepackt. Damit könnt ihr mal etwas rumspielen. Den Quelltext muss ich noch etwas überarbeiten und liefere ihn somit erst etwas später nach.

Grüße

Edit - falsche Version
Ich hab leider die falsche Version hochgeladen :oops: Alle, die sich das Paket vor dem 30.09.2009 23:30 Uhr heruntergeladen haben, haben leider eine alte Version. Ich hab gerade die richtige hochgeladen - Sorry. In der alten Version gab es noch ein Problem mit partiellen Klassen.

littleDave 1. Okt 2009 21:58

Re: ScriptEngine II (v. 0.3.4.1)
 
So, es gibt (schon wieder ;-)) ein kleines Update :arrow: Version 0.3.4.1

Dies ist nur eine Bugfix-Version und bringt keine neuen Features. Folgendes hab ich verbessert:
  • IntelliSense
    Die Unitnamen werden beim IntelliSense-Fenster jetzt nur dann angezeigt, wenn sie erlaubt sind.
  • Klassen-Ableitung
    Mann kann nun nicht mehr eine rekursive Klassendeklaration angeben (gab einen Stack-Overflow-Error)
  • Klassen forwarden
    Es gab einen kleinen Parser-Fehler, wenn man Klassen forwarden wollte
Grüße

littleDave 5. Okt 2009 21:04

Re: ScriptEngine II (v. 0.3.5.0)
 
Es gibt mal wieder ein Update :arrow: Version 0.3.5.0

Folgendes hat sich verändert:
  • Bug fixes
    • FindMethod hat den Rückgabetyp nicht überprüft
    • Kritischer Fehler in String-Umwandlung: man konnte keine verschiedenen String-Typen benutzen
  • IDE
    • Konsolen-Fenster hat nicht mehr das Hauptformular als Parent (gab Probleme mit Windows 7)
    • Beim "Save Project" kommt jetzt der normale Windows-Dialog
    • Neues Demoprojekt: NativeCallTest
  • Neue Features
    • Script-Funktionen können jetzt auch zu TMethod gecastet werden (Beispiel im PDF)
    • Funktions-Pointer der importierten Methoden werden jetzt nur einmal pro TSE2PE-Instanz gesetzt

SVN
Auf Drängen von EugenB hab ich ein SourceForge-Projekt für die ScriptEngineII erstellt ;-). Somit kann man sich jetzt immer den aktuellsten Quelltext per SVN herunterladen.

Nativer Script-Methoden-Aufruf
Wie bereits gesagt kann man jetzt die Script-Methoden auch "nativ" aufrufen. Um das mal etwas zu verdeutlichen hier mal ein Beispiel:

Sagen wir mal, ich will folgende Script-Methode dem FormResize-Event zuweisen:
Delphi-Quellcode:
var
  formWidth, formHeight : integer;

procedure MyFormResize(Sender: TObject);
begin
  formWidth := TForm(Sender).Width;
  formHeight := TForm(Sender).Height;
end;
Bisher musste man immer eine Wrapper-Funktion bauen, die folgendermaßen aussehen konnte:
Delphi-Quellcode:
// ....
  Self.OnResize := MyCustomHandler;
// ...

procedure TForm1.MyCustomHandler(Sender: TObject);
var Method : Pointer;
begin
  Method := Self.FRunTime.CodeAccess.FindMethod('MyFormResize', '', [pmIn], [btObject]);
  if Method <> nil then
     Self.FRunTime.Call(Method, [Sender]);
end;
Dann wurde bei jedem Event erst die Funktion "MyCustomHandler" ausgeführt, in der dann die Script-Funktion ausgeführt wurde.
Nun kann man wie folgt machen
Delphi-Quellcode:
// ....
  Self.OnResize := MyCustomHandler;
// ...

procedure TForm1.SetEventHandler;
var Method : Pointer;
    MyEvent: TNotifyEvent;
begin
  Method := Self.FRunTime.CodeAccess.FindMethod('MyFormResize', '', [pmIn], [btObject]);
  if Method <> nil then
  begin
    MyEvent := TNotifyEvent( Self.FRunTime.ScriptAsMethod(Method, nil) );
    Self.OnResize := MyEvent; // <-----
  end;
end;
Jetzt wird bei jedem OnResize-Event automatisch die Script-Funktion ausgeführt.

Man kann die Events zwar noch (!!!) nicht in der Script-Engine selber setzten, da man noch keine Methoden als Typ deklariert kann. Aber sobald man das machen kann, kann man die Events dann auch in der Script-Engine selber setzen.

Natürlich kann man nicht nur normale Funktionen "nativ" ausführen. Man kann auch Klassen-Methoden so aufrufen - aber ich hab das alles im PDF beschrieben.

Grüße

_x_ 5. Okt 2009 21:06

Re: ScriptEngine II (v. 0.3.5.0)
 
Eine Frage: Ist die IDE auch unter Linux lauffähig?

mfg _X_

littleDave 5. Okt 2009 21:16

Re: ScriptEngine II (v. 0.3.5.0)
 
Zitat:

Zitat von _x_
Eine Frage: Ist die IDE auch unter Linux lauffähig?

mfg _X_

Mit Wine sollte es funktionieren. Ich hab bei mir kein Linux, daher kann ich es auch nicht ausprobieren. Hab im Moment nicht mal Lazarus drauf, da ich am Wochenende die Windows 7 Final installiert habe (MSDN-AA ist schon was geilen :-) - ist bisher schon viel besser als Vista).

An sich ist es ja nur ein Beispiel. Der Quelltext ist zwar immer noch nicht verfügbar :oops: kommt aber noch

_x_ 5. Okt 2009 21:25

Re: ScriptEngine II (v. 0.3.5.0)
 
Unter Wine geht die IDE.

Wenn du die JVCL verwendest, (tust du doch, glaub ich, oder? ), kannst du Linux leider abschreiben.

mgh _X_

EugenB 6. Okt 2009 16:43

Re: ScriptEngine II (v. 0.3.5.0)
 
Hey^^,

danke für den SVN ^^

Habe mal die Demos nach Lazarus konvertiert damit man auch mal so kurz testen kann ^^, und dabei herrausgefunden, das Convert.IntToStr nicht funktioniert

SEII-Code:
Delphi-Quellcode:
Console.WriteLine(Convert.IntToStr(32));
Gibt nur eine leere Zeile aus :(


Weißt du vllt woran es liegt?

Lazarus 0.9.29 (letzter Snapshot)
FPC 2.2.4

Bisher noch keine anderen Bugs gefunden ^^

MfG,
Eugen

littleDave 6. Okt 2009 17:53

Re: ScriptEngine II (v. 0.3.5.0)
 
Zitat:

Zitat von _x_
Unter Wine geht die IDE.

Wenn du die JVCL verwendest, (tust du doch, glaub ich, oder? ), kannst du Linux leider abschreiben.

mgh _X_

Ja, in der IDE verwende ich die TJvTabBar ... mal schauen, vielleicht kann ich das noch etwas abstrakter gestalten ;-)

Zitat:

Zitat von EugenB
Hey^^,

danke für den SVN ^^

Kein Problem ;-)

Zitat:

Zitat von EugenB
Habe mal die Demos nach Lazarus konvertiert damit man auch mal so kurz testen kann ^^, und dabei herrausgefunden, das Convert.IntToStr nicht funktioniert

SEII-Code:
Delphi-Quellcode:
Console.WriteLine(Convert.IntToStr(32));
Gibt nur eine leere Zeile aus :(

Weißt du vllt woran es liegt?

Lazarus 0.9.29 (letzter Snapshot)
FPC 2.2.4

Ja, ich glaub ich weiß woran das liegt. Hab das Problem heute auch schon gefunden, da ich den aktuellen Source testen wollte. Das Problem liegt an der Calling-Convention von FPC (soweit ich das mitbekommen habe). In FreePascal werden strings als Rückgabewert von Funktionen auch im EAX-Register zurückgeliefert. Jedenfalls funktioniert es, wenn ich den EAX-Wert nach dem Aufruf einer Funktion auslese. Also eine Lösung ist gefunden, jedoch muss ich die noch weiter ausprobieren ;-).

Zitat:

Zitat von EugenB
Bisher noch keine anderen Bugs gefunden ^^

MfG,
Eugen

Das ist gut :-)

littleDave 10. Okt 2009 13:29

Re: ScriptEngine II (v. 0.4.0.0)
 
Eine neues Update ist da :arrow: Version 0.4.0.0

Änderungen
  • Packages
    Man kann jetzt eigene Script-Units oder externe Klassen in DLLs auslagern und diese dann nahtlos in die Script-Engine einfügen. Was jedoch wichtig ist: bei Packages sollte die DLL mit der gleichen Delphi-Version erstellt worden sein wie das Hauptprogramm.

    Leider hab ich noch keine Demo für Packages erstellt, jedoch hab ich bereits die drei Testpackages für die IDE mit in den Download gepackt. Mit diesen Packages hat man Zugriff auf Streams und einige Listen.

    In der IDE gibt es einen Package-Viewer, mit dem man die geladenen Packages anzeigen kann.
  • FreePascal
    Bei FreePascal ist die Call-Convention etwas anders als in Delphi. Dies hat vor allem Strings als Rückgabewert beeinflusst: sie sind nicht angekommen. Dieses Problem sollte nun behoben sein.
  • Memory Leak unter FreePascal behoben (dank an EugenB)
  • Linker
    Der Linker speichert die benutzen Methoden jetzt in einem Baum. Dadurch ist das kompilieren etwas langsamer (ca. 0.1 sek), jedoch werden jetzt nur wirklich die Methoden mit in den finalen ByteCode hineinkopiert, die auch benutzt werden. Das Schlüsselwort export funktioniert weiterhin.
  • Tools
    Es gibt jetzt einen Unit-Importer, mit dem man Delphi-Klassen einfacher der Script-Engine hinzufügen kann. Dafür muss man nur den Interface-Teil der entsprechenden Unit in eine neue Unit in der IDE kopieren. Nachdem sich das neue Script kompilieren lässt (z.B. nachdem man hinter jeder Funktion/Procedure/Methode das Schlüsselwort "external" schreibt), wählt man unter "Project" -> "Generate Unit" -> "Application Unit" aus. Dann wird ein neuer Tab in der IDE geöffnet, dessen Inhalt man einfach komplett in die Zwischenablage kopiert und in eine neue Unit in Delphi einfügt.
  • Sonstiges
    Ein paar Bugs bzw. ein paar zu strenge Regeln im Parser behoben
  • Neue Klasse in der System-Unit: TPersistent

Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr.
Seite 4 von 12   « Erste     234 56     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz