Приложение работает с фреймами.
Делал так.
Код:
unit uParent; //Главный фрейм (предок)
type
TframeParent = class(TFrame)
procedure EnterToFrame; virtual;
Код:
unit uOne;
type
TframeOne = class(TframeParent) //Рабочий фрейм
public
procedure EnterToFrame; override;
Код:
unit uMain; // Приложение
var
CurrentFrame: TframeParent = nil;
procedure TfMain.Work;
begin
CurrentFrame:=TframeOne.Create(nil);
CurrentFrame.Parent := ScrolBox1;
CurrentFrame.EnterToFrame; // Так входил в процедуру
end;
CurrentFrame.EnterToFrame -таким способом обращался к процедуре.
Теперь перешёл на такой код, вызов фрейма по имени.
Код:
unit uParent;
type
TframeParent = class(TFrame)
procedure EnterToFrame; virtual;
Код:
unit uOne;
type
TframeOne = class(TframeParent)
public
procedure EnterToFrame; override;
Код:
unit uMain;
MyClass: TComponentClass;
MyComp: TComponent = nil;
implementation
type
TClassArray = array [1..1] of TPersistentClass;
const
ClassArray: TClassArray = (TframeOne);
procedure TfMain.Work;
var
generalPtr : Pointer;
begin
if MyComp<>nil then FreeAndNil(MyComp);
MyClass:= TComponentClass(GetClass('TFrameOne')); //Где-то здесь при вызове разных фреймов происходит расход памяти
MyComp := MyClass.create(self);
TControl (MyComp) .parent := ScrollBox1;
generalPtr:= MyComp1.MethodAddress('EnterToFrame'); // нашёл указатель на процедуру
...EnterToFrame; // А как теперь войти в эту процедуру не пойму.
end;
Не подскажите как справиться с утечкой памяти и добраться до своих процедур в фреймах (или вызвать процедуру по указателю)?
.....
Спустя некоторое время
....
добавил
Код:
type TProc = procedure of object;
в
Код:
TfMain.Work;
var
....
MethodVar: TMethod;
proc: TProc;
begin
....
MethodVar.Data := generalPtr;
MethodVar.Code := generalPtr;
Proc := TProc(MethodVar);
Proc;
Теперь до процедуры добрался, только до главного фрейма, а потомки не отрабатываются....