Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktionsnamen aus Variablen? (https://www.delphipraxis.net/51162-funktionsnamen-aus-variablen.html)

idontwantaname 7. Aug 2005 15:25

Re: Funktionsnamen aus Variablen?
 
da gibt es noch eine möglichkeit, wenn auch eine ziemlich "schmutzige"
wenn die funktionen/proceduren alle die selben parameter haben, könntest du diese in einer DLL implementieren und sie dann zur Laufzeit einbinden
genaueres hier
natürlich ist das eine bedingt verwendbare möglichkeit, und hagens ist sicher besser :wink:

KLS 7. Aug 2005 15:49

Re: Funktionsnamen aus Variablen?
 
es gibt eine recht einfache möglichkeit

Delphi-Quellcode:
procedure StarteRoutineByName(Instance : TObject; Name : string); //instance z.b. Form1
type
  TExecute = procedure of object;
var
  Routine : TMethod;
  Execute : TExecute;
begin
  Routine.Data := Pointer(Instance);
  Routine.Code := Instance.MethodAddress(Name);
  if Routine.Code = nil then Exit;
  Execute := TExecute(Routine);
  Execute;
end;
und damit die sache perfekt ist

Delphi-Quellcode:
function FindFormByName(Formname : string) : Tform;
var
  i : byte;
begin
  result := nil;
  for i := 0 to screen.FormCount-1 do if screen.Forms[i].Name = Formname then
  begin
    result := screen.Forms[i];
    break;
  end;
end;

new32 7. Aug 2005 16:08

Re: Funktionsnamen aus Variablen?
 
@idontwantaname: nette Idee, aber nen bisschen umständlich. :wink:

@KLS: sieht interessant aus!

SirThornberry 7. Aug 2005 17:06

Re: Funktionsnamen aus Variablen?
 
zum vorschlag von idontwantaname: Man muss die Funktionen nicht in eine DLL auslagern. Man kann auch einfach im Hauptprogramm exports aufführen und somit findet man die procedure auch über GetProcAddress

idontwantaname 7. Aug 2005 18:10

Re: Funktionsnamen aus Variablen?
 
Zitat:

Zitat von SirThornberry
zum vorschlag von idontwantaname: Man muss die Funktionen nicht in eine DLL auslagern. Man kann auch einfach im Hauptprogramm exports aufführen und somit findet man die procedure auch über GetProcAddress

ahhh, stimmt !

aber die lösung von KLS gefällt mir auch ganz gut

-=IOI=- 11. Dez 2006 00:24

Re: Funktionsnamen aus Variablen?
 
ich würde gerne die variante von KLS verwenden, aber leider funktioniert das bei mir nicht.

ich habe eine procedure

Delphi-Quellcode:
procedure schließen;
begin
  Form1.Close;
end;
wenn ich diese aber mit

Delphi-Quellcode:
StarteRoutineByName(Form1,'schließen');
aufrufe, passiert garnichts.

die StarteRoutineByName procedure hab ich 1 zu 1 übernommen.

was mache ich falsch?

mkinzler 11. Dez 2006 04:53

Re: Funktionsnamen aus Variablen?
 
schließen ist laut deiner Deklaration auch eine freie Pozedur und keine Methode von TForm1

KLS 11. Dez 2006 06:35

Re: Funktionsnamen aus Variablen?
 
und ausserdem nimmt der das ß nicht. Das ist ein ungültiges zeichen.

so wird ein schuh draus.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, SysUtils, Classes, Controls, Forms, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure schliessen;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure StarteRoutineByName(Instance : TObject; Name : string);
type
  TExecute = procedure of object;
var
  Routine : TMethod;
  Execute : TExecute;
begin
  Routine.Data := Pointer(Instance);
  Routine.Code := Instance.MethodAddress(Name);
  if Routine.Code = nil then Exit;
  Execute := TExecute(Routine);
  Execute;
end;

procedure TForm1.schliessen;
begin
  Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  StarteRoutineByName(Form1,'schliessen');
end;

end.

-=IOI=- 11. Dez 2006 08:41

Re: Funktionsnamen aus Variablen?
 
danke euch, so klappt es wunderbar.

es lag hauptsächlich an dem 'ß', weil mit TForm1 hatte ich es auch schonmal probiert.
wundert mich aber, dass der compiler, da nicht rummeckert. Naja, seis drum.

Eine Frage hätte ich noch. was muss ich noch abändern, wenn ich der aufzurufenden funktion auch noch einen oder mehrer parameter übergeben muss?

mkinzler 11. Dez 2006 11:11

Re: Funktionsnamen aus Variablen?
 
Zitat:

wundert mich aber, dass der compiler, da nicht rummeckert. Naja, seis drum.
Er optimiert die Sonderzeichen halt weg.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.
Seite 2 von 3     12 3      

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