full_lamer |
Отправлено: 11.05.2004, 02:58 |
|
Машинист паровоза
Группа: Участник
Сообщений: 225
|
Доброго времени!
Никто не знает как сменить в приложении главную форму?
|
|
olegenty |
Отправлено: 11.05.2004, 07:06 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
На вкладке Project->Options->Forms сделай форму САМОЙ ВЕРХНЕЙ, и будет тебе счастье
|
|
full_lamer |
Отправлено: 11.05.2004, 08:00 |
|
Машинист паровоза
Группа: Участник
Сообщений: 225
|
очень смешно...
я конечно и полный ламер до такого сам бы не догадался...
меня интересуют программное изменение главной формы, а то после приветствия — MDIChild окна в MDIForm окне перестают запускаться...
|
|
Admin |
Отправлено: 11.05.2004, 08:58 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
QUOTE | а то после приветствия — MDIChild окна в MDIForm окне перестают запускаться |
Ну так olegenty и ответил, значит стоит там в Main Form
эта самая форма приветствия, а надо поставить
в Main Form форму, которая fsMDIForm
|
|
full_lamer |
Отправлено: 11.05.2004, 10:51 |
|
Машинист паровоза
Группа: Участник
Сообщений: 225
|
Я так и делаю... но мне нужно, чтобы вначале запускалось приветсвия, там устанавливались стартовые установки и только после этого запускалась или отображалась (кстати надо попробовать) MDIForm...
|
|
Gedeon |
Отправлено: 11.05.2004, 10:57 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (full_lamer @ 11/05/2004, 11:53) | Я так и делаю... но мне нужно, чтобы вначале запускалось приветсвия, там устанавливались стартовые установки и только после этого запускалась или отображалась (кстати надо попробовать) MDIForm... |
Ну это просто варварство приветствие, да еще и главной формой показывать. Создавайте форму приветствия и начальных настроек динамически, а потом вообще удаляйте ее из памяти.
|
|
olegenty |
Отправлено: 11.05.2004, 11:16 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
делается сие таким образом:
CODE |
try
{
clock_t s, e; // для зависания Splash не менее 3 сек.
s = clock(); // прояли текущее время
fmSplash = new TfmSplash(Application); // родили Splash
fmSplash->Show(); // показали
fmSplash->Update(); // обновили, дабы видно стало
Application->Initialize();
Application->CreateForm(__classid(Tfm), &fm);
e = clock(); // заценили время
while (e — s < 3000)
{
Application->ProcessMessages();
e = clock();
} // цикл ожидания на 3 сек, если 3 сек ещё не прошло
fmSplash->Hide(); // скрыть приветственную форму
delete fmSplash; // и убить нахер
SendMessage(fm->Handle, CM_INIT_COMPLETE, 0, 0); // это я для себя делаю, там доп. инициализация у меня сидит, просто не обрати внимание
Application->Run(); // запуск приложения, которое исправно отобразит главную форму
}
|
|
|
full_lamer |
Отправлено: 11.05.2004, 11:25 |
|
Машинист паровоза
Группа: Участник
Сообщений: 225
|
Спасибо, попробую...
|
|
Gedeon |
Отправлено: 11.05.2004, 11:35 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Хочу еще добавить: Форма приветствия показывается не для того, чтобы показать художественные таланты программиста, а для того, чтобы чем-то развлечь пользователя пока главная форма инициализируется, создает соединения и т.д. В этом случае код будет выглядеть немного по другому и не требуется создание таймера.
CODE |
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
TSplash* SF = new TSplash(Application);
SF->Show();
Application->ProcessMessages();
Application->CreateForm(__classid(TMain), &Main);
SF->Close();
delete SF;
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
|
Но, конечно, для группы проектов можно и просто показывать окошко приветствия, только в этом случае обычно на такую форму кидается таймер с интервалом, например 3 сек., а в его OnTimer{Close();}
|
|
olegenty |
Отправлено: 11.05.2004, 11:40 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
чё-то с OnTimer ты сочиняешь, чё-то, помнится, не работало это нифига, а 3 секунды просто для того, чтобы мельтешения не было, если быстрее загрузится. а то хрень какая-то проскочит — не то заставка, не то глюк. вот такие соображения. да, и не художественные таланты, а имена разработчиков. это нормально, по-моему :-)
|
|
xTrim |
Отправлено: 11.05.2004, 13:26 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
Кстати о Splash-screen. Достали меня как-то вопросами как это сделать и посидел я на тему автоматизации этого дела. И вот вышло что
Кто скачал, поделитесь впечатлениями
Отредактировано xTrim — 16/05/2004, 21:33
|
|
Gedeon |
Отправлено: 11.05.2004, 13:40 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (olegenty @ 11/05/2004, 12:42) | чё-то с OnTimer ты сочиняешь, чё-то, помнится, не работало это нифига |
На свой fmSplash кидаешь компонент TTimer, его свойства Enabled=true, Interval=3000, в событии
CODE |
void __fastcall fmSplash::Timer1Timer(TObject *Sender)
{
Close();
} |
Что тут может не работать?
|
|
olegenty |
Отправлено: 11.05.2004, 14:27 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
помню, что когда-то был глюк. помню, что для этого был у меня спец. компонент — таймер в отдельном потоке, и вот с ним работало. помню, что он заглючил, начиная с 5-го билдера, и помню, что вместо этого я клоки туда воткнул, дабы не разбираться с глюком. (молодой был, было это давно, года 4 назад. вот с тех пор там клоки, а пользователи терпят 3 сек.)
|
|