Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для DorenskiyAA
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 20

Порядок запуска приложения

22.06.2012, 13:52. Показов 4197. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане, объясните пожалуйста почему конструкторы форм приложения выполняются по порядку:
C++
1
2
3
4
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
….
, а отображение форм (событие FormShow) наступает произвольно, в том числе до наступления
C++
1
Application->Run();
Я по-неопытности думал что FormShow может быть только после Run(). Что тогда значит Run()?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.06.2012, 13:52
Ответы с готовыми решениями:

Как изменить порядок запуска форм в C++ builder
Как изменить порядок запуска форм в C++ builder? К примеру чтобы при запуске программы вместо Form1 запускалась Form2.

Запрет запуска приложения
Люди помогите пожалуйста,нужно запретить запуск определенного приложения допустим *.exe(программно на с++\builder) Заранее блогодарен.

Отслеживание запуска полноэкранного приложения
Требуется отследить запуск полноэкранного приложения. Т.е. при запуске полноэкранного приложения моя программа должна отменять свойство...

28
 Аватар для T2skler
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
22.06.2012, 13:56
Цитата Сообщение от DorenskiyAA Посмотреть сообщение
Уважаемые форумчане, объясните пожалуйста почему конструкторы форм приложения выполняются по порядку:
C++
1
2
3
4
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
….
, а отображение форм (событие FormShow) наступает произвольно, в том числе до наступления
C++
1
Application->Run();
Я по-неопытности думал что FormShow может быть только после Run(). Что тогда значит Run()?
VCL - это обёртка над WinAPI, поэтому как и во всех WinAPI-приложениях необходимо в цикле собирать и обрабатывать сообщения. Метод Run как раз таки запускает этот цикл.
0
 Аватар для DorenskiyAA
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 20
22.06.2012, 13:59  [ТС]
А почему тогда сначала некоторые формы приложения отображаются, а потом происходит Run?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
22.06.2012, 14:10
а почему вы думаете что они отображаются?

Добавлено через 4 минуты
создал проект в котором две формы - 1 и 2. в событиях OnShow прописал выброс сообщения вида
C++
1
MessageBox(0, "Form1", "Form1", MB_OK);
перед Run написал
C++
1
MessageBox(0, "Run", "Run", MB_OK);
в итоге Run / Form1. как делаете вы что бы было наоборот?
0
 Аватар для DorenskiyAA
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 20
22.06.2012, 14:11  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
а почему вы думаете что они отображаются?
Создал проект, добавил две формы, расставил точки останова в конструкторах и событиях FormShow. Конструкторы выполняются по-порядку, а FormShow - до наступления Run. Run происходит когда форма уже видна на экране.
Запускаю пошагово. Причем отображается сначала вторая форма, а после рун - первая.
0
 Аватар для T2skler
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
22.06.2012, 14:14
Цитата Сообщение от DorenskiyAA Посмотреть сообщение
Создал проект, добавил две формы, расставил точки останова в конструкторах и событиях FormShow. Конструкторы выполняются по-порядку, а FormShow - до наступления Run. Run происходит когда форма уже видна на экране.
Запускаю пошагово F8.
Всё логично. Сначала создаётся, а потом регистрируется класс и соответственно появляется формочка, а уже после этого происходит запуск цикла.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
22.06.2012, 14:15
...а вот если убрать вторую форму из списка автоматически создаваемых и создавать ее самому в конструкторе первой формы
C++
1
2
    Form2 = new TForm2(0);
    Form2->Show();
тогда действительно событие выскакивает до Run - причем вторая форма живая - можно все тыкать)
0
 Аватар для DorenskiyAA
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 20
22.06.2012, 14:21  [ТС]
Цитата Сообщение от T2skler Посмотреть сообщение
Всё логично. Сначала создаётся, а потом регистрируется класс и соответственно появляется формочка, а уже после этого происходит запуск цикла.
Да, действительно получается так. Тогда всё понятно. Но почему отображается сначала вторая форма, а не первая? Ее класс регистрируется по логике - после первой.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
22.06.2012, 14:24
но если форма отображается и живет (то есть обрабатывает сообщения) до запуска Run получается что у формы свой Run...
0
 Аватар для T2skler
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
22.06.2012, 14:25
Цитата Сообщение от DorenskiyAA Посмотреть сообщение
тогда почему эта формочка живая?
Формы разные, а приложение одно. Наверно Run запускает сбор сообщений всех форм.
Попробуйте создать проект с двумя формами и отобразите вторую форму. Потоки не прибавляются, следовательно, у всех форм один цикл сбора сообщений.
1
 Аватар для DorenskiyAA
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 20
22.06.2012, 14:39  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
но если форма отображается и живет (то есть обрабатывает сообщения) до запуска Run получается что у формы свой Run..
у меня форма не шевелится, до наступления рун... просто отображается. проверил однако

