![]() |
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:
Aufruf:
constructor TMyClass.Create(AOwner: TComponent; Zeiger auf Klasse);
begin inherited Create(AOwner); //... end;
Delphi-Quellcode:
procedure TForm1.Test();
begin ShowMessage('Test'); end; Test:=TMyObj.Create(self, Zeiger auf Test); |
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); |
AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
Zitat:
z.B. wie der Typ für
Delphi-Quellcode:
einer Form deklariert ist.
.OnKeyPress
Oder die .Sort-Methode einer TStringList > ![]() |
AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
Wobei letztere eine Funktion entgegennimmt und keine Methode.
|
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:
|
AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
Zitat:
Wenn ich in einem Fenster einen Button erzeuge und auf das Ereignis OnKeyPress reagieren möchte, erhalte ich folgenden Quellcode:
Delphi-Quellcode:
Ich kann leider den Zusammenhang mit meinem Vorhaben nicht daraus erkennen...:(
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. |
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.
|
AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
Zitat:
|
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.
|
AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
Eigentlich ist es recht einfach.
mögliche Funktionen/Methoden:
Delphi-Quellcode:
und die zugehörigen Deklarationen für entsprechende Funktions-/Methoden-Zeiger, an welche man Diese übergeben könnte:
type
TMyClass = class function Test2(...): ...; class function Test3(...): ...; end; function Test1(...): ...; begin end;
Delphi-Quellcode:
1: normale Funktionen/Prozeduren
type
TTest1 = function(...): ...; TTest2 = function(...): ... of object; TTest3 = function(...): ... of class; TMegaTest = reference to function(...): ...; 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:
, nur daß dann der interne Objektzeiger als Zeiger auf die Klasse mißbraucht wird. :shock:
of Object
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 05:21 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