Zitat:
Ich habs im Moment so:
Delphi-Quellcode:
procedure MyProc(Sender: TObject);
...
MyArr[i].OnDoMyProc := MyProc;
...
MyArr[i].OnDoMyProc(Self);
Es kommt beim Prozedurkopf (also 1. Teil im QT) folgende Meldung:
Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
Naja, die Fehlermeldung sagt doch alles aus
MyArray[ i ].OnDoMyProc will einen Zeiger auf eine
Methode, was MyProc ja nicht ist, weil es nur eine 'reguläre Prozedur' ist. Luckie hat mal ein Beispiel geschrieben, wie man einen Timer in einer Konsolenanwendung verwenden kann, das Beispiel liegt auf seiner Homepage (ich tu den Link jetz nich posten, weils mir selber schon bei anderen Threads passiert ist, dass Luckie inzwischen die Struktur seiner HP und somit die
URL geändert hat). Das ist dann in etwa das gleiche Schema. Du brauchst praktisch ein Objekt, um eine
Mehtode zu haben
//edit: Noch was *g*
Wenn du auf Delphi 2006 wartest, dann kannst du in records auch Prozeduren und Funktionen definieren, ohne Friemelei
Records sind einfach nicht für Prozeduren gedacht, sondern halt einfach zur Datenspeicherung.
//edit:
Noch was
Das vorangestellte
T ist eigentlich für Klassen gedacht, wenn dus bei anderen "Sachen" verwendest, ist das irreführend
//edit: Hab das Ganze mal selber getestet *g*
Delphi-Quellcode:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Dingsda(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
MyRec = record
IntBla: integer;
StrBla: string[255];
OnDingsda: TNotifyEvent;
end;
var MyRec1: MyRec;
procedure TForm1.Dingsda(Sender: TObject); // <--- Das klappt, weils jetz ne Methode ist
begin // Würde auch klappen, wenn du statt TForm1 ein Dummyobjekt erzeugst
ShowMessage(Sender.ClassName); // Haputsache, MyRec1.OnDingsda zeigt auf eine Methode
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyRec1.IntBla := 234;
MyRec1.StrBla := 'Hallo auch';
MyRec1.OnDingsda := Dingsda;
MyRec1.OnDingsda(self);
end;
Julian J. Pracht