Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi proceduren über findcomponent ansprechen, möglich? (https://www.delphipraxis.net/43862-proceduren-ueber-findcomponent-ansprechen-moeglich.html)

billi 9. Apr 2005 19:14


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?

Dax 9. Apr 2005 19:16

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;

billi 9. Apr 2005 19:20

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)

SirThornberry 9. Apr 2005 19:26

Re: proceduren über findcomponent ansprechen, möglich?
 
kommt es nicht aufs gleiche raus ob dein aufruf so aussieht
Delphi-Quellcode:
  procedureandhandvomString('test1');
  procedureandhandvomString('test2');
oder
Delphi-Quellcode:
  procedure1;
  procedure2;
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)

Speedmaster 9. Apr 2005 19:49

Re: proceduren über findcomponent ansprechen, möglich?
 
Weiss nicht ob es dir Weiterhilft aber Versuchs mal mit:
Delphi-Quellcode:
class function MethodAddress(const Name: ShortString): Pointer;
Damit kannst du Methoden per String finden und diese mit ein bisl Code auch ausführen!

KLS 9. Apr 2005 20:23

Re: proceduren über findcomponent ansprechen, möglich?
 
Delphi-Quellcode:
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;
z.b. StarteRoutineByName(Form1,'berechneumfang'); //so oder so ähnlich war der aufruf

Speedmaster 9. Apr 2005 20:35

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 20:41 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