![]() |
proceduren über findcomponent ansprechen, möglich?
Hallo,
ich hab zwei units: In der 2. (Utree) befinden sich in der Klasse tBaum die proceduren/functionen loeschen, einfuegen, suchen und in der 1. Unit ruf ich diese mit Baum.loeschen(r), Baum.einfuegen(r), Baum.suchen(r) auf (Baum ist vom Typ tBaum). Mein Problem ist nun, dass ich gerne etwas wie (ich weis, ist falsch) Baum.FindComponent('loeschen')(r) machen will, d.h. die proceduren/functionen, die ich aufrufe von einem string abhängig mache. Wie geht das, ist dies überhaupt möglich? |
Re: proceduren über findcomponent ansprechen, möglich?
Direkt: Nein.
Indirekt: Ja.
Delphi-Quellcode:
procedure Baum.Call(Func: string);
begin if Func = 'einfügen' then ... else if Func = 'loeschen' then .... end; |
Re: proceduren über findcomponent ansprechen, möglich?
hmmm, schade, weil ich halt mehrfach die selben programmteile hab, die sich nur durch den namen der aufzurufenden funktion unterscheiden und ich das jetzt vereinfachen wollte...
aber dennoch danke (vorallem für die dau schnelle antwort...:D) |
Re: proceduren über findcomponent ansprechen, möglich?
kommt es nicht aufs gleiche raus ob dein aufruf so aussieht
Delphi-Quellcode:
oder
procedureandhandvomString('test1');
procedureandhandvomString('test2');
Delphi-Quellcode:
also ob du nun nen anderen paraemter zum finden der funktion übergeben würdest oder einen anderen procedurenamen verwendest kommt aufs gleiche raus. Ansonsten zu deinem Grundproblem. Es ist möglich Typen zu verschiedenen Proceduren zu deklarieren und davon eine Variable anzulegen. Und dann rufst du die variable auf => funktion wird ausgeführt... (ist nicht korrekt was ich geschrieben hab aber wenn ichs ganz korrekt schreibe würde es der fragesteller nicht verstehen)
procedure1;
procedure2; |
Re: proceduren über findcomponent ansprechen, möglich?
Weiss nicht ob es dir Weiterhilft aber Versuchs mal mit:
Delphi-Quellcode:
Damit kannst du Methoden per String finden und diese mit ein bisl Code auch ausführen!
class function MethodAddress(const Name: ShortString): Pointer;
|
Re: proceduren über findcomponent ansprechen, möglich?
Delphi-Quellcode:
z.b. StarteRoutineByName(Form1,'berechneumfang'); //so oder so ähnlich war der aufruf
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; |
Re: proceduren über findcomponent ansprechen, möglich?
Äh genau das war es :D war irgendwo im Internet zu finden war nur zu Faul zum Suchen! :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 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