Вы могли использовать ignore_user_abort()
- тот способ, которым сценарий продолжит работать, даже если Вы закроете свой браузер или перейдете к различной странице.
Это один способ, и в этом нет ничего плохого. Другой способ - сделать это визуально. Таким образом, вы можете просто добавить рамку в форму. для этого вы:
Единственная проблема с вашим подходом заключается в том, что вы не можете добавить несколько экземпляров одного и того же фрейма в заданную форму:
Frame1 := TMyFrame.Create(Self);
Frame1.Parent := Self;
// ...
Frame2 := TMyFrame.Create(Self); // bombs out with "a component with the name MyFrame already exists"
Временное решение для него - назначить разные имена для каждого экземпляра:
Frame1 := TMyFrame.Create(Self)
Frame1.Parent := Self;
Frame1.Name := "FirstFrame";
// ...
Frame2 := TMyFrame.Create(Self); // works now, there is no name conflict
Вы можете даже пойти дальше, зарегистрировав свои фреймы как компоненты.
Это не позволяет вам редактировать свойства компонентов на фрейме, как только компонент фрейма будет на форме. Но я думаю, что это хорошо.
Вам нужно еще кое-что, кроме регистрации вашего фрейма в качестве компонента, как я объясняю в этой статье о Delphi - Фреймы как визуальные компоненты - не забудьте свой Sprig! .
Это не мое знание: я получил его от Рэя Конопки во время одного из его сеансов на конференции Delphi Live в Сане. Хосе в начале этого года.
Это скорее отрицательный ответ, но я пробовал путь, который включал переподготовку TFrames для немного сложного графического интерфейса.
Сначала все прошло нормально, но когда приложение созрело и началось больше событий fly, мне пришлось отключить и затем обработать сообщения на некоторое время (20 мс) перед изменением, а затем все еще иногда возникали сбои при смене кадра.
Одна из виновников, которую я в итоге обнаружил, TPopmenu также регистрируется в глобальных структурах данных. Это уменьшило проблемы, но они все еще были, поэтому я отхожу от концепции.