Strings als Befehl ausführen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
AlbertEinstein
Beiträge: 8
Registriert: So 16. Dez 2012, 13:42

Strings als Befehl ausführen

Beitrag von AlbertEinstein »

Hallo, zusammen!
Ich möchte ein Projekt erstellen, bei dem der Benutzer über ein Eingabefenster Befehle eintippen kann, die anschließend ausgeführt werden sollen.
Beispielsweise:

Code: Alles auswählen

IrgendeineMethode (Parameter1, Parameter2);

Gibt es eine spezielle Funktion dafür oder müsste ich eine Art Compiler selbst erstellen?
Danke im Vorraus!

Code: Alles auswählen

if Beitrag = Nützlich then
  AllesDurchlesen
else
  Ignorieren;

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2809
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Strings als Befehl ausführen

Beitrag von m.fuchs »

Da gibt es einige Möglichkeiten. Zum Beispiel PascalScript (http://wiki.freepascal.org/Pascal_Script) oder auch Lua (http://lua-users.org/wiki/LuaInFreePascal).

Es kommt natürlich immer darauf an, was der Benutzer kann und was damit erreicht werden soll. Manchmal kann es auch sinnvoller sein, den Befehlssatz selbst zu implementieren.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Strings als Befehl ausführen

Beitrag von theo »

Pascalscript ist übrigens seit 27 August unter "<lazarusdir>/components" zu finden und muss also in 1.1 (trunk) nicht mehr extra heruntergeladen werden.

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Strings als Befehl ausführen

Beitrag von gocher »

Da lässt sich was basteln :)

als Erstes brauchst Du:

Code: Alles auswählen

type
  TMethodPointer = function(): DWORD of object; 

das wäre z.B. dann eine Definition für Funktionen ohne Übergabe-Parameter.

Dann brauchst Du in deiner Klasse in der die Funktionen zur Verfügung stehen noch die Bearbeitungsroutine:

Code: Alles auswählen

function TMy.CallMethod(AMethodName: ShortString): DWORD;
var pMethod: TMethodPointer;
begin
  TMethod(pMethod).data := Self;
  TMethod(pMethod).code := MethodAddress(AMethodName); //Dein übergebener Befehl
  if Not Assigned(pMethod) then
     TMethod(pMethod).code := MethodAddress(DefaultMethodeName); //Falls Befehl nichtr vorhanden
  result := pMethod();
end;
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

AlbertEinstein
Beiträge: 8
Registriert: So 16. Dez 2012, 13:42

Re: Strings als Befehl ausführen

Beitrag von AlbertEinstein »

Vielen Dank für eure Hilfe!
Ich denke, ich schaffe es jetzt :D ..
(Alles mal durchprobieren, eines wird schon richtig sein... ;) )

Code: Alles auswählen

if Beitrag = Nützlich then
  AllesDurchlesen
else
  Ignorieren;

Antworten