Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 19.02.2018
Сообщений: 3

Модальные формы и работа с ними

20.02.2018, 02:54. Показов 9223. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В этом сообщении не буду рассматривать как создать форму авторизации используя модальное окно. Данный способ прекрасно описан здесь.
Собственно долго мучился с тем как правильно открывать и закрыть модальную форму №3 много раз, находясь в главном окне программы (форме № 2). Вроде все заработало, но история все равно остается какой-то мутной. Вот как я сделал:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm2::Button1Click(TObject *Sender)
{
    TForm3 *frm3 = new TForm3(0);
    frm3->Left=Screen->Width/2-frm3->ClientWidth/2;  //выравниваем форму по центру
    frm3->Top=Screen->Height/2-frm3->ClientHeight/2; //выравниваем форму по центру
    frm3->ShowModal();
    
}
Во вновь созданной форме есть, кнопка "Закрыть" (Button), по нажатию которой форма закрывается
C++
1
2
3
4
void __fastcall TForm3::Button1Click(TObject *Sender)
{
 ModalResult = mrClose; //форма № 3 закрывается
}
Но почему-то в пособиях рекомендуют использовать следующую конструкцию для вызова и закрытия модальных форм:
C++
1
2
3
4
5
6
7
8
9
TFormX * FormX = new TFormX(0);
try
{
    FormX->ShowModal();
}
__finally
{
    delete FormX;
}
Вот только если такую конструкцию использовать, то форму № 3 хрен ты без ошибки закроешь. Ведь из Unit.cpp удалено TForm3 *Form3, из Unit.h удалено extern PACKAGE TForm3 *Form3, вроде как из-за того, что форма создается не автоматически, это позволяет избежать утечки памяти. Но в таком случае при работе с самой формой № 3 не получится ее закрыть обычным способом:
C++
1
Form3->Close();
или
C++
1
delete Form3;
Так вот вопрос: правильно ли я закрываю форму используя ModalResult = mrClose или нужно как-то победить delete FormX и заставить программу работать с ней?

Добавлено через 11 минут
Немного поясню, если использовать try/finally в главной форме, у меня это Form2, то как тогда по нажатию кнопки на третьей форме (Form3) закрыть эту самую Form3?
C++
1
2
3
4
5
6
7
8
9
TForm3 * Form3 = new TForm3(0);
try
{
    Form3->ShowModal();
}
__finally
{
    delete Form3;
}
Как тогда закрыть Form3?
C++
1
2
3
4
void __fastcall TForm3::Button1Click(TObject *Sender)
{
 ?????
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.02.2018, 02:54
Ответы с готовыми решениями:

Модальные формы
Добрый день, возникла очередная проблема - делаю вывод на печать модальной формой, в коде главного прописала #include...

Модальные формы
Всем добого дня! Помогите пожалуйста, мне нужно написать любую мнооконную программу с модальными формами... нам задали в институте, а мы...

Как сделать чтобы 2 модальные формы не конфликтовали между собой?
Добрый день! Как сделать чтобы 2 модальные формы не конфликтовали между собой? Заранее спасибо за ответ.

44
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
25.02.2018, 22:50
Студворк — интернет-сервис помощи студентам
Avazart, Формы-потомки TForm которые пользователь дельфы/билдера создает в том же модуле что и TApplication заведующий фабрикой жить не могут по определению.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.02.2018, 22:53
TForm и TApplication и так в одном модуле, это по факту так.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
25.02.2018, 22:58
Avazart, А потомки TForm - ну типа TForm1 TForm2 ну или как их там программер обзовет тоже все туда пихать прикажешь? Не получится. И вообще без метакласса содержащего указатель на конструктор не получится фабрика. Но вот в эту таблицу указателей на методы только открытые по дефаулту попадают.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.02.2018, 23:10
Это еще одно доказательство почему Ваша глупость - глупость ))
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
25.02.2018, 23:17
Avazart, Что не можешь осилить концепцию метакласса поэтому и не видишь нестыковки в том что конструктор открытый? Кстати в плюсах эту ситуацию можно разрулить без метакласса - шаблонным фабричным методом и friend доступом TApplication к закрытому конструктору потомка TForm. И будет работать пока формы не в DLL-ях живут.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2018, 23:17

Несколько ToolBar и работа с ними
Добрый день. Подскажите, пожалуйста, каким образом организовать работу нескольких тулбаров, чтобы они автоматически выравнивались по...

Модальные и не модальные формы. Почему уничтожаются не модальные формы?
Приложение сотоит из нескольких форм. Все они взяимосвязаны мужду собой т.е. обмениваются данными. Для этого я их всех объявляю как...

Формы и работа между ними
Всем привет. Кто подскажет в чём ошибка. Имеем Form1 с label1(в Form1.Designer.cs указал что label1 - public вместо private). Далее на...

Модальные формы
Доброго времени суток! Что это значит? Модальные? Не понятно объясните пожалуйста.

Модальные формы
помогите понять модальные формы? вобщем вот в чем проблема. unit Unit1; interface uses Windows, Messages, SysUtils,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru