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