Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden? (https://www.delphipraxis.net/156290-wie-kann-ein-zeiger-auf-eine-funktion-als-paramater-uebergeben-werden.html)

FriendOfDelphi 26. Nov 2010 15:08

Delphi-Version: 5

Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
 
Wie kann ich beim Instanziieren eines Objekts dem Konstruktor einen Zeiger auf eine Funktion übergeben?
Delphi-Quellcode:
constructor TMyClass.Create(AOwner: TComponent; Zeiger auf Klasse);
begin
  inherited Create(AOwner);
  //...
end;
Aufruf:
Delphi-Quellcode:
procedure TForm1.Test();
begin
  ShowMessage('Test');
end;

Test:=TMyObj.Create(self, Zeiger auf Test);

DeddyH 26. Nov 2010 15:20

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
 
Ungetestet:
Delphi-Quellcode:
type
  TFunc = function(Parameter): Rückgabewert of object;

constructor Create(AOwner: TComponent; aFunc: TFunc);

himitsu 26. Nov 2010 15:33

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

Zitat von DeddyH (Beitrag 1064296)
Ungetestet

Man hätte auch einfach mal bei den Unmassen an .OnXyz-Property der VCL abgucken können.
z.B. wie der Typ für
Delphi-Quellcode:
.OnKeyPress
einer Form deklariert ist.

Oder die .Sort-Methode einer TStringList > Delphi-Referenz durchsuchenTStrings.CustomSort

DeddyH 26. Nov 2010 15:39

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
 
Wobei letztere eine Funktion entgegennimmt und keine Methode.

himitsu 26. Nov 2010 15:42

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
 
Is mir och grad eingefallen und wollt's noch schnell (zu langsam) still und heimlich wegeditieren :oops:

FriendOfDelphi 26. Nov 2010 15:44

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

Zitat von himitsu (Beitrag 1064298)
Zitat:

Zitat von DeddyH (Beitrag 1064296)
Ungetestet

Man hätte auch einfach mal bei den Unmassen an .OnXyz-Property der VCL abgucken können.
z.B. wie der Typ für
Delphi-Quellcode:
.OnKeyPress
einer Form deklariert ist.

Oder die .Sort-Methode einer TStringList > Delphi-Referenz durchsuchenTStrings.CustomSort

Das verstehe ich nicht. Dafür bin ich wohl noch zu sehr Delphi-Anfänger.
Wenn ich in einem Fenster einen Button erzeuge und auf das Ereignis OnKeyPress reagieren möchte, erhalte ich folgenden Quellcode:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1KeyPress(Sender: TObject; var Key: Char);
begin
//...
end;

end.
Ich kann leider den Zusammenhang mit meinem Vorhaben nicht daraus erkennen...:(

DeddyH 26. Nov 2010 15:50

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
 
Wie himi schon sagte: wirf doch einmal einen Blick in die VCL-Sourcen. Dort werden Methodentypen deklariert (siehe mein Beispiel) und als Felder in den Objekten definiert. Über eine Property können diese dann zugewiesen werden.

FriendOfDelphi 26. Nov 2010 16:01

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

Zitat von DeddyH (Beitrag 1064306)
Wie himi schon sagte: wirf doch einmal einen Blick in die VCL-Sourcen. Dort werden Methodentypen deklariert (siehe mein Beispiel) und als Felder in den Objekten definiert. Über eine Property können diese dann zugewiesen werden.

Wo finde ich denn die VCL-Sourcen?

DeddyH 26. Nov 2010 16:11

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
 
Die müssten unterhalb Deines Delphi-Ordners zu finden sein. Oder Du gehst auf die uses-Klausel Deiner Formularunit, drückst STRG und klickst z.B. auf "Controls". Ob das unter Delphi 5 schon ging, weiß ich leider auch nicht mehr.

himitsu 26. Nov 2010 16:55

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
 
Eigentlich ist es recht einfach.

mögliche Funktionen/Methoden:
Delphi-Quellcode:
type
  TMyClass = class
    function Test2(...): ...;
    class function Test3(...): ...;
  end;

function Test1(...): ...;
begin
end;
und die zugehörigen Deklarationen für entsprechende Funktions-/Methoden-Zeiger, an welche man Diese übergeben könnte:
Delphi-Quellcode:
type
  TTest1 = function(...): ...;
  TTest2 = function(...): ... of object;
  TTest3 = function(...): ... of class;
  TMegaTest = reference to function(...): ...;
1: normale Funktionen/Prozeduren
2: Objekt-Methoden (Funktionen eines instantiierten Objekts)
3: Klassen-Methoden (Funktionen einer Klasse ohne Objektinstanz)

Ob man diese Typen jetzt für Property oder für Parameter nimmt, ist dabei egal.

Das TCustomsort war mir nur eingefallen, weil es da mal als Parameter genutzt wird, aber leider war das nur ein Beispiel für eine "normale" Funktion.


[edit]
die 3 ist falsch: für Klassenmethoden nimmt man auch das
Delphi-Quellcode:
of Object
, nur daß dann der interne Objektzeiger als Zeiger auf die Klasse mißbraucht wird. :shock:



TMegaTest nimmt eigentlich fast alles auf, was es irgendwie gibt ... sogar die anonymen Methoden.
Aber dieses gibt es erst seit Delphi 2010 (oder so).


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 Uhr.
Seite 1 von 5  1 23     Letzte »    

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