![]() |
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 ![]() natürlich ist das eine bedingt verwendbare möglichkeit, und hagens ist sicher besser :wink: |
Re: Funktionsnamen aus Variablen?
es gibt eine recht einfache möglichkeit
Delphi-Quellcode:
und damit die sache perfekt ist
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;
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; |
Re: Funktionsnamen aus Variablen?
@idontwantaname: nette Idee, aber nen bisschen umständlich. :wink:
@KLS: sieht interessant aus! |
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
|
Re: Funktionsnamen aus Variablen?
Zitat:
aber die lösung von KLS gefällt mir auch ganz gut |
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:
wenn ich diese aber mit
procedure schließen;
begin Form1.Close; end;
Delphi-Quellcode:
aufrufe, passiert garnichts.
StarteRoutineByName(Form1,'schließen');
die StarteRoutineByName procedure hab ich 1 zu 1 übernommen. was mache ich falsch? |
Re: Funktionsnamen aus Variablen?
schließen ist laut deiner Deklaration auch eine freie Pozedur und keine Methode von TForm1
|
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. |
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? |
Re: Funktionsnamen aus Variablen?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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