![]() |
Funktion an Funktion übergeben.
Hallo Leute,
ist es möglich eine Function an eine Function zu übergeben :?: :?: :?: Nachdem meine Function im Basisformular fertig ist, soll die übergebene Function ausgeführt werden. Um Kreisbeziehungen zu vermeiden, möchte ich eine Function an eine Function übergeben. Danke schon jetzt für Eure Hilfe. Gruss Samson |
Re: Funktion an Funktion übergeben.
Du kannst ein Parameter weitergeben. Also sagen wir mal ein geschachteltes System in etwa so:
FUNKTION1(...) : ...; begin ... end; FUNKION2(...) : ...; begin ... blablabla := FUNKTION1(...); ... end; HAUPTPROZEDUR(...); begin ... blablabla := FUNTKION2(...); ... end; Drumherum noch ein paar Schleifen, wie du es halt brauchst und somit wird auch auf die jeweilige Funktion beliebig oft zugegriffen. Verstanden??? Is jetzt 'n bissel kurz erklärt, aber ich hoffe, du weißt, wie ich es meine... :wink: |
Re: Funktion an Funktion übergeben.
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hoffe ich habe das richtig verstanden !
Hier ein kleines Programm dazu. Du kannst eine Function in einem anderen Formular ( Form2) rufen und bei der Übergabe bestimmen was am ende "in dem Übergebenden Formular (Form1)" ausgeführt werden soll. Form2 muss die Methoden von Form1 und Form1 nicht die von Form2 kennen bis auf die gemeinsame Function die gerufen werden kann. Teste einfach mal durch ob es das ist was du brauchst. mfg Rumpi Code:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } FMyFunction : TNotifyEvent; procedure MyFunction( Sender: TObject ); public { Public declarations } procedure CallFunction( Func: TNotifyEvent ); end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin FMyFunction := MyFunction; end; procedure TForm1.CallFunction( Func: TNotifyEvent ); begin MyFunction( Self ); if Assigned( Func ) and (@Func <> MethodAddress( 'MyFunction' )) then Func( nil ); end; procedure TForm1.MyFunction( Sender: TObject ); begin Caption := 'MyFunction ' + Name; Sleep( 500 ); Caption := ''; end; procedure TForm1.Button1Click(Sender: TObject); begin CallFunction( nil ); end; procedure TForm1.Button2Click(Sender: TObject); begin Form2.CallFunction( FMyFunction ); end; procedure TForm1.Button3Click(Sender: TObject); begin if Not Form2.Visible then Form2.Show; end; end. //********************************************************** unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private FMyFunction : TNotifyEvent; { Private declarations } procedure MyFunction( Sender: TObject ); public { Public declarations } procedure CallFunction( Func: TNotifyEvent ); end; var Form2: TForm2; implementation uses Unit1; {$R *.dfm} procedure TForm2.FormCreate(Sender: TObject); begin FMyFunction := MyFunction; end; procedure TForm2.CallFunction( Func: TNotifyEvent ); begin MyFunction( Self ); if Assigned( Func ) and (@Func <> MethodAddress( 'MyFunction' )) then Func( nil ); end; procedure TForm2.MyFunction( Sender: TObject ); begin Caption := 'Function ' + Name; Sleep( 500 ); Caption := ''; end; procedure TForm2.Button1Click(Sender: TObject); begin Form1.CallFunction( FMyFunction ); end; end. |
Re: Funktion an Funktion übergeben.
Hallo,
vielleicht hilft dir zusätzlich weiter, was Du unter den Stichworten "Methodenzeiger" oder "prozedurale Typen" in der Onlinehilfe findest. Grüße Woki |
Re: Funktion an Funktion übergeben.
Das ist besser !
Delphi-Quellcode:
mfg Rumpi
procedure TForm???.CallFunction( Func: TNotifyEvent );
begin MyFunction( Self ); if Assigned( Func ) and (@Func <> @FMyFunction) then Func( nil ); end; |
Re: Funktion an Funktion übergeben.
Hallo,
irgendwie hab ich es nicht ganz verstanden, Du hast MyFunction als procedure deklariert und nicht als Funktion (function).
Delphi-Quellcode:
eine Function wird jedoch wie folgt deklariert :
private
{ Private declarations } FMyFunction : TNotifyEvent; procedure MyFunction( Sender: TObject );
Delphi-Quellcode:
Gruß Ronny.
function FunktionsName(Variable:Typ):Rückgabewert
|
Re: Funktion an Funktion übergeben.
Danke!
Ich habs geschafft. Nochmal zur Erklärung! Ich habe eine MDI-Application. Diese hat natürlich MDI-Childs, welche nicht von TForm abgeleitet sind, sondern von MyBasicForm. MyBasicForm ist von TForm abgeleitet. Jetzt habe ich eine procedure der MDI-Hauptform geschrieben welche bestimmte Aktionen macht wenn das MDI-Child geschlossen wird. Aufgrund der Tatsache, das der Code beim Schliessen eines MDI-Childs immer gleich ist, habe ich eine entsprechende procedure in MyBasicForm geschrieben. Problem war, das ich nicht die MDI-Hauptunit in MyBasicForm einusen will. Also muss das MDI-Child die vorhin genannte Funktion übergeben. Ich habs jetzt folgend gelöst.
Delphi-Quellcode:
Ich danke auf jedem Fall allen die mir geholfen haben.
Typ
TMyFunc:procedure of Object; Typ MyBasicForm = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction; MainFunc:TMyFunc); . . . end; implementation procedure MyBasicForm.FormClose(Sender: TObject; var Action: TCloseAction; MainFunc:TMyFunc); begin . . . MainFunc; end; Gruss Samson :hello: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 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