Autor Beitrag
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 15.07.05 17:00 
Incompatible types method pointer and regular procedure
Im Zusammenhang mit dynamisch zugewiesenen Ereignisprozeduren kommt es bei Anfängern regelmäßig zu der Fehlermeldung "Incompatible types method pointer and regular procedure".
Der Fehler kommt dadurch zustande, dass einer Methode einer Klasse eine normale Prozedur zugewiesen wird, z.b.
ausblenden Delphi-Quelltext
1:
 MyButton.OnClick := MyClickProcedure;					

Der Unterschied einer Klassenmethode und einer normalen Prozedur ist der, dass einer Methode ein 2., unsichtbarer Parameter (eine Referenz auf ein Objekt) überwiesen wird.

Um dies zu umschiffen gibt es 2 Möglichkeiten:

1. Zuweisung der Prozedur zu einer bestehenden Klasse oder einer Dummyklasse.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type
  TMyDummyClass = class
    class procedure MyOnTimer(Sender: TObject);
  end;

class procedure TMyDummyClass.MyOnTimer(Sender: TObject);
begin
  ShowMessage('Test');
end;

...

  with TTimer.Create(nildo
    OnTimer := TMyDummyClass.MyOnTimer;

2. den 2 versteckten Parameter in die Prozedur mit einbauen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure MyOnTimer(Self: Pointer; Sender: TObject);
begin
  ShowMessage('Test');
end;


var
  aMethod: TMethod;

  aMethod.Code := @MyOnTimer;
  aMethod.Data := nil;
  with TTimer.Create(nildo
    OnTimer := TNotifyEvent(aMethod);


Wer sich mit dem Thema noch detaillierter befassen will, der sei hier auf das pointertutorial von user profile iconMotzi verwiesen, welches hierzu noch mehr Informationen liefert, und diesem Beitrag als Vorlage diente.
www.manuel-poeter.de...x.php?site=tutorials

Moderiert von user profile iconChristian S.: Titel geändert
Moderiert von user profile iconjasocul: Beitrag in Überprüfung

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...