Мне нужно при первом запуске программы выводить окно с настройками
событии OnShow это событие происходит когда форма собирается быть отображенной но все что написано там производится до появления формы на экране так что там надо прописать
FormNastr->ShowModal();
ShowModal()-показывает форму и передает ей управление, причем форма из которой она вызвана остается недоступной о закрытия той формы которая была вызвана этой функцией...
там еще много интересных нюансов но это главное)
Тебе нужно прописать все это не в onActivate а в
событии OnShow это событие происходит когда форма собирается быть отображенной но все что написано там производится до появления формы на экране так что там надо прописать
FormNastr->ShowModal();
ShowModal()-показывает форму и передает ей управление, причем форма из которой она вызвана остается недоступной о закрытия той формы которая была вызвана этой функцией...
там еще много интересных нюансов но это главное)
Это не подходит так как опять же к этому времени форма с настройками еще не создано, а OnShow происходит в конструкторе первой формы
Это не подходит так как опять же к этому времени форма с настройками еще не создано, а OnShow происходит в конструкторе первой формы
ОnShow происходит несколько позже конструктора, и даже позже OnCreate, если что.
Кроме того, совсем незачем ждать когда тебе создадут форму с настройками. Создай ее сам, когда нужно, хоть в OnShow, хоть в OnCreate, хоть в конструкторе, покажи, и уничтожь пока никто не заметил :-) - незачем в памяти лишнюю форму держать
ОnShow происходит несколько позже конструктора, и даже позже OnCreate, если что.
Кроме того, совсем незачем ждать когда тебе создадут форму с настройками. Создай ее сам, когда нужно, хоть в OnShow, хоть в OnCreate, хоть в конструкторе, покажи, и уничтожь пока никто не заметил :-) - незачем в памяти лишнюю форму держать
Странно но в моей программе последовательность выполнения такая
вызываеть метод CreateForm в нем происходят события OnActivate и
OnShow естесвенно в это время Form2 еще не создано. А если всавляешь
создание второй формы она стоновиться главной.
Хотя в тестовой програмке все нормально вызываем CreateForm потом метод
Run и в нем происходят события OnActivate и OnShow.:(
//главный модуль
try
{
Application->Initialize();
Application->CreateForm(__classid(TwndClientDocMainForm), &wndClientDocMainForm);
Application->Run();
}
//модуль главной формы
void __fastcall TwndClientDocMainForm::FormCreate(TObject *Sender)
{
//создается и выводится форма запроса пароля
//в это время главная форма еще не видна на экране
TwndEnter *wndEnter = new TwndEnter(Handle);
wndEnter->ShowModal();
int Enter = wndEnter->Tag;
wndEnter->Free();
if(!Enter)
{
Application->Terminate();
return;
}
}
//---------------------------------------------------------------------------
Вот пример:
//главный модуль
try
{
Application->Initialize();
Application->CreateForm(__classid(TwndClientDocMainForm), &wndClientDocMainForm);
Application->Run();
}
//модуль главной формы
void __fastcall TwndClientDocMainForm::FormCreate(TObject *Sender)
{
//создается и выводится форма запроса пароля
//в это время главная форма еще не видна на экране
TwndEnter *wndEnter = new TwndEnter(Handle);
wndEnter->ShowModal();
int Enter = wndEnter->Tag;
wndEnter->Free();
if(!Enter)
{
Application->Terminate();
return;
}
}
//---------------------------------------------------------------------------
Это с какого билдера я пишу в 5 и у меня вообще нет классов TwndClientDocMainForm и TwndEnter
Это с какого билдера я пишу в 5 и у меня вообще нет классов TwndClientDocMainForm и TwndEnter
А ты хочешь чтобы все называли свои формы Form1, Form2, Form3... :-)
называй их как хочешь, я свои так назвал :-))
Вопрос исчерпран пойду обходным путем тот способ который вы предложили мне неподходит так как в событиях OnCreate OnShow OnActivate Форма с настройками еще не создана, а если ее создавать самому она становиться главной формой (я сам не знаю почему) Спосибо всем кто ответил!
TfrmMenuLoading *MLoad = new TfrmMenuLoading(this);
MLoad->ShowModal();
delete MLoad;
А форма TfrmMenuLoading как раз и занимается загрузкой меню для главной формы из БД и все работает без проблем, ив 5 и в 6 билдере.
У меня в FormCreate главной формы есть следующий код:
TfrmMenuLoading *MLoad = new TfrmMenuLoading(this);
MLoad->ShowModal();
delete MLoad;
А форма TfrmMenuLoading как раз и занимается загрузкой меню для главной формы из БД и все работает без проблем, ив 5 и в 6 билдере.
Вроде помогло спосибо :)