Страница 1 из 1

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

СообщениеДобавлено: 25.04.2017 17:48:25
DropSoft
Еще глупый вопрос.
Мне надо, чтобы при запуске программы появлялось модальное окно Form2, и по закрытию его пользователем выполнялась определенная процедура в Form1.
Логично вызвать его в процедуре из Form1 с помощью Form2.ShowModal. Но если это делать внутри Form1.Create, то на этот момент Form2.Create еще не создано.
Вопрос, как в Form1 отловить момент после старта программы, когда все остальные Form__.Create отработаны, и запустить процедуру, которая выполнит Form2.ShowModal и отработает результат?

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

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

Можно убрать инициализацию из главного модуля и переместить её в Create перед вызовом ShowModal.

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

СообщениеДобавлено: 25.04.2017 18:05:28
java73
Вообще по умолчанию посмотрите код самого проекта (меню проект - просмотреть исходный код проекта), увидите, что на момент открытия главной формы, все остальные уже созданы (если, конечно, сами динамически не создаете формы по ходу выполнения). Так что в тексте самого проекта можно вызвать showmodal любой формы (перед application.run), так, собственно и делают для показа заставок.

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

СообщениеДобавлено: 25.04.2017 18:32:23
DropSoft
vitaly_l, спасибо
java73, сделал так. Перед application.run вставил вызов процедуры из Form1, которая назначена на кнопочку для показа Form2.ShowModal.
Form1.Button1Click(Sender);
Единственно, вопрос. Эта процедура заявлена как TForm1.Button1Click(Sender: TObject);
Что в качестве "Sender" надо указать, если вызывать ее перед application.run? Просто само слово "Sender" дает ошибку.

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

СообщениеДобавлено: 25.04.2017 18:43:29
vitaly_l
self

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

СообщениеДобавлено: 25.04.2017 18:47:35
java73
или nil если неважно кто вызывает метод

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

СообщениеДобавлено: 25.04.2017 18:59:36
Лекс Айрин
предлагаю третий вариант application.
Кстати, можно воспользоваться обходным способом. Form1.Button1.Click; В этом случае Sender заполнит сама программа.

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

СообщениеДобавлено: 25.04.2017 19:44:18
java73
Если sender внутри метода не используется, зачем лишнюю ссылку передавать

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

СообщениеДобавлено: 25.04.2017 19:49:23
DropSoft
Спасибо!
На self ругается.
nil и Form1.Button1.Click работает.
Проблема решена.

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

СообщениеДобавлено: 25.04.2017 19:52:27
java73
Потому что application.self, но я все равно за nil

Добавлено спустя 46 секунд:
Есть ли у application вообще self? Из маршрутки и не узнаешь)

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

СообщениеДобавлено: 25.04.2017 19:59:59
Лекс Айрин
java73 писал(а):но я все равно за nil


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


Подозреваю, что self это не более чес сахар... директива компрессору, что используется объект вызвавший метод.
А вообще, Self для любого объекта существует. По крайней мере, если он описан через Class.

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

СообщениеДобавлено: 26.04.2017 11:42:33
java73
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 видимо. Но это, как я говорил, лишнее скорее всего в данном конкретном случае.