C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Главная форма
full_lamer
Отправлено: 11.05.2004, 02:58


Машинист паровоза

Группа: Участник
Сообщений: 225



Доброго времени!
Никто не знает как сменить в приложении главную форму?
olegenty
Отправлено: 11.05.2004, 07:06


Ветеран

Группа: Модератор
Сообщений: 2412



На вкладке Project->Options->Forms сделай форму САМОЙ ВЕРХНЕЙ, и будет тебе счастье smile.gif
full_lamer
Отправлено: 11.05.2004, 08:00


Машинист паровоза

Группа: Участник
Сообщений: 225



очень смешно... wink.gif
я конечно и полный ламер до такого сам бы не догадался... wink.gif
меня интересуют программное изменение главной формы, а то после приветствия — 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. Достали меня как-то вопросами как это сделать и посидел я на тему автоматизации этого дела. И вот вышло что biggrin.gif

Кто скачал, поделитесь впечатлениями wink.gif

Отредактировано xTrim — 16/05/2004, 21:33

User Attached Image Скачать файл
SplashTest_xTrim__040511_163248_.zip


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 сек.)

Вернуться в Вопросы программирования в C++Builder