AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionsnamen aus Variablen?

Ein Thema von new32 · begonnen am 7. Aug 2005 · letzter Beitrag vom 11. Dez 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Funktionsnamen aus Variablen?

  Alt 7. Aug 2005, 16:25
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
Oliver Hanappi
  Mit Zitat antworten Zitat
KLS

Registriert seit: 20. Jun 2004
Ort: Berlin
89 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Funktionsnamen aus Variablen?

  Alt 7. Aug 2005, 16:49
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;
Thomas H.
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Funktionsnamen aus Variablen?

  Alt 7. Aug 2005, 17:08
@idontwantaname: nette Idee, aber nen bisschen umständlich.

@KLS: sieht interessant aus!
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Funktionsnamen aus Variablen?

  Alt 7. Aug 2005, 18:06
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Funktionsnamen aus Variablen?

  Alt 7. Aug 2005, 19:10
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
Oliver Hanappi
  Mit Zitat antworten Zitat
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#16

Re: Funktionsnamen aus Variablen?

  Alt 11. Dez 2006, 01:24
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

StarteRoutineByName(Form1,'schließen'); aufrufe, passiert garnichts.

die StarteRoutineByName procedure hab ich 1 zu 1 übernommen.

was mache ich falsch?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Funktionsnamen aus Variablen?

  Alt 11. Dez 2006, 05:53
schließen ist laut deiner Deklaration auch eine freie Pozedur und keine Methode von TForm1
Markus Kinzler
  Mit Zitat antworten Zitat
KLS

Registriert seit: 20. Jun 2004
Ort: Berlin
89 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Funktionsnamen aus Variablen?

  Alt 11. Dez 2006, 07:35
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.
Thomas H.
  Mit Zitat antworten Zitat
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#19

Re: Funktionsnamen aus Variablen?

  Alt 11. Dez 2006, 09:41
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Funktionsnamen aus Variablen?

  Alt 11. Dez 2006, 12:11
Zitat:
wundert mich aber, dass der compiler, da nicht rummeckert. Naja, seis drum.
Er optimiert die Sonderzeichen halt weg.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:59 Uhr.
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