Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.03.2018, 20:23
Ekler1 Ekler1 вне форума
Новичок
 
Регистрация: 12.06.2017
Сообщения: 90
Версия Delphi: RAD Studio XE7
Репутация: 10
По умолчанию Прошу помощи в MDI формах

Итак есть три формы MDIForm - fm1, MDIChild - fm2
на fm3 находится авторизация, как сделать чтоб она появлялась перед fm1 и надо ли в fm3 FormStyle ставить свойство MDIchild?
Ответить с цитированием
  #2  
Старый 03.03.2018, 23:23
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Ekler1
...как сделать чтоб она появлялась перед fm1...
Можно сделать так: в dpr-файле должно быть
Код:
...
begin
  Application.ShowMainForm:= false;
  Application.Initialize;
  Application.CreateForm(Tfm1, fm1);
  Application.CreateForm(Tfm2, fm2);
  Application.CreateForm(Tfm3, fm3);
  Application.Run;
end.
Формы с параметрами:
fm1 > FormStyle = fsMDIForm, Visible = false
fm2 > FormStyle = fsMDIChild
fm3 > FormStyle = fsNormal

сперва появится fm3, но здесь может быть косяк - если её закрыть (она не главная), сборка останется висеть запущенной, нужно за этим следить
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Ekler1 (05.03.2018)
  #3  
Старый 04.03.2018, 13:18
Ekler1 Ekler1 вне форума
Новичок
 
Регистрация: 12.06.2017
Сообщения: 90
Версия Delphi: RAD Studio XE7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Можно сделать так: в dpr-файле должно быть
Код:
...
begin
  Application.ShowMainForm:= false;
  Application.Initialize;
  Application.CreateForm(Tfm1, fm1);
  Application.CreateForm(Tfm2, fm2);
  Application.CreateForm(Tfm3, fm3);
  Application.Run;
end.
Формы с параметрами:
fm1 > FormStyle = fsMDIForm, Visible = false
fm2 > FormStyle = fsMDIChild
fm3 > FormStyle = fsNormal

сперва появится fm3, но здесь может быть косяк - если её закрыть (она не главная), сборка останется висеть запущенной, нужно за этим следить
[dcc32 Fatal Error] F2039 Could not create output file '.\Win32\Debug\FreeOrder.exe'
Не хочет... Ошибка вылетает.
Ответить с цитированием
  #4  
Старый 04.03.2018, 19:25
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Ekler1
[dcc32 Fatal Error] F2039..Не хочет... Ошибка вылетает.
Ну вот же, висит уже сборка в процессах, следует её закрыть предварительно
Ответить с цитированием
  #5  
Старый 04.03.2018, 21:59
Ekler1 Ekler1 вне форума
Новичок
 
Регистрация: 12.06.2017
Сообщения: 90
Версия Delphi: RAD Studio XE7
Репутация: 10
По умолчанию

Да не заметил(
Но все равно не работает, если я ставлю fm1 Visible = false То после запуска приложение просто в процессах повисает и все( почему так?
Ответить с цитированием
  #6  
Старый 04.03.2018, 22:12
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Ekler1
... почему так?
Видимо fm3 (авторизация) тоже скрыта от глаз, проверьте видимость
Ответить с цитированием
  #7  
Старый 04.03.2018, 22:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да проще все.
В файле проекта делам так:
Код:
begin
  Application.Initialize;

  fm3 := Tfm3.Create(Nil);
  Try
    if frm.ShowModal <> mrOK Then Halt(1);
  Finally
    fm2.Free;
  End;
  Application.CreateForm(Tfm1, fm1);
  Application.CreateForm(Tfm2, fm2);
  Application.Run;
end.

Соответсенно, если авторизация прошла, то форма должна вернуть mrOK. Например так:
Код:
procedure Tfm2.Button1Click(Sender: TObject);
begin
  If (Edit1.Text = 'user' and Edit2.Text = 'pwd') // тут проверка авторизации, для простоты просто сравнил с константами
    Then ModalResult := mrOK
    Else  
      Begin
        ShowMessage('Непрвильные логин/пароль.');
        ModalResult := mrCancel;
     End;
end;

PS. Еще можно "воткнуться" в OnCreate главной формы и в случае неправильной авторизации закрывть приложение через Halt();

Последний раз редактировалось lmikle, 04.03.2018 в 22:15.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Ekler1 (05.03.2018)
  #8  
Старый 05.03.2018, 14:27
Ekler1 Ekler1 вне форума
Новичок
 
Регистрация: 12.06.2017
Сообщения: 90
Версия Delphi: RAD Studio XE7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Да проще все.
В файле проекта делам так:
Код:
begin
  Application.Initialize;

  fm3 := Tfm3.Create(Nil);
  Try
    if frm.ShowModal <> mrOK Then Halt(1);
  Finally
    fm2.Free;
  End;
  Application.CreateForm(Tfm1, fm1);
  Application.CreateForm(Tfm2, fm2);
  Application.Run;
end.

Соответсенно, если авторизация прошла, то форма должна вернуть mrOK. Например так:
Код:
procedure Tfm2.Button1Click(Sender: TObject);
begin
  If (Edit1.Text = 'user' and Edit2.Text = 'pwd') // тут проверка авторизации, для простоты просто сравнил с константами
    Then ModalResult := mrOK
    Else  
      Begin
        ShowMessage('Непрвильные логин/пароль.');
        ModalResult := mrCancel;
     End;
end;

PS. Еще можно "воткнуться" в OnCreate главной формы и в случае неправильной авторизации закрывть приложение через Halt();

Код:
if frm.ShowModal <> mrOK Then Halt(1);
Ругается на mrOK
Ответить с цитированием
  #9  
Старый 05.03.2018, 17:32
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Цитата:
Сообщение от Ekler1
Код:
if frm.ShowModal <> mrOK Then Halt(1);
Ругается на mrOK
Controls.TModalResult
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение:
Ekler1 (05.03.2018)
  #10  
Старый 05.03.2018, 22:21
Ekler1 Ekler1 вне форума
Новичок
 
Регистрация: 12.06.2017
Сообщения: 90
Версия Delphi: RAD Studio XE7
Репутация: 10
По умолчанию

Всем спасибо, разобрался!!!

Последний раз редактировалось Ekler1, 05.03.2018 в 23:00.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter