Страница 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 видимо. Но это, как я говорил, лишнее скорее всего в данном конкретном случае.