Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2011, 16:14   #1
chiffa
Пользователь
 
Регистрация: 03.01.2008
Сообщений: 16
По умолчанию MDI окна...

Добрый день всем. Есть три формы:
Авторизация - FrmLn
Основная форма - FrmMain
Форма настроек - FrmSett

Главной формой является FrmLn (что бы стартовала при запуске).

После успешной авторизации загружается форма FrmMain, гружу через FrmMain.ShowModal; которая уже не является главной и со стилем fsMDIForm. Из нее пытаюсь вызвать форму FrmSett со стилем fsMDIChild, выдаю так:

Код:
procedure TFrmMain.N7Click(Sender: TObject);
begin
CreateChildFormSea('Child1');
end;

procedure TFrmMain.CreateChildFormSea (const childName : string);
    var Child: TFrmSett;
begin
  Child := TFrmSett.Create(Application);
  Child.Caption := childName;
end;
в результате получаю ошибку: Cannot create form. No MDI forms are currently Active. Насколько я понял ошибка связана с тем что форма FrmMain создается позже MDI... Подскажите как правильно реализовать описаное выше? Буду признателен за помощь!

Последний раз редактировалось Stilet; 29.04.2011 в 08:42.
chiffa вне форума Ответить с цитированием
Старый 28.04.2011, 22:44   #2
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Сделайте наоборот: главная FrmMain, а логин показывайте из онкриэйт через ShowModal.
eduard93 вне форума Ответить с цитированием
Старый 29.04.2011, 00:59   #3
chiffa
Пользователь
 
Регистрация: 03.01.2008
Сообщений: 16
По умолчанию

Спасибо за ответ! А FrmMain делать Visible:=False, а потом показывать?...

eduard93, сделал так как ты написал - ошибка та же...

Последний раз редактировалось Stilet; 01.05.2011 в 15:24.
chiffa вне форума Ответить с цитированием
Старый 29.04.2011, 22:40   #4
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Project->View source - первой должна создаватся FrmMain.
eduard93 вне форума Ответить с цитированием
Старый 01.05.2011, 13:22   #5
chiffa
Пользователь
 
Регистрация: 03.01.2008
Сообщений: 16
По умолчанию

eduard93, так она первая и создается, но ее же нужно скрыть, перед появление форм для ввода логина и пароля....
chiffa вне форума Ответить с цитированием
Старый 01.05.2011, 14:17   #6
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Тогда там же перед Run допишите: "Application.ShowMainForm := False".
eduard93 вне форума Ответить с цитированием
Старый 01.05.2011, 17:52   #7
Romantik_FM
Пользователь
 
Аватар для Romantik_FM
 
Регистрация: 21.12.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от chiffa Посмотреть сообщение
eduard93, так она первая и создается, но ее же нужно скрыть, перед появление форм для ввода логина и пароля....
в событии onActivate главной формы показывай авторизацию. если она успешна то просто закрыть иначе закрыть главную форму
Не ошибается тот, кто ничего не делает
Romantik_FM вне форума Ответить с цитированием
Старый 03.05.2011, 01:00   #8
chiffa
Пользователь
 
Регистрация: 03.01.2008
Сообщений: 16
По умолчанию

А не затрудник небольшой примерчик прикрепить с 3мя окнами?.... Буду весьма признателен!
chiffa вне форума Ответить с цитированием
Старый 03.05.2011, 23:00   #9
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Примерчик:
Код:
//В dpr:
  Unit1 in 'Unit1.pas' {Form1}, //главная
  Unit2 in 'Unit2.pas' {Form2}; //логин

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.ShowMainForm := False;
  Application.CreateForm(TForm1, Form1);
  //логин-форму убираем, остальные по желанию
  //...
  Application.Run;

//В главном юните:
uses unit2;

procedure TForm1.FormCreate(Sender: TObject);
var
  login: TForm;
begin
  login := TForm2.Create(Self);
  try
    if login.ShowModal = mrOk then //на логин-форме должна
    //лежать кнопка с ModalResult = mrOk
      Application.ShowMainForm := True
    else
      Application.Terminate;
  finally
    login.Free;
  end;
//...
eduard93 вне форума Ответить с цитированием
Старый 06.05.2011, 11:15   #10
chiffa
Пользователь
 
Регистрация: 03.01.2008
Сообщений: 16
По умолчанию

Пасиба за ответ! То что надо! Но почему при создании проекта выдает ошибку
Access violation at address 0043C308 in module Main.exe

ссылаясь на строку login := TFrmAuth.Create(Self); Но если еще раз нажать Ф9, то все запускается и работает

при этом то что стоит в oncreate формы FrmAuth - не выполняется...
chiffa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MDI окна svyatoi777 Общие вопросы Delphi 2 07.01.2011 01:29
Получить имя активного дочернего окна в MDI JeyKip Общие вопросы C/C++ 4 05.12.2010 02:59
TabSET и MDI окна Paskal1 Общие вопросы Delphi 1 11.11.2010 10:24
MDI Окна RIO Общие вопросы .NET 8 06.05.2008 16:06
Как сделать чтобы дочерние окна в MDI-приложениях были вне главного окна??? dimonchuk Общие вопросы Delphi 1 11.08.2007 12:13