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

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

Как закрыть программу в окне авторизации? [D7, XP]


Страницы:   1 2

ixen ©   (2010-06-15 17:15:00) 

Здравствуйте! В своей программе у меня сначала выходит окно авторизации пользователя и кнопки okи отмена. если Пользователь нажимает отмена. То я закрываю программу в процедре CreateFormглавной формы при помощи application.Terminate;. При этом заметно, что главная форма создается и тут же закрывается, т.е. заметно некое мелькание формы. Как закрыть программу без этого мелькания?Форма авторизации создается динамически и вызывается в процедуре CreateFormглавной формы. Конечно можно сделать авторизацию в разделе Programдо вызова создания главной формы, но у меня компоненты базы данных лежат на главной форме и поэтому я весь код авторизации поместил в CreateFormглавной формы. А сейчас переносить все из главной формы в data moduleне хочется, хотя придется.. если по другому не получится...


Юрий Зотов   (2010-06-15 18:54:00) [21]

Зачем создавать главную форму, если она не будет нужна? Это только потери времени, и нередко немаленькие.

Делаем TLoginForm, в AutoCreate не включаем. В DPR пишем:

begin
 Application.Initialize;
 with TLoginForm.Create(nil) do
 try
   if ShowModal <> mrOk then // авторизация не пройдена
     Exit
 finally
   Free
 end;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


KilkennyCat   (2010-06-15 18:37:00) [22]

application.run не должен выполняться, тогда и форма не мигнет.

program Project;

uses
 Forms,
 main in 'main.pas' {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.MainFormOnTaskbar := True;
 Application.CreateForm(TForm1, Form1);
 if Form1.FCanrun then Application.Run else Application.Terminate;;
end.

.........

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private

 public
   Fcanrun :Boolean;
 end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 ShowMessage('Фиг Вам!');
 Fcanrun := False;
end;


Jeer   (2010-06-15 17:44:00) [23]


> Как закрыть программу без этого мелькания?


Как вариант, сделай главную *.WindowState := Minimized;


Jeer   (2010-06-15 17:39:00) [24]

См. [1]


12   (2010-06-15 17:35:00) [25]

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

плюс в том, что можно в любой момент еще раз вызвать процедуру регистрации и >> зарегился в специальной форме, та создает главную и передает ей коннекшен.
в одной программе 2 окна от разных юзеров. 3,4 - сколько знаем логинов :)

 LoginUserId := qLogin.FieldByName('Id').AsInteger;
 LoginUserName := qLogin.FieldByName('Name').AsString;
 fMain := TfrmMain.Create(nil);
 fMain.InitForm(cntMain, LoginUserId, LoginUserName);
 frmLogin.Hide;

Procedure InitMain(var AConnect:tAdoConnection; IdUser:integer; NameUser:string);
begin
 if frmMain = nil then frmMain := TfrmMain.Create(Application);
 frmMain.cntTest := AConnect;
 frmMain.cntMain := AConnect;
 frmMain.MainUserId := IdUser;
 frmMain.MainUserName := NameUser;
 frmMain.Show;

а потом

frmLogin.Show;
и заходим еще раз, под другим юзером во втором окне

или совсем выходим, и заходим под другим в новом окне
 KillMe := true;
 uLogin.Kill;


turbouser   (2010-06-15 17:25:00) [26]


> ixen ©   (15.06.10 17:15)  

1) Использовать TDataModule для
> компоненты базы данных

2) Создавать датамодуль до создания всех форм (можно просто поместить в самый верх в опциях проекта или прямо в dpr)
3) Показывать диалог логина после создания датамодуля и до создания формы


Страницы:   1 2

Наверх

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