Это отвечает на то, что я считаю реальной проблемой, как стало видно из ваших комментариев. Вы должны отредактировать вопрос, чтобы включить те детали, которые на данный момент появляются только в комментариях.
Похоже, вы пытаетесь запустить процедуру при создании формы. Как я уже объяснял выше, в главной нити ничего хорошего не ждет. Вещь, которую вы ждете, также запускается в основном потоке. Вы просто заблокируете навсегда.
Поэтому я не буду пытаться объяснить, как подождать, как вы просили, потому что это никогда не сработает. Это не решение вашей реальной проблемы.
Поскольку я понимаю вашу проблему, исходя из ваших последних вопросов, вы пытаетесь получить доступ к Application.MainForm
в конструкторе указанной формы, а свойство MainForm
еще не было инициализировано. Причина, по которой вы это делаете, - это то, что вы хотите пройти все компоненты, принадлежащие Application
.
Или вы хотите использовать глобальную переменную Form1
, которая составляет nil
во время создания формы. Но вам было бы желательно удалить эту глобальную переменную Form1
в любом случае. Глобальные переменные, как правило, вызывают проблемы. Поскольку вы находитесь внутри метода вашей формы, в обработчике метода для OnCreate
вы можете получить доступ к форме, используя Self
. Всегда используйте Self
, если это возможно.
Но это неправильный способ решить проблему в любом случае. Он отрицает существование форм, созданных после запуска вашей программы. Вы должны делать то, что вам нужно делать, по требованию, когда создается какая-либо форма.
Это, как я бы решить вашу проблему:
- Объявите новую форму, полученную из
TForm
, называемой, например, TMyBaseForm
.
- Процедура
AfterConstruction
, с директивой override
.
- Внесите
TMyBaseForm.AfterConstruction
, чтобы позвонить, используя ваш код. На этом этапе существует все время контроля времени разработки и потоки данных.
- Убедитесь, что все формы в вашем приложении получены от
TMyBaseForm
.
Этот проект дает вам возможность применять последовательное поведение по всем элементам GUI в вашей программе.
Последний комментарий. Вы, кажется, относительно неопытные и начинающие. Все в порядке, мы все были там один раз.Но вы будете более успешными, если вы зададите вопросы о вашей проблемах, а не о вашем предложении решение.
Что вы на самом деле пытаетесь сделать? Я уверен, что ждать не будет. Вы должны понимать, что весь ваш код работает в одном потоке (я полагаю). И вы не можете ждать от себя. –
Кажется, вы пытаетесь получить доступ к классу, а не к экземпляру? Класс называется TForm1, переменная экземпляра называется Form1? Вы не можете использовать Assigned в классе? – whosrdaddy
'while not Assigned (Form1) do Sleep (100)' тоже не поможет. Это цикл, который никогда не заканчивается. Я призываю вас объяснить настоящую проблему. –