Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Eigene Prozedur zu Klasse hinzufügen


Regan - Sa 11.07.09 20:12
Titel: Eigene Prozedur zu Klasse hinzufügen
Moin,

irgendwie seh ich zur Zeit den Wald vor lauter Bäumen nicht mehr. Ich geb euch erstmal die nötigen Quelltexte:

Rezepteklasse
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TListAdEvent = procedure(AName, ALastChange:String; AOK: Boolean);

TRezeptverwaltung = class
private
    FAdToList: TListAdEvent;
    procedure SetAdToList(const Value: TListAdEvent);
public
    property AdToList: TListAdEvent read FAdToList write SetAdToList;

Das sollte erstmal klar sein. Jetzt will ich beim FormCreate der Form1 eine eigene Prozedur zuweisen. Wie muss ich die Prozedur denn deklarieren?
Ich habe es leider erfolglos so probiert:

Hauptform
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type
  TMainForm = class(TForm)
{...}
  private
    procedure ZurListeHinzufuegen(AName, ALastChange:String; AOK: Boolean);
{...}
procedure TMainForm.FormCreate(Sender: TObject);
begin
  Rezepte := TRezeptverwaltung.Create(Application.ExeName);
  Rezepte.AdToList := ZurListeHinzufuegen;
end;

Ich wollte das eben so wie bei einem NotifyEvent machen, will aber nicht. Da kommt folgende Fehlermeldung:
Zitat:
[Pascal Fehler] fMain.pas(189): E2009 Inkompatible Typen: 'Reguläre Prozedur und Methodenzeiger'


Wie muss es richtig gemacht werden? Würde mich über eine ausführliche Beschreibung freuen, warum das mit TNotifyEvent funktioniert, aber nicht mit meiner eigenen Prozedur.

MfG
Regan


jaenicke - Sa 11.07.09 20:17

In der Typdeklaration fehlt hinten ein of object. Erst dann ist es ein Methodenzeiger, das heißt ein Zeiger auf eine Methode eines Objekts. ;-)

Hintergrund: Du deklarierst einen Zeiger auf eine normale Prozedur, mit dem of object wird zusätzlich noch der Zeiger auf das Objekt mitgeführt, zu dem die Methode gehört. Sonst ginge da nämlich das Self nicht. ;-)


Regan - Sa 11.07.09 20:23

Achso 8) . Jetzt funktioniert es :D . Vielen Dank :zustimm: .
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Hintergrund: Du deklarierst einen Zeiger auf eine normale Prozedur, mit dem of object wird zusätzlich noch der Zeiger auf das Objekt mitgeführt, zu dem die Methode gehört. Sonst ginge da nämlich das Self nicht. ;-)

OK, leuchtet ein. Ich habe auch grad nochmal bei TNotifyEvent nachgeschaut. Da steht das ja auch dahinter. Man lernt nie aus ;) .