Autor Beitrag
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Sa 11.07.09 20:12 
Moin,

irgendwie seh ich zur Zeit den Wald vor lauter Bäumen nicht mehr. Ich geb euch erstmal die nötigen Quelltexte:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: 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 ;) .