Einzelnen Beitrag anzeigen

FriendOfDelphi

Registriert seit: 21. Mai 2010
163 Beiträge
 
Delphi 5 Professional
 
#18

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?

  Alt 29. Nov 2010, 14:48
Danke für den Beispielcode.
Ich habe diesen noch etwas verändert und vereinfacht, um mir die eigentliche Aufgabe noch etwas mehr zu verdeutlichen und zu überprüfen, ob ich das richtig verstanden habe:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TBeispiel=procedure() of object; //Typdefinition eigener Typ "TBeispiel"

  TBeispielKlasse=Class(TForm)
    Private
      FMethode:TBeispiel; //Deklaration Feld "FMethode" vom eigenen Typ "TBeispiel"
    Public
      constructor Create(Methode:TBeispiel); //Deklaration Konstruktor mit Methode als Übergabeparameter vom eigenen Typ "TBeispiel"
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure Prozedur_1();
    procedure Prozedur_2();
  end;

var
  Form1: TForm1;
  BeispielObjekt_1: TBeispielKlasse;
  BeispielObjekt_2: TBeispielKlasse;

implementation

{$R *.DFM}

constructor TBeispielKlasse.Create(Methode:TBeispiel);
begin
  FMethode:=Methode;
end;


procedure TForm1.Prozedur_1();
begin
  ShowMessage('Prozedur_1');
end;


procedure TForm1.Prozedur_2();
begin
  ShowMessage('Prozedur_2');
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  BeispielObjekt_1:=TBeispielKlasse.Create(Prozedur_1);
  BeispielObjekt_1.FMethode;
  BeispielObjekt_2:=TBeispielKlasse.Create(Prozedur_2);
  BeispielObjekt_2.FMethode;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  BeispielObjekt_1.Free;
  BeispielObjekt_2.Free;
end;

end.
1.) Zuerst wird ein eigener Datentyp definiert: TBeispiel=procedure() of object; . Mit diesem kann man nun Variablen deklarieren, die eine Methode darstellen.
2.) Als nächstes wird dann eine Variable/ein Feld von diesem Typ (FMethode:TBeispiel; ) deklariert.
3.) Dann erfolgt die Deklaration des Konstruktors, dem ein Parameter von ebenfalls diesem Typen (FMethode:TBeispiel; ) übergeben werden muss. Innerhalb des Konstruktors wird zur Programmlaufzeit der Klassenmethode FMethode , die als Parameter übergebene Methode, der Klasse übergeben.
4.) Anschließend ist diese dann Teil der Klasse und und steht innerhalb der Klasse zur Verfügung.

Gut zu sehen ist das, wenn das Formluar erzeugt wird.
Hier werden die beiden Objekte erzeugt und diesen jeweils eine eigene Methode zugewiesen.
Ich hoffe, dass ich das so richtig verstanden und wiedergegeben habe.
Ansonsten können die Profis ja nochmal etwas dazu sagen.
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat