Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 04:01

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Dynamischer Funktionsaufruf
BeitragVerfasst: Di Jan 21, 2003 19:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Hi,

ist es mit Delphi in irgendeiner Weise möglich eine Funktion oder Prozedur dynamisch aufzurufen? (zB. durch Eingabe in ein Editfeld)
Ungefähr so dachte ich mir das:
Code:
  1.  
  2.  
  3. ...
  4.  
  5.  StartProcedure(StrToProcedure(Edit1.Text));
  6.  
  7. ...
  8.  
  9.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 21, 2003 20:58 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hi,

wenn diese Procedure eine Methode in einem Objekt ist, kannst Du mit MethodAddress(const Name : ShortString) einen Zeiger auf die gesuchte Methode bekommen.

Könnte wie folgt aussehen:

Code:
  1.  
  2.  
  3. type
  4.  
  5.   TCmdFunc = procedure(params : TStrings) : String;
  6.  
  7.  
  8.  
  9. ....
  10.  
  11.  
  12.  
  13. function TConsole.Execute(Input : String) : String;
  14.  
  15. var
  16.  
  17.   Paramter : TStrings;
  18.  
  19.   sCmd      : String;
  20.  
  21.   Func        : TCmdFunc;
  22.  
  23. begin
  24.  
  25.   Paramter := TStringlist.Create;
  26.  
  27.   try
  28.  
  29.     // Eingabe parsen, das erste Wort enthaelt den Befehl
  30.  
  31.     ....
  32.  
  33.     Func := MethodAddress(sCMD);
  34.  
  35.     if Assigned(Func) then begin
  36.  
  37.       // Befehl existiert
  38.  
  39.       Result := Func(Parameter);
  40.  
  41.     end else begin
  42.  
  43.       Result := 'Unbekannter Befehl: ' + sCmd;
  44.  
  45.     end;
  46.  
  47.   finally
  48.  
  49.     FreeAndNil(Parameter);
  50.  
  51.   end;
  52.  
  53. end;
  54.  
  55.  


Sollte so gehen.

Gruß
Thomas

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 21, 2003 21:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Kann ich Result auch eine Prozedur zuweisen? Obwohl... ich schreibe eh fast nur Funktionen :wink:
Danke auf jedenfall!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 21, 2003 21:14 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Nein, leider nein. Ein Resultparameter wird in diesem Fall erwartet, da die Funktion so definiert wird. Du kannst TCMDFunc so definieren, das kein Result-Ergebnis erwartet wird, also so:

TCmdProc = procedure (Parameter : TStrings);

Leider gibt es keine einfache Moeglichkeit fest zustellen, ob eine Funktion oder eine Procedure aufgerufen wird.

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 22, 2003 11:18 
Ops, ein kleiner Fehler. Hinter der Funktionsprototype fehlt noch ein of Object, also TCmdFunc = function (Params : TStrings) : String of object. Nicht vergessen, sonst gibts bestimmt Probleme.

KidPaddle


Nach oben
  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.013s | 15 Queries | GZIP : On ]