![]() |
kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?
Hallo zusammen,
in meinem Code muss ich in den verschiedensten Proceduren immer wieder dieselben Bedingungen abfragen. In den Bedingungen werden verschiedenste Stati geprüft. Das produziert Unmengen an gleichen Code und ist somit schwer wartbar/erweiterbar/ anpassbar. Wenn es geht, würde ich das gerne ändern und suche daher nun ein Konzept. Beispiel:
Delphi-Quellcode:
Im Prinzip soll in der Procedure "machwas" die ganzen Abfragen wegfallen die dann in einer globalen Procedure(?) stehen und der man als Parameter für die einzelnen Bedingungen eine andere Proceduren übergeben kann.
procedure Tfrm_Main.machwas;
var ls_FileName : string; RecIdx, RowIdx : Integer; begin ls_FileName := ....; RecIdx := ....; RowIdx := ....; if gb_Stati_1 then begin procedur 1(ls_FilenName, RecIdx, RowIdx); end else if gb_Stati_4 then begin procedur 2(ls_FilenName, RecIdx, RowIdx); end; .... end; Beispiel:
Delphi-Quellcode:
So meine Vorstellungen. :stupid:
procedure Tfrm_Main.Check_Statis(const procedure x, const procedure y);
begin if gb_Stati_1 then begin x; //<== meine 1. "variable" Procedure end else if gb_Stati_4 then begin y; //<== meine 2. "variable" Procedure end; .... end; procedure Tfrm_Main.machwas; var ls_FileName : string; RecIdx, RowIdx : Integer; begin ls_FileName := ....; RecIdx := ....; RowIdx := ....; Check_Statis(x, y); Die Bedingungen sind einiges komplexer wie hier dargestellt und die Anzahl der Proceduren (also die Anzahl der Bedingungen) sind momentan 8 Stk. Ich denke das es für die Profiprogrammierer dafür eine Lösung geben müsste. Gibt es die Möglichkeiten einer Procedure als Parameter eine andere Procedure zu übergeben? Oder wie löst man diese Anfortderung? Leider bin ich (noch) sehr procedure-lastig beim Hobby-programmieren. Ich hoffe ich konnte mein Problem überhaupt verständlich darstellen und bedanke mich schon mal vorab für Ideen und Konzeptvorschläge. |
AW: kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?
Ich weis nicht, ob das mit Delphi XE schon geht, aber schau mal unter
![]() |
AW: kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?
Jap...das geht :) Einfach mal nach dem Stichwort "Callback" suchen :)
Die Methode über Callbacks hat den "Nachteil" das du eine fixe Paremterliste für alle Prozeduren hast. Innerhalb eines Objektes brauchst du die Prozedur aber nicht mal übergeben..schließlich kennst du die einzelnen Prozeduren, die je nach Status aufgerufen werden sollten. Evtl. wär auch das ein Ansatz:
Delphi-Quellcode:
Hab das jetzt nicht ausprobiert ob das so geht, aber vom Prinzip her sollte es gehen.
Type
TCallback = Procedure (Parameter1:string); TStatus = (sStatus1,sStatus2,sStatus3); Procedure Callback1(param1:string); begin : end; Procedure Callback2(param1:string); begin : end; Procedure CallBack3(Param1:string); begin : end; const TCalls : array[TStatus] of TCallback = ( @Callback1,@Callback2,@Callback3 ); Procedure CheckState(aState:TStatus); begin TCalls[aState]('Was auch immer'); end; |
AW: kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?
Da geht:
Delphi-Quellcode:
type
TMyCheckFunction = function(...): Boolean; procedure Machwas(MyCheckFunction: TMyCheckFunction); begin ... if MyCheckFunction(...) ... end; function CheckImpl1(...): Boolean; function CheckImpl2(...): Boolean; procedure DoIt; begin Machwas(CheckImpl1); Machwas(CheckImpl2); end; |
AW: kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?
Hallo,
danke für das Aufzeigen verschiedener Möglichkeiten. :dp: Ich werde mich wohl für anonyme Methoden entscheiden, da diese in meiner Delphi-Hilfe auch ziemlich gut erklärt sind. Schöne Ostern! |
AW: kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?
Und natürlich gibt es noch die Objekt-Methoden, so wie du sie schon seit Jahren aus deinem Delphi kennst ... z.B. die Events der VCL, ala OnClick, OnCreate usw.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:55 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