Autor Beitrag
dost17
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 15.06.07 11:57 
Hallo,

ich habe drei Units : Test_1, Test_2 und Main.
Auf den Units : Test_1 und Test_2 ist die Procedure : "Meinprob" deklariert, die Funktionalität ist jedoch in der Procedure unterschiedlich. Je nachdem aus welcher Ecke meiner Anwendung mit der Unit "Main" ich nun "Meinprob" aufrufe, soll diese entweder auf Test_1 oder Test_2 ausgeführt werden. Die Werte 1 und 2 sind bekannt.
Über eine "case-" oder "if-" Bedingung ist das Problem sicherlich lösbar, bei einer Ergänzung des Programms um eine Unit "Test_3" mit "Meinprob" müsste ich dann die entsprechenden Routinen jedoch anpassen, deshalb die Frage :
Wie kann ich eine Procedure auf einer anderen Unit mit variabel Unit-Namen ausführen, wenn die Werte 1 oder 2 bekannt sind ???


Gruß dost17
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Fr 15.06.07 12:06 
Mein Vorschlag: Schau mal in der Hilfe unter $DEFINE $IFDEF $ELSE $ENDIF nach!

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Fr 15.06.07 12:15 
Mal abgesehen davon, dass ich es für arg seltsam halte, bewusst gleichnamige Prozeduren in unterschiedlichen Units einzubauen, wären hier vielleicht der Weg über dlls denkbar.

_________________
Bravery calls my name in the sound of the wind in the night...
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Fr 15.06.07 15:27 
Wenn du das prozedural machen willst, geht das mit Prozedur-Zeigern:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
type
  TMeinProb = procedure (<Parameter>);

var
  MEIN_PROB : array[1..2] of TMeinProb;


Du musst das Prozedurzeiger-Array einmal initalisieren, beispielsweise im initialization-Teil der Main-Unit:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
initialization
  MEIN_PROB[1] := @Test_1.MeinProb;
  MEIN_PROB[2] := @Test_2.MeinProb;
end.


Dann kannst du die Prozeduren einfach über das Array aufrufen:

ausblenden Delphi-Quelltext
1:
MEIN_PROB[1](Parameter...);					


Die modernere (und meiner Meinung nach aus bessere) Variante ist es, das ganze über Klassen zu machen: Eine Basisklasse, die Prozedur abstract deklariert und beliebig viele davon abgeleitete Klassen, die sie implementieren.

Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.