Можно еще добавить вот так чтоб была более наглядно проилюстрированна суть извращения:
Код:
procedure TMButton.MyFree;
begin
FreeAndNil(MB);
MB.I:=0;
end;
procedure TMButton.Click;
begin
inherited;
MyFree();
end;
Тойсть ошибка происходить из-за того что идет обращение к объекту или его частям после того как он был удален...
Вопрос в том как излюбнуть систему чтоб управление после FreeAndNil(MB); переходило в какую-то часть программы и дальше все работало в штатном режиме как будто объекта MB и не бывало?
Для людей не насилующих свой мозг:
Удаление MB.I:=0; не решит проблему.. Так как "end" грубо говоря превращается в ассемблерный "ret" который вытаскивает адрес (удаленного объекта) из стека процесора и пытается с ним взаимодействовать
Решение которое мне приходит на ум то это какие-то махинации со стеком или "jmp" в какой-то участок кода, или вообще все вместе...
Но это пока еще вопрос как и не нарушу ли я этим какую-то священную логику самого самого Delphi