так вот речь и идет о том, что компоненты должны быть отдельно, а данные отдельно
если мы под компонентами понимаем одно и то же - экранные компоненты, предназначенные для отображения данных человеку
программа не человек, ей компоненты побоку, ей бы переменные, классы, списки.
ну и по коду - ошибка - обращение к переменной form1 внутри метода класса TForm1
Добавляешь в проект POSIX
uses
Posix.Stdlib, Posix.Unistd;
После, в нужном тебе событии вызываешь
__system(PAnsiChar('/путь/к/приложению & disown'))
Команда в PAnsiChar зависит от дистрибутива. Но принцип работы такой, что POSIX отправляет в Терминал команду. Так что, можно отправить в Терминал команду на открытие сторонней программы и методом & disown открепить её от процесса Терминала.