З builder програмно створюємо і видаляємо форми

С ++ Builder: програмно створюємо і видаляємо форми

Як відомо, додати в проект візуальної середовища, такий як C ++ Builder, нове програмне вікно (форму) - не проблема. Просто включаємо її в проект через меню File, New, Form і управляємо відображенням / приховуванням форми через її властивість Visible або за допомогою стандартних методів Show () і Hide () класу TControl.

Коли динамічних форм в додатку стає багато, може виявитися доцільніше не додавати їх все в проект, а створювати програмно в міру необхідності, адже TForm - звичайний клас, а значить, має конструктор:

Коли форма стала не потрібна, можна видалити її звичайним чином:

Що робити, якщо форма повинна бути єдиною і потрібно запобігти створенню другий такий же? Допоможе така інструкція.

У класі головною форми глобально оголошуємо покажчик на клас TForm:

В заголовки класу головної форми, з якої буде створюватися нова форма, оголошуємо прототип функції (в області public):

Описуємо саму функцію в тілі модуля:

Пишемо обробник події OnClose для створюваної форми:

Звідки-небудь виконуємо створення форми, установку обробника і відображення вікна:

Таким чином, дублікат створений не буде, але після закриття динамічної форми можна буде знову створити один її примірник.

Уважний користувач легко помітить, що в разі багаторазового динамічного створення / видалення форм займана додатком пам'ять може збільшуватися при створенні, але не зменшуватися при закритті форми, чи нормально це? Мабуть, для масд - так, адже диспетчер задач показує тільки використання віртуальної пам'яті процесом. Менеджер пам'яті вважає зайвим негайне повернення невеликої кількості пам'яті - це може привести лише до зниження швидкодії. Відповідний ділянку пам'яті в "купі" (heap) просто позначається як вільний і буде при нагоді повторно використаний самим же додатком.