Добавлено через 8 минут
Цитата Сообщение от T2skler Посмотреть сообщение
следовательно, у всех форм один цикл сбора сообщений
Это понятно, но почему сначала отображается вторая форма, а затем первая, но не наоборот?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
22.06.2012, 14:44
а у меня шевелиться. даже можно в файл вывести содержимое TEdit. думал может быть выброс сообщения не дает нам корректного момента потому как включается в очередь которую потом обрабатывает Run, но тестирование на выводе в файл показало что форма действительно как-то сама живет без Run)
Вложения
Тип файла: rar Новая папка (13).rar (264.2 Кб, 20 просмотров)
0
 Аватар для DorenskiyAA
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 20
22.06.2012, 14:50  [ТС]
Создал три формы, порядок следующий: конструктор 1, конструктор 2, отображение 2, конструктор 3, отображение 3, и только после рун - отображение 1.

Добавлено через 4 минуты
Цитата Сообщение от vxg Посмотреть сообщение
а у меня шевелиться. даже можно в файл вывести содержимое TEdit. думал может быть выброс сообщения не дает нам корректного момента потому как включается в очередь которую потом обрабатывает Run, но тестирование на выводе в файл показало что форма действительно как-то сама живет без Run)
прикольно...действительно шевелится..
0
 Аватар для T2skler
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
22.06.2012, 14:56
Цитата Сообщение от vxg Посмотреть сообщение
а у меня шевелиться. даже можно в файл вывести содержимое TEdit. думал может быть выброс сообщения не дает нам корректного момента потому как включается в очередь которую потом обрабатывает Run, но тестирование на выводе в файл показало что форма действительно как-то сама живет без Run)
Возможно это связано с версией Builder. У вас какая?
0
 Аватар для DorenskiyAA
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 20
22.06.2012, 15:17  [ТС]
У меня шестая версия.

Добавлено через 17 минут
Цитата Сообщение от vxg Посмотреть сообщение
форма действительно как-то сама живет без Run
да, еще возникает вопрос не в тему: а с какой тогда формой работает метод Syncronize в потоках TThread?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
22.06.2012, 15:19
у меня тоже шестая

Добавлено через 1 минуту
Цитата Сообщение от DorenskiyAA Посмотреть сообщение
с какой тогда формой работает метод Syncronize в потоках TThread
не знаю, не пользовался ни разу)
0
 Аватар для T2skler
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
22.06.2012, 15:27
Цитата Сообщение от DorenskiyAA Посмотреть сообщение
У меня шестая версия.

Добавлено через 17 минут
да, еще возникает вопрос не в тему: а с какой тогда формой работает метод Syncronize в потоках TThread?
С какой укажите с такой и будет работать.
0
 Аватар для DorenskiyAA
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 20
22.06.2012, 16:19  [ТС]
Цитата Сообщение от T2skler Посмотреть сообщение
С какой укажите с такой и будет работать.
А где это указывается? В сам метод передается только функция, которую следует синхронизировать..
0
 Аватар для T2skler
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
22.06.2012, 21:14
Цитата Сообщение от DorenskiyAA Посмотреть сообщение
А где это указывается? В сам метод передается только функция, которую следует синхронизировать..
Опишите более подробно, что вы хотите сделать?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
22.06.2012, 22:07
Synchronize() не работает ни с какими формами, он исполняет код в контексте основного потока, приостанавливая на это время исполнение потока, его вызвавшего.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.06.2012, 22:07
Помогаю со студенческими работами здесь

Порядок инициализации ООП-приложения
Есть с не самой простой структурой классов приложение. Необходимо написать нечто в консоль ПЕРЕД инициализацией всего. Но если нужный код...

Передача данных для запуска приложения
Всем привет. у меня такой вопрос... кто может сделать программу смысл такой, имеется файл кпримеру qwerty.exe если его запускаем...

Запрет запуска второй копии приложения
Всем огромный привет!!!!:) Помогите пожалуйста! Как запретить запуск второй копии приложения?

Вывести окно с сообщением во время запуска приложения
Подскажите если не влом. Сам что-то пока не догадался. В приложении в FormCreate запускается некий сравнительно длительный процесс и форма...

Программа для предотвращения запуска определенных процессов во время работы приложения
Доброго времени суток. Я мало знаком с программированием в целом, и мне нужна помощь, может какие конкретные инструкции. Если точнее, то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru