![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Login Form [D7]
Алексей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)
> Но
И