AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte ScriptEngine II (v. 0.6.1)
Thema durchsuchen
Ansicht
Themen-Optionen

ScriptEngine II (v. 0.6.1)

Ein Thema von littleDave · begonnen am 21. Sep 2009 · letzter Beitrag vom 4. Aug 2011
 
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#11

Re: ScriptEngine II (v. 0.3.5.0)

  Alt 5. Okt 2009, 20:04
Es gibt mal wieder ein Update 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
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:24 Uhr.
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-2025 by Thomas Breitkreuz