У меня возникли проблемы, когда я пытаюсь определить, действительна ли ссылка на объект. Но это, кажется, возвращает странные результаты.Как проверить, действительна ли ссылка на объект?
procedure TForm1.Button1Click(Sender: TObject);
var form1 : TForm;
ref2 : TControl;
begin
form1 := TForm.Create(nil);
form1.Name := 'CustomForm';
form1.Parent := self; //Main Form
form1.Show;
ref2 := form1;
showmessage(ref2.ClassName+' - '+ref2.Name+' - '+BoolToStr(ref2.visible,true));
freeandnil(form1);
showmessage(ref2.ClassName+' - '+ref2.Name+' - '+BoolToStr(ref2.visible,true));
end;
Первый возвращает ShowMessage - "ТГогт - CustomForm - True" (Так же, как я бы ожидать, что это).
Второе возвращение showmessage - «TForm - - False». Я действительно надеялся на какое-то нарушение прав доступа, которое я мог бы затем поймать и узнать, что ссылка недействительна.
В моем приложении мне нужно скомпилировать список случайных потомков TForm по мере их создания, а затем проверить позже, если они ушли (или не видны). К сожалению, это система с плагинами, поэтому я могу изменить все эти Формы, чтобы опубликовать сообщение «Я сделал сообщение».
Может ли такой код быть безопасным для использования (при условии, что я действительно проверяю нарушения доступа)? У кого-нибудь есть идеи, что происходит.
Благодаря
Пожалуйста, смотрите более ранний вопрос об использовании вещи после вызова FreeAndNil. http://stackoverflow.com/questions/364184/using-an-object-after-freeandnil –
Хотя вы не можете изменить все формы, чтобы сказать вам, когда они будут сделаны (потому что это код подключаемых модулей, который находится вне ваш контроль), вы * можете * диктовать, что любой совместимый плагин должен отправить такое сообщение. –
Для записи я полностью понимаю, что это не идеальное решение. В идеале каждый отдельный плагин мог бы опубликовать что-то назад или даже еще лучше, но каким-то образом решить первоначальную архитектурную проблему, требующую чего-то подобного в первую очередь. К сожалению, нецелесообразно менять все существующие плагины, чтобы они соответствовали новому стандарту. – tmjac2