С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30

Изменение формы, являющейся главной

03.02.2010, 22:24. Показов 2593. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо написать программу, напоминающую по своему поведению инсталляторы: рисуется окно, что-то на нём делается, надимается кнопка, это окно закрывается, вылезает другое окно и т.д. На пальцах процесс выглядит как создать экземпляр формы, в какой-то момент по нажатии на кнопку этот экземпляр удалить и создать другой экземпляр формы (другого класса). Но на самом верхнем уровне в WinMain строится код по типу

C++
1
2
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
Здесь я не вижу создание экземпляра формы. Интуитивно догадываюсь, что это где-то в CreateForm, но как там оно выглядит технически - пространственного воображения не хватает. Не пойму, какая точка соотвествует закрытию формы и в каком месте можно создать новую. И как. Думал, что если указанные две строки продублировать, то при закрытии окна появится ещё одно окно. Нифига

Как реализовывается требуемая функциональность. Или хотя бы как это всё правильными словами называется, ибо затрудняюсь даже в поиск что-то вбить
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.02.2010, 22:24
Ответы с готовыми решениями:

Прозрачность формы, при наведении мыши на кнопку реализовать изменение её положения относительно формы с невозможностью выхода за границы формы
доброй ночи, уважаемые программисты, студенты,а также любители программировать. помогите, пожалуйста, написать программу на языке С++ ...

Запуск программы не с главной формы, а со второй формы
Ребята, подскажите пожалуйста как сделать У меня есть одна главная форма Форм1...я хочу чтоб при запуске программы запускалась Форма 2,...

Как начать работу приложения с формы, не являющейся главной
Такая задача. Есть форма Form1, и она считается главной.... Создал другую форму, и тепер хотелось чтобы сначала запускалась та другая форма...

5
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
04.02.2010, 01:06
Почему бы не убрать автосоздание нужных Вам форм и не создавать их динамически?
Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
USEFORM("Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
USEFORM("Unit3.cpp", Form3);
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
            Form1 = new TForm1(NULL);
                Form1->ShowModal();
                delete Form1;
                Form2 = new TForm2(NULL);
                Form2->ShowModal();
                delete Form2;
                Form3 = new TForm3(NULL);
                Form3->ShowModal();
                delete Form3;
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
04.02.2010, 09:58  [ТС]
Цитата Сообщение от Зоти Сергей Посмотреть сообщение
Почему бы не убрать автосоздание нужных Вам форм и не создавать их динамически?
Так не получается. Формы у меня имеют FormStyle=fsMDIForm. Окно создаётся нормально, но при попытке создать в нём дочернее окно вываливается сообщение "Project raised exception class EInvalidOperation with message 'Cannot create form. No MDI forms are currently active". Я так понимаю, тут что-то надо с Application сделать, чтобы указать, что форма, которую мы создали - главная форма проекта?
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
07.08.2011, 21:23
Главной формой приложения является та форма, которая первой будет создана методом CreateForm.
Пока такая форма будет существовать, она будет главной.
Никак по другому ты главную другую форму не сделаешь.

Кстати, как только такая форма будет закрыта, все остальные, последующие формы,
созданные методом CreateForm будут закрыты автоматически.


На самом деле безвыходных ситуаций не бывает. В приложения создаётся TDataModule,
и из под него в его событии OnCreate можно создавать другие формы, но опять же,
вызывать их нужно через ShowModal, так как только модальность закончится, приложение сразу закроется.

Метод CreateForm не просто создаёт форму, он ещё и запускает механизм обмена оконных сообщений.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.08.2011, 22:36
кажись, можно переназначить главную форму в настройках проекта
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.08.2011, 23:38  [ТС]
Цитата Сообщение от Maluda Посмотреть сообщение
На самом деле безвыходных ситуаций не бывает. В приложения создаётся TDataModule,
и из под него в его событии OnCreate можно создавать другие формы, но опять же,
вызывать их нужно через ShowModal, так как только модальность закончится, приложение сразу закроется.
А в инсталляторах как делается? У них одно окно появляется, потом оно пропадает и появляется другое и т.п. Мне вот надо что-то типа такого же

Добавлено через 24 секунды
Цитата Сообщение от LK Посмотреть сообщение
кажись, можно переназначить главную форму в настройках проекта
Мне в run-time надо менять несколько раз, а не просто один раз в настройках проекта установить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.08.2011, 23:38
Помогаю со студенческими работами здесь

Изменение содержания главной формы
Допустим при запуске программы у нас есть вот такое окно: И я хочу сделать чтобы при нажатии menu2 было вот такое: И наоборот при...

Изменение свойств контролов в UserControl из главной формы
Добрый день, Товарищи!!! Допустим у нас есть user control состоящий из текст бокса и лэйбла рядом. Мы его кладем на нашу Form1. ...

Изменение даты, являющейся значением параметра реестра
Здравствуйте, в батниках только разбираюсь подскажите пожалуйста как с помощью батника сделать смещение дат в реестре? Знаю только как...

Изменение элемента главной формы через другой класс
public class Logger { Form1 f = new Form1(); // Работа с событиями public void LogEvent(string...

Изменение размера главной формы приложения на заданное количество пикселей
Разработать приложение, позволяющее увеличивать или уменьшать размер главной формы приложения на заданное количество пикселей


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru