Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.09.21;
Скачать: CL | DM;

Вниз

Login Form   Найти похожие ветки 

 
Алексей1   (2013-10-15 17:56) [0]

Подскажите как правильно организовать структуру приложения с формой ввода пароля, а точнее как правильно вызвать из LoginForm->MainForm,
а из MainForm закрыть LoginForm.

Приложение инициализуруется так:

........................................
{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TLoginForm, LoginForm);
 Application.CreateForm(TMainForm, MainForm);


 
Необычный Порошшок   (2013-10-15 19:51) [1]

1. формы не вызываются. вызываются функции.
2. не главную из логин, а логин из главной.


 
Германн ©   (2013-10-15 20:31) [2]

TApplication.CreateForm не единственный способ создать форму. Но для данной задачи самый непригодный.


 
Inovet ©   (2013-10-15 22:57) [3]

> [2] Германн ©   (15.10.13 20:31)
> Но

И


 
KilkennyCat ©   (2013-10-15 23:03) [4]

почему непригодный? кроме излишней ресурсоемкости никаких проблем нет, а кто ша считает байты?


 
все арамисы, а я Дартаньян   (2013-10-15 23:07) [5]

if TLoginForm.Execute then
  Application.CreateForm(TMainForm, MainForm);


 
Германн ©   (2013-10-15 23:57) [6]


> KilkennyCat ©   (15.10.13 23:03) [4]
>
> почему непригодный?

Потому что самый первый вызов именно этого метода определяет главную форму приложения.


 
KilkennyCat ©   (2013-10-16 00:15) [7]


>  самый первый вызов именно этого метода определяет главную
> форму приложения.

и? пусть определяет главную форму. что здесь плохого-то - нашему приложению ведь нужна главная форма.


 
KilkennyCat ©   (2013-10-16 00:17) [8]


> if TLoginForm.Execute then
>   Application.CreateForm(TMainForm, MainForm);

то же неплохо. если запустили, то уж запустили, а если не запустили, то оно и ненадо.


 
Германн ©   (2013-10-16 00:25) [9]


> KilkennyCat ©   (16.10.13 00:15) [7]
>
>
> >  самый первый вызов именно этого метода определяет главную
> > форму приложения.
>
> и? пусть определяет главную форму. что здесь плохого-то
> - нашему приложению ведь нужна главная форма.

Так вот пусть этим методом и создают главную форму, а форму логина другим.


 
ухты   (2013-10-16 00:40) [10]


> Потому что самый первый вызов именно этого метода определяет
> главную форму приложения.
с каких пор?


 
[ВладОшин] ©   (2013-10-16 00:51) [11]

с тех, как написали Application.CreateForm

procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
var
 Instance: TComponent;
begin
 Instance := TComponent(InstanceClass.NewInstance);
 TComponent(Reference) := Instance;
 try
   Instance.Create(Self);
 except
   TComponent(Reference) := nil;
   raise;
 end;
 if (FMainForm = nil) and (Instance is TForm) then
 begin
   TForm(Instance).HandleNeeded;
   FMainForm := TForm(Instance);
 end;
end;

--------
по сабжу, как вариант

var
 F: TForm2;
begin
 Application.Initialize;
 F := TForm2.Create(Application);
 F.ShowModal;
 if F.MyResult = SomeResult then
 begin
   Application.CreateForm(TForm1, Form1);
   Application.Run;
 end else
  Application.Terminate;
end.


 
ухты   (2013-10-16 01:23) [12]

а если в свойствах проекта выставить главной одну, а потом в дпр Application.CreateForm с ней перенести ниже и запустить то что произойдет?


 
Германн ©   (2013-10-16 02:28) [13]


> ухты   (16.10.13 01:23) [12]
>
> а если в свойствах проекта выставить главной одну, а потом
> в дпр Application.CreateForm с ней перенести ниже

А что по-твоему происходит когда в свойствах проекта выставляют некую форму главной? Отвечаю. Application.CreateForm с ней перемещается в дпр на верхнюю строчку в списке. А что происходит со свойствами проекта когда мы в файле дпр перемещаем Application.CreateForm с некоей формой на верхнюю строчку? Отвечать надо или сам догадаешься? :)


 
все арамисы, а я Дартаньян   (2013-10-16 08:35) [14]


> если запустили, то уж запустили, а если не запустили, то
> оно и ненадо.
Не совсѣмъ увѣренъ, былъ ли это сарказмъ, но на всякій случай поясню:
class function TLoginForm.Execute: Boolean;
var
 Form: TLoginForm;
begin
 Form := TLoginForm.Create(Application);
 try
   Result := Form.ShowModal = mrOK;
 finally
   FreeAndNil(Form);
 end;
end;


 
ухты   (2013-10-16 09:11) [15]


> Германн ©   (16.10.13 02:28) [13]
вы пробовали то что я написал или просто так фантазируете?


 
[ВладОшин] ©   (2013-10-16 10:07) [16]


ухты
> пробовали то что я написал


а смысл?
После:
if (FMainForm = nil) and (Instance is TForm) then
begin
  TForm(Instance).HandleNeeded;
  FMainForm := TForm(Instance);
end;
все равно главной будет та, для которой первой вызовется TApplication.CreateForm.

Если только хакнуть по "советам" Алексеева -
http://www.transl-gunsmoker.ru/2010/07/5-private.html


 
SergP ©   (2013-10-16 11:24) [17]

Я когда-то делал так:
program MyProgram;

uses
 Forms,
 controls,
 main in "main.pas" {FrmMain},
 login in "login.pas" {FrmLogin},

...

begin
 Application.Initialize;
 Application.Title:="Login Form";
 with TFrmLogin.Create(Application) do
 if ShowModal = mrOk then
 begin
   Application.CreateForm(TFrmMain, FrmMain);
   Application.Run;
 end;
end.


 
SergP ©   (2013-10-16 11:26) [18]

А, ну да... непрочитал полностью ветку...


> [ВладОшин] ©   (16.10.13 00:51) [11]

уже такое предлагал


 
Германн ©   (2013-10-16 12:25) [19]


> ухты   (16.10.13 09:11) [15]
>
>
> > Германн ©   (16.10.13 02:28) [13]
> вы пробовали то что я написал или просто так фантазируете?
>

Я что похож на фантазера? :)


 
ухты   (2013-10-16 18:59) [20]


> Я что похож на фантазера?
судя по всему - да


 
Германн ©   (2013-10-16 22:01) [21]


> ухты   (16.10.13 18:59) [20]
>
>
> > Я что похож на фантазера?
> судя по всему - да
>

Тогда скажи в чем я не прав? И по чему именно ты судишь?


 
Dennis I. Komarov ©   (2013-10-18 19:23) [22]

Я логон в отдельную библиотеку вынес, но это актуально когда разные приложения цепляются к одной базе... (к примеру)
Да и если что - одну dll-ку заменить

P.S.
 По-хорошему, форма должна возвращать не пароль, а его хэш, но тут уже от логики...



Страницы: 1 вся ветка

Текущий архив: 2014.09.21;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.009 c
15-1392299840
alex_
2014-02-13 17:57
2014.09.21
задача на С++


15-1392553681
Разведка
2014-02-16 16:28
2014.09.21
как свернуть все процедуры и функции


2-1382028464
Евгений07
2013-10-17 20:47
2014.09.21
Ошибка компиляции функций виндовс


15-1392449558
Мистер Хэ
2014-02-15 11:32
2014.09.21
Какой тип символов в ShortString?


2-1382127402
SergP
2013-10-19 00:16
2014.09.21
Вопрос по синхронизации потоков.