2015-08-03 2 views
4

У меня есть список TPanels в приложении FMX, и я хочу освободить панель, если я нажму на нее.Как освободить контроль в своем собственном случае?

Чтобы освободить их непосредственно в обработчике Onclick, это не так, потому что я получаю нарушение доступа. И я не хочу использовать windowsmessages (рекомендуется в How to free control inside its event handler? и Why does my program crash when I destroy a button in its own OnClick handler?), потому что это приложение firemonkey, и я не знаю, как эти сообщения работают на Android и Mac.

Есть ли другое решение?

ответ

8

Использование myObject.Release:

Marks этот TFmxObject объект для отсроченного удаления.

Непосредственные действия в этом методе:

  • набор Родитель = ноль
  • объект вставки в замедленной удаления списка

Задержка действия:

  • свободный объект из списка (vPurgatory).

Помните, что метод Free (и процедура FreeAndNil) не приводит к удалению самого объекта в мобильных платформах:

// под АРК, этот метод на самом деле не так называемые компилятор переводит // вызов быть простым назначением nil переменной экземпляра, которая затем вызывает _InstClear

+0

Благодарим вас за комментарий к моему удаленному ответу, очень ценный –

+0

Спасибо за быструю помощь. @David Heffernan: В чем основное различие между вашим решением (TThread.Queue) и kami? Я думаю, что «релиз» более изящный, но в конце они делают то же самое или нет? – Rynardald

+1

Главное отличие заключается в том, что TThread.Queue не работает. Он не задерживает выполнение и выполняется синхронно. Это просто замораживание мозга с моей стороны. –

Смежные вопросы