2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 190
|
||||||
1 | ||||||
Инициализация и первый запуск программы02.11.2023, 10:14. Показов 428. Ответов 9
Метки нет (Все метки)
Подскажите пожалуйста по некоторым вопросам.
Имеется вот такой код-последовательность запуска Unitov 1. Я так понял CreateForm который идет первым после Application.Initialize; считается главной формой? Пробовал менять местами формы в результате получаю что появляються другие формы, даже те что скрыты перваночально и при их закрытии закрывается приложение.
Проблема получается потому что FormAuthorization еще не была создана, события FormAuthorization.OnCreate - еще не было. Соответвенно я пробовал Application.CreateForm(TFormAuthorization, FormAuthorization); поставить выше Application.CreateForm(TFormMain, FormMain); но получил то что при закрытии формы авторизации закрывается вся программа. Конечно можно FormAuthorization.ShowModal; убрать из события показа основной формы и оставить только по клику в главном меню. Но хотелось бы все же при первом запуске сразу пользователю предложить авторизоваться, чтобы он не лез в меню.
0
|
02.11.2023, 10:14 | |
Ответы с готовыми решениями:
9
Первый запуск программы. Первый запуск программы с БД Первый запуск программы Первый запуск программы |
Модератор
3756 / 2260 / 782
Регистрация: 15.11.2015
Сообщений: 8,991
|
|
02.11.2023, 10:30 | 2 |
Да.
Нет. Сначала идёт создание всех форм, затем показ главной и тех, у которых Visible = true. То есть, на событии TFormMain.FormShow(Sender: TObject); формы уже созданы.
0
|
Злостный нарушитель
9593 / 5189 / 1182
Регистрация: 12.03.2015
Сообщений: 24,507
|
||||||
02.11.2023, 11:07 | 4 | |||||
Авторизацию оформи в виде функции в модуле Unit2.pas вот так примерно:
1
|
541 / 241 / 27
Регистрация: 05.05.2022
Сообщений: 1,571
|
||||||
02.11.2023, 11:09 | 5 | |||||
Срабатывает каждый раз при отображении, например, при развороте свернутого окна. Туда что-то писать хорошо для модальных окон, которые закрываются с 2 результатами OK\отмена.
Можно окно логина или сплеш-скрин из дата-модуля показать, но потом убить. Я так делаю, т. к. у меня для коннекта к базе отображается небольшой сплеш-скрин, просто для информативности и эстетики, а потом в функции коннекта и уничтожается.
0
|
02.11.2023, 11:22 | 6 |
0
|
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 190
|
||||||||||||||||
02.11.2023, 14:12 [ТС] | 7 | |||||||||||||||
Насчет всего того массива информации что мне тут показали, я почитаю, особенно про возврат всей инфы из окон и обработку в основной форме, но это наверное уже в другой версии программы, надо ходя бы эту до ума довести, чтобы хоть как то функциклировала.
У меня сейчас данные изменяються или добавляються в БД по нажатию кнопки "Добавить" в форме добавления сотрудника. Это несколько разгружает код основной формы т.к. весь код по обработки введенных данных и занесением его в БД находиться в тех окнах что были открыты для этого действия. Я проверял ставя ShowMesage в событиях показа и создания форм. Проверил еще раз. Вот текущая последовательность.
Но по факту показано 2 потом ошибка, потом жмем продолжить, получаем сообщение 1. Тоже самое было когда я пытался при событии показа основной формы показать форму авторизации, если проставить ShowMessage то тоже можно убедиться что событие создание формы авторизации произойдет после показа основной формы.
0
|
541 / 241 / 27
Регистрация: 05.05.2022
Сообщений: 1,571
|
||||||
02.11.2023, 14:34 | 8 | |||||
Я тоже так делаю. По простому шаблону. В onShow формы редактирования отрабатывает Insert или Edit, кнопка OK вызывает функцию Save с нужным набором возможных возвратов, в ней Post, кнопка Отмены Close. В onFormClose DataSet.Cancel
В public поля формы главная форма писать может. Схема видимости. fmMain<->DataModule (взаимная видимость нужна иногда, либо надо из него убирать всё, что может дергать UI главной формы, например, отобразить на главной форме, число записей БД, после операции с датасетом но тогда смысл дата-модуля во многом пропадает) Common.pas видят все, кому надо, он никого, DataModule видят все, кому надо работать с БД, fmMain, как вызывающая прочие формы, видит их все, они ее не видят. Остальные .pas, если они есть, видны только тем, кому положено. В главной форме акшены редактирования могут выглядеть как-то так:
0
|
Модератор
3756 / 2260 / 782
Регистрация: 15.11.2015
Сообщений: 8,991
|
|
02.11.2023, 14:36 | 9 |
Сделай у главной формы Visible = false и попробуй.
Проверка порядка событий
Беру 2 формы. Form1 главная. У Form1.Visible = false;, а у Form2.Visible = true;. Тогда, события идут так:
Form1 Create Form2 Create Form2 Show Form1 Show. Теперь у обоих форм Visible = true. Тогда события идут так: Form1 Create Form1 Show Form2 Create Form2 Show.
0
|
пофигист широкого профиля
4753 / 3190 / 860
Регистрация: 15.07.2013
Сообщений: 18,475
|
|
02.11.2023, 14:38 | 10 |
1
|
02.11.2023, 14:38 | |
02.11.2023, 14:38 | |
Помогаю со студенческими работами здесь
10
Запуск программы без создания окна. Запуск фоновой программы Инициализация и запуск операционной системы. Запуск студией и запуск самой виндой. Разница работы программы Инициализация программы Первый запуск. Первый запуск Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |