Einzelnen Beitrag anzeigen

Rumpi

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

Re: Funktion an Funktion übergeben.

  Alt 12. Sep 2003, 11: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