Вверх ↑
Ответов: 210
Рейтинг: 52
#1: 2016-04-10 07:18:39 ЛС | профиль | цитата
andrestudio,
вариант с 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';
карма: 1
слтв
1
файлы: 1code_37178.txt [267B] [265]
Голосовали:andrestudio