Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Login Form [D7]


Страницы:   1 2

Алексей1 ©   (2013-10-15 17:56:00) 

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

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

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

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


Dennis I. Komarov   (2013-10-18 19:23:00) [1]

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

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


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


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

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


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


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


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


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

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


SergP   (2013-10-16 11:26:00) [5]

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


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

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


SergP   (2013-10-16 11:24:00) [6]

Я когда-то делал так:
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.


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


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


а смысл?
После:
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


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


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


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


> если запустили, то уж запустили, а если не запустили, то
> оно и ненадо.
Не совсѣмъ увѣренъ, былъ ли это сарказмъ, но на всякій случай поясню:
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 02:28:00) [10]


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

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


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

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


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

с тех, как написали 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 00:40:00) [13]


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


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


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

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


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


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

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


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


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

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


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


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

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


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

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


KilkennyCat   (2013-10-15 23:03:00) [19]

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


Inovet   (2013-10-15 22:57:00) [20]

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

И


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо