Поле VMTLink должно содержать смещение
Поле VMTLink должно содержать смещение адреса таблицы виртуальных методов (ТВМ) объекта. Турбо Паскаль имеет стандартную функцию TypeOf (Type: object) , которая возвращает адрес ТВМ для указанного типа Туре объекта, поэтому поле VMTLink обычно заполняется значением Ofs (TypeOf (TName)^), где TName - имя нестандартного объекта.
Поля Load и Store должны содержать адреса соответствующих виртуальных методов (см. п.20.3), обеспечивающих чтение объектов из потока и их запись в поток.
Например, если в программе определен объект
type
TMyWindow = object (TWindow)
.....
Constructor Load(var S: TStream);
Procedure Store(var S: TStream);
end ;
то для его регистрации создается запись
const
RMyWindow: TStreamRec = (
ObjType: 100;
VMTLink: Ofs(TypeOf(TMyWindow)^);
Load : @TMyWindow.Load;
Store : @TMyWindow.Store);
Обычно регистрация осуществляется в конструкторе Init вновь созданного объекта, например:
Constructor TMyWindow.Init;
begin
RegisterType(RMyWindow);
.....
end;
Однако, если в программе предполагается помещать в поток (или считывать из потока) объекты разного типа, регистрацию объектов как правило реализуют отдельной процедурой, вызываемой в конструкторе Init программы или в любом другом удобном месте, но перед фактическим обращением к потоку. Например:
Procedure RegisterMyProgram;
begin
RegisterType(RWindow); {Регистрация стандартного объекта}
RegisterType(RMyWindow); {Регистрация нового объекта}
.....
end;
Для упрощения регистрации стандартных объектов в модулях Turbo Vision предусмотрены процедуры RegisterXXXX, где ХХХХ - имя соответствующего модуля. Например, процедура RegisterDialogs осуществляет регистрацию всех неабстрактных объектов модуля Dialogs, т.е. TButton, TCluster, TInputLine и т.д.; процедура RegisterViews регистрирует объекты модуля Views и т.д.
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий