AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Offene Frage von "FriendOfDelphi"
Ein Thema von FriendOfDelphi · begonnen am 26. Nov 2010 · letzter Beitrag vom 9. Dez 2010
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
FriendOfDelphi

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

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

  Alt 26. Nov 2010, 15:08
Delphi-Version: 5
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);
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 26. Nov 2010, 15:20
Ungetestet:
Delphi-Quellcode:
type
  TFunc = function(Parameter): Rückgabewert of object;

constructor Create(AOwner: TComponent; aFunc: TFunc);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (26. Nov 2010 um 15:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 26. Nov 2010, 15:33
Man hätte auch einfach mal bei den Unmassen an .OnXyz-Property der VCL abgucken können.
z.B. wie der Typ für .OnKeyPress einer Form deklariert ist.

Oder die .Sort-Methode einer TStringList > Delphi-Referenz durchsuchenTStrings.CustomSort
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (26. Nov 2010 um 15:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 26. Nov 2010, 15:39
Wobei letztere eine Funktion entgegennimmt und keine Methode.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 26. Nov 2010, 15:42
Is mir och grad eingefallen und wollt's noch schnell (zu langsam) still und heimlich wegeditieren
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
FriendOfDelphi

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

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

  Alt 26. Nov 2010, 15:44
Man hätte auch einfach mal bei den Unmassen an .OnXyz-Property der VCL abgucken können.
z.B. wie der Typ für .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...
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 26. Nov 2010, 15:50
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
FriendOfDelphi

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

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

  Alt 26. Nov 2010, 16:01
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?
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 26. Nov 2010, 16:11
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#10

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

  Alt 26. Nov 2010, 16:55
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 of Object , nur daß dann der interne Objektzeiger als Zeiger auf die Klasse mißbraucht wird.



TMegaTest nimmt eigentlich fast alles auf, was es irgendwie gibt ... sogar die anonymen Methoden.
Aber dieses gibt es erst seit Delphi 2010 (oder so).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (26. Nov 2010 um 17:02 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


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 20:34 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