Как запустить Form2.ShowModal при старте программы?

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Как запустить Form2.ShowModal при старте программы?

Сообщение DropSoft » 25.04.2017 17:48:25

Еще глупый вопрос.
Мне надо, чтобы при запуске программы появлялось модальное окно Form2, и по закрытию его пользователем выполнялась определенная процедура в Form1.
Логично вызвать его в процедуре из Form1 с помощью Form2.ShowModal. Но если это делать внутри Form1.Create, то на этот момент Form2.Create еще не создано.
Вопрос, как в Form1 отловить момент после старта программы, когда все остальные Form__.Create отработаны, и запустить процедуру, которая выполнит Form2.ShowModal и отработает результат?
DropSoft
новенький
 
Сообщения: 31
Зарегистрирован: 31.03.2013 13:47:40

Re: Как запустить Form2.ShowModal при старте программы?

Сообщение vitaly_l » 25.04.2017 17:57:15

DropSoft писал(а):Вопрос, как в Form1 отловить момент после старта программы, когда все остальные Form__.Create отработаны, и запустить процедуру, которая выполнит Form2.ShowModal и отработает результат?

Можно убрать инициализацию из главного модуля и переместить её в Create перед вызовом ShowModal.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Как запустить Form2.ShowModal при старте программы?

Сообщение java73 » 25.04.2017 18:05:28

Вообще по умолчанию посмотрите код самого проекта (меню проект - просмотреть исходный код проекта), увидите, что на момент открытия главной формы, все остальные уже созданы (если, конечно, сами динамически не создаете формы по ходу выполнения). Так что в тексте самого проекта можно вызвать showmodal любой формы (перед application.run), так, собственно и делают для показа заставок.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Как запустить Form2.ShowModal при старте программы?

Сообщение DropSoft » 25.04.2017 18:32:23

vitaly_l, спасибо
java73, сделал так. Перед application.run вставил вызов процедуры из Form1, которая назначена на кнопочку для показа Form2.ShowModal.
Form1.Button1Click(Sender);
Единственно, вопрос. Эта процедура заявлена как TForm1.Button1Click(Sender: TObject);
Что в качестве "Sender" надо указать, если вызывать ее перед application.run? Просто само слово "Sender" дает ошибку.
DropSoft
новенький
 
Сообщения: 31
Зарегистрирован: 31.03.2013 13:47:40

Re: Как запустить Form2.ShowModal при старте программы?

Сообщение vitaly_l » 25.04.2017 18:43:29

self
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Как запустить Form2.ShowModal при старте программы?

Сообщение java73 » 25.04.2017 18:47:35

или nil если неважно кто вызывает метод
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Как запустить Form2.ShowModal при старте программы?

Сообщение Лекс Айрин » 25.04.2017 18:59:36

предлагаю третий вариант application.
Кстати, можно воспользоваться обходным способом. Form1.Button1.Click; В этом случае Sender заполнит сама программа.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Как запустить Form2.ShowModal при старте программы?

Сообщение java73 » 25.04.2017 19:44:18

Если sender внутри метода не используется, зачем лишнюю ссылку передавать
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Как запустить Form2.ShowModal при старте программы?

Сообщение DropSoft » 25.04.2017 19:49:23

Спасибо!
На self ругается.
nil и Form1.Button1.Click работает.
Проблема решена.
DropSoft
новенький
 
Сообщения: 31
Зарегистрирован: 31.03.2013 13:47:40

Re: Как запустить Form2.ShowModal при старте программы?

Сообщение java73 » 25.04.2017 19:52:27

Потому что application.self, но я все равно за nil

Добавлено спустя 46 секунд:
Есть ли у application вообще self? Из маршрутки и не узнаешь)
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Как запустить Form2.ShowModal при старте программы?

Сообщение Лекс Айрин » 25.04.2017 19:59:59

java73 писал(а):но я все равно за nil


Представляешь, по этим ссылкам иногда переходят... и даже без проверки на ее существование.
java73 писал(а):Есть ли у application вообще self? Из маршрутки и не узнаешь)


Подозреваю, что self это не более чес сахар... директива компрессору, что используется объект вызвавший метод.
А вообще, Self для любого объекта существует. По крайней мере, если он описан через Class.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Как запустить Form2.ShowModal при старте программы?

Сообщение java73 » 26.04.2017 11:42:33

Self is a keyword which can be used in instance methods to refer to the object on which the currently executing method has been invoked.

Так что внутри кода самого проекта не прокатит.

Добавлено спустя 2 минуты 3 секунды:
прокатит передача в качестве параметра самого объекта application видимо. Но это, как я говорил, лишнее скорее всего в данном конкретном случае.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru