Targion hat geschrieben:Genau. Und diese dürfen auch nicht an ein Objekt gebunden sein, sondern sind als freie Prozeduren im Quellcode.
Gibt es vielleicht allgemein ein Kommando, um das verarbeiten von Callbacks zu erzwingen?
Ich weiß zwar nicht, was du mit "erzwingen" meinst, aber ich denke, es gibt schon eine Möglichkeit
Methoden in den Callbacks zu verwenden.
Voraussetzung ist, dass die Callback-Funktion als
ersten Parameter einen Zeiger besitzt und ein weiterer, benutzerdefinierter Zeiger übergeben wird (üblicherweise user_data).
Als Funktionszeiger muss dann
verwendet werden. Der benutzerdefinierte Zeiger muss ein Zeiger auf die Instanz, die den Callback verarbeiten soll enthalten (wir beim Registrieren des Callbacks festgelegt).
Bei den Parametern nutzen wir dann die Tatsache, dass jede Methode den impliziten (nicht aufgeführten) Parameter "Self: TMyClass" besitzen. In der Deklaration werden dann nur noch alle anderen Parameter außer dem ersten Zeiger angegeben.
Code: Alles auswählen
procedure TMyClass.Callback(alle außer dem ersten Parameter; user_data: gpointer); cdecl;
var
erster_parameter: TGObject; // oder gpointer
begin
erster_parameter := TGObject(Self);
Self := TMyClass(user_data);
// jetzt kann man so wie sonst auch arbeiten
end;
Diese Zuweisungen dienen nur der Bequemlichkeit. Wenn man sie nicht macht, muss man bei jedem Zugriff auf ein Element des Objektes TMyObject(user_data).<Bezeichner> benutzen, da nur <Bezeichner> wirklich nur im besten Fall eine Zugriffsverletzung erzeugen.
Soweit meine Theorie (getestet habe ich das aber noch nicht). Alternativ dürfte das gtk2-Interface der LCL ein paar Beispiele geben.