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

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

22.06.2012, 13:52. Показов 4225. Ответов 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,460
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,460
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,460
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,460
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,460
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
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru