вариант с record
type
PMyRecord = ^TMyRecord;
TMyProc1 = procedure (dt: PMyRecord ) of object;
TMyProc2 = procedure (dt: PMyRecord ) of object;
TMyRecord = record
i: integer;
s: string;
MyProc1: TMyProc1;
MyProc2: TMyProc1;
Chk: boolean;
end;
вариант 2
TMyRecord = record
i: integer;
s: string;
MyProc1: pointer;
MyProc2: pointer;
Chk: boolean;
end;
PMyRecord = ^TMyRecord;
TMyProc1 = procedure (var dt: TMyRecord ) of object;
TMyProc2 = procedure (var dt: TMyRecord ) of object;
и соответственно вызов: TMyProc2(MyRecord.MyProc2)(..arg..);
vs TMethod
TMyRecord = record
i: integer;
s: string;
MyProc1:TMethod;
MyProc2:TMethod;
Chk: boolean;
end;
PMyRecord = ^TMyRecord;
impl..
function my_proc(this : PMyRecord):string;
begin
this^.s:='dfdf';//прочие данные
result:=this^.s;//к примеру..
end;
//main
var
MyRecord:TMyRecord;
begin
MyRecord.s:='';
MyRecord.MyProc1:=MakeMethod(@ MyRecord ,@ my_proc);
//вызов
writeln(MyRecord.MyProc1);//<-- вызов и вывод результата "dfdf"
еще вариант TMyProc1 = procedure (var dt) of object;
и соответственно TMyRecord(dt).s:='ghghg';