Форум: "Начинающим";
Текущий архив: 2014.09.21;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.002 c