I Используйте этот образец для Change класса во время выполнения:Изменение размера экземпляра класса Распределение памяти
procedure PatchInstanceClass(Instance: TObject; NewClass: TClass);
type
PClass = ^TClass;
begin
if Assigned(Instance) and Assigned(NewClass)
and NewClass.InheritsFrom(Instance.ClassType)
and (NewClass.InstanceSize = Instance.InstanceSize) then
begin
PClass(Instance)^ := NewClass;
end;
end;
type
TMyButton = class(TButton)
Private
FLogEvent : TNotifyEvent;
public
Property Log : TNotifyEvent Read FLogEvent Write FLogEvent;
procedure Click; override;
end;
procedure TMyButton.Click;
begin
Inherited;
if Assigned(FLogEvent) then
FLogEvent(Self);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
PatchInstanceClass(Button1, TMyButton);
end;
Моя проблема в том, что TMyButton Размер отличается от TButton Поскольку я Добавить это NotifyEvent в TMyButton. Мой вопрос: как я могу изменить размер памяти для NewClass того же экземпляра. :-)
Используйте класс промежуточных элементов, и вам не понадобится взлом. – TLama
Что вы пытаетесь достичь? Это неверное решение с вероятностью> 0,999. –
Вы не должны этого делать, потому что изменение размера экземпляра объекта обычно перемещает экземпляр в память и делает ссылки на экземпляр недействительными. – kludg