Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1392109474
Novicer
2014-02-11 13:04
2014.09.21
Как узнать количество записей в таблице?


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


2-1382260841
dis12345
2013-10-20 13:20
2014.09.21
предопределенные константы в DrawFrameControl


2-1382012973
Андрей Темкин
2013-10-17 16:29
2014.09.21
Сколько строк можно загрузить в TStringList?


15-1390926828
Rouse_
2014-01-28 20:33
2014.09.21
Голосование на знак "Мастер Delphi"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский