![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Childs окна [D6, Win2k]
Explorer © (2002-07-12 15:30:00)Мастера!
Сделал "ручками" форму авторизации(из Бд).
После правильного входа, делаю окно не видимым(Hide), и вызываю
другую форму. Но когда после этого, на нее пытаюсь вывести дочернюю форму, ошибка EInvalidOperation ("не могу открыть форму. MDI форма не активна.)
Скорей всего пытается вывести дочернии формы на форму авторизации.
Подскажите, как решить эту проблемку?
Explorer (2002-07-15 09:08:00) [21]>msts
if ShowModal = mrOK then begin - ругается на эту строку!
Explorer (2002-07-15 08:44:00) [22]>msts
Извини, глупость сморозил!
Explorer (2002-07-15 08:40:00) [23]>msts
А если, я форму "авторизации" делаю сам?
msts (2002-07-15 08:04:00) [24]уточнение :
finally
Free; //ДАЖЕ если произошла ошибка (exception) то уничтожаем TAutoForm
end;
if UserID = uidUser then - можно заменить на case
или
завести пропертю (у TAutoForm)
MainFormClass : TFormClass
и возвращать класс формы который нужно создать
получаем:
if ShowModal = mrOK then
Application.CreateForm(MainFormClass, MainMDIForm);
соответственно выбор и установка MainFormClass осуществляется
в TAutoForm
а вот как у нас... выглядит programm:
program car2;
uses
Forms,
ComServ,
ComObj,
UCSInit,
windows,
car2_TLB in "car2_TLB.pas";
{$R *.TLB}
{$R *.res}
begin
SetServer(ComServer); //Устанавливаем ссылку на comserver
Application.Initialize;
LoadLog; //Загружаем службу журналирования операций
carLog.Init;
LoadWaiter; //Загружаем службу продолжительных операций
carWaiter.Init;
LoadKernel; //Загружаем ядро системы
carApplication.Init;
Application.Run;
carApplication.Done;
carWaiter.Done;
carLog.Done;
end.
когда в программе количество форм достигает 600 то
они и грузятся не так как предлагает борланд по умолчанию
msts (2002-07-15 07:49:00) [25]begin
Application.Initialize;
with TAutoForm.Create(nil) do try // создаем форму авторизации
if ShowModal = mrOK then begin //показываем в модальном режиме и если нажали кнопку ОК
//кинь на TAutoForm 2 кнопки TButton (по стандарту)
// у них есть property ModalResult: TModalResult
// у первой выстави mrOk
// у второй mrCancel
if UserID = uidUser then //проверям проперту UserID - это простой юзер?
//проперту UserID - сделай сам и заполняй соответственно
Application.CreateForm(TUserMainMDIForm, MainMDIForm);
if UserID = uidAdmin then //это админ?
Application.CreateForm(TAdminMainMDIForm, MainMDIForm);
end;
finally
Free; // если произошла ошибка то уничтожаем TAutoForm
end;
Application.Run; //запускаем прогу
//PS: если ни одна форма не была создана то прога завершится
end;
Explorer (2002-07-15 06:37:00) [26]>Johnmen © (12.07.02 16:37)
>Да и при молчании можно попытаться. :)
>У него в файле проекта стоит примерно так :
>Application.CreateForm(TAutoForm, AutoForm);
>Application.CreateForm(TMainMDIForm, MainMDIForm);
>а это не катит, должно быть на первом месте
>Application.CreateForm(TMainMDIForm, MainMDIForm);
>и на момент Application.Run именно она д.б.главной
Но, тогда при запуске проги, первой выводиться "Главная форма".
А нужна форму "авторизации"!
Надо делать "Главную" HIDE? Только так или как по-другому?
Explorer (2002-07-15 06:18:00) [27]А если мне надо, что бы было так:
В зависимости от статуса пользователя (user, admin...)после формы авторизации, запускались разные "Главные" формы?
Skier (2002-07-12 16:42:00) [28]>Johnmen
Всё правильно...
Я ему то же самое написал, просто - "форму авторизации"
можно создавать и так HisForm := THisForm .Create(...).
Но, в общем, твой вариант даже проще...
Johnmen (2002-07-12 16:37:00) [29]Да и при молчании можно попытаться. :)
У него в файле проекта стоит примерно так :
Application.CreateForm(TAutoForm, AutoForm);
Application.CreateForm(TMainMDIForm, MainMDIForm);
а это не катит, должно быть на первом месте
Application.CreateForm(TMainMDIForm, MainMDIForm);
и на момент Application.Run именно она д.б.главной
Skier (2002-07-12 16:19:00) [30]>Johnmen
"Платон мне друг, но истина дороже !" :)))
> , лучше помогите автору !
Он, пока, молчит...
Johnmen (2002-07-12 16:16:00) [31]Ребята, не надо мне прописных истин...Вы меня не поняли...
И чего вы на меня набросились, лучше помогите автору !
Skier (2002-07-12 16:11:00) [32]>Fiend
Прошу прощения, но - Скиер :))
Fiend (2002-07-12 16:09:00) [33]То Johnmen
вот Скаер правильно меня дополнил насчёт МайнФорм
Fiend (2002-07-12 16:07:00) [34]То Johnmen
Можно по разному создавать формы: TForm.Create или Application.CreateForm.
Это разные везчи.
посмотри в исходник самого ДПР и увидишь, что первый вызов Application.CreateForm создаёт именно главное окно программы. т.е. перед этим вызовом ты можешь приспокойненько, создавать сколько угодно "не главных" форм при помощи TForm.Create(Application)
Skier (2002-07-12 16:06:00) [35]>Johnmen
Чтобы задать главную форму нужно просто
задать Application.MainForm, а она задаётся только в
Application.CreateForm т.к. св-во Application.MainForm
только для чтения :(
Johnmen (2002-07-12 16:04:00) [36]>Fiend © (12.07.02 16:00)
>но главная будет другой, которая создастся поздже
Кто и как определит, что она главная ? :)
Skier (2002-07-12 16:03:00) [37]>Fiend
Точно.
Главную форму можно создать только через Application.CreateForm
и только один раз !
Fiend (2002-07-12 16:00:00) [38]То Johnmen
Лабуда это
> .е. она создается первой...
Можно создать хоть двадцать форм при помощи TForm.Create(Application), но главная будет другой, которая создастся поздже
Johnmen (2002-07-12 15:57:00) [39]В MDI приложении м.б. только одна гл.форма, т.е. она создается первой...
Skier (2002-07-12 15:57:00) [40]>Explorer
Если так
Application.CreateForm(TГлавнаяФорма, ГлавнаяФорма);
то замени на - ГлавнаяФорма := TГлавнаяФорма.Create(...)
А уже "другую форму" создавай через Application.CreateForm
Попробуй...