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: 2847
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.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 11005
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