AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion an Funktion übergeben.

Ein Thema von samson · begonnen am 12. Sep 2003 · letzter Beitrag vom 12. Sep 2003
Antwort Antwort
Benutzerbild von samson
samson

Registriert seit: 26. Aug 2003
Ort: Hövelhof Riege
105 Beiträge
 
Delphi 2007 Professional
 
#1

Funktion an Funktion übergeben.

  Alt 12. Sep 2003, 08:26
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
Frank Gellermann
Wer Informationen hat, hat Macht. Wer Macht hat, hat Informationen!!!
  Mit Zitat antworten Zitat
TypusMensch

Registriert seit: 29. Aug 2003
Ort: Goth-A
182 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Funktion an Funktion übergeben.

  Alt 12. Sep 2003, 10:42
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...
  Mit Zitat antworten Zitat
Rumpi

Registriert seit: 26. Aug 2003
Ort: Berlin
72 Beiträge
 
#3

Re: Funktion an Funktion übergeben.

  Alt 12. Sep 2003, 10:58
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.
Angehängte Dateien
Dateityp: zip function.zip (202,4 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Funktion an Funktion übergeben.

  Alt 12. Sep 2003, 11:22
Hallo,

vielleicht hilft dir zusätzlich weiter, was Du unter den Stichworten "Methodenzeiger" oder "prozedurale Typen" in der Onlinehilfe findest.

Grüße
Woki
  Mit Zitat antworten Zitat
Rumpi

Registriert seit: 26. Aug 2003
Ort: Berlin
72 Beiträge
 
#5

Re: Funktion an Funktion übergeben.

  Alt 12. Sep 2003, 11:30
Das ist besser !

Delphi-Quellcode:
procedure TForm???.CallFunction( Func: TNotifyEvent );
begin
  MyFunction( Self );
  if Assigned( Func ) and (@Func <> @FMyFunction) then
    Func( nil );
end;
mfg Rumpi
  Mit Zitat antworten Zitat
Ronny Grabo

Registriert seit: 16. Mai 2003
41 Beiträge
 
#6

Re: Funktion an Funktion übergeben.

  Alt 12. Sep 2003, 11:31
Hallo,

irgendwie hab ich es nicht ganz verstanden, Du hast MyFunction als procedure deklariert und nicht als Funktion (function).

Delphi-Quellcode:
    private
    { Private declarations }
    FMyFunction : TNotifyEvent;
    procedure MyFunction( Sender: TObject );
eine Function wird jedoch wie folgt deklariert :
function FunktionsName(Variable:Typ):Rückgabewert Gruß Ronny.
---
Meine Internetseite : http://www.ronny-grabo.de
  Mit Zitat antworten Zitat
Benutzerbild von samson
samson

Registriert seit: 26. Aug 2003
Ort: Hövelhof Riege
105 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Funktion an Funktion übergeben.

  Alt 12. Sep 2003, 13:00
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:
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;
Ich danke auf jedem Fall allen die mir geholfen haben.

Gruss


Samson
Frank Gellermann
Wer Informationen hat, hat Macht. Wer Macht hat, hat Informationen!!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 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