Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2010, 23:27   #1
BlackWhyT
 
Регистрация: 18.12.2010
Сообщений: 3
По умолчанию Проблема закрытия проекта вместе с главной формой.

Собственно, суть вопроса: есть некий проект, в котором реализовано разделение прав доступа через ввод логина и пароля. Т.е. вводим данные, открывается главная форма проекта, мы начинаем работать в проге. Вся проблема в том, что с формой ввода логина надо что-то сделать. Т.к. форма логина-пароля считается главной, с точки зрения Delphi (ну, в смысле, запускается самой первой, то если написать команду "close", вместе с формой закрывается вся программа. Если поставить свойство "Hide", после закрытия всех форм прога не закрывается, а висит в трее (ладно, если мы всего лишь скомпилировали приложение - проблема решится нажатием Ctrl+F2, а если запускать через .exe .... ).

Надо как-то "обмануть" Delphi, вопрос только "как"? В инете я нашел один способ, но он у меня не прокатил =(

Код формы ввода логина и пароля:

Цитата:
private
{ Private declarations }
public
{ Public declarations }
class function Execute : boolean;

end;

var
LoginForm: TLoginForm;

implementation

uses MainFormUnit, DataBaseModuleUnit, WorkersUnit;

{$R *.dfm}

procedure TLoginForm.LoginButtonClick(Sender: TObject);
var Role:integer;

begin
Role:=DataBaseModule.CheckLogin(Log in.Text, Password.Text);
begin
if Role=2 Then
begin
ModalResult := mrOK;
Workers_and_Zone.Button3.Visible:=t rue;
Workers_and_Zone.Button4.Visible:=t rue;
Workers_and_Zone.Button5.Visible:=t rue;
Workers_and_Zone.Button6.Visible:=t rue;
Workers_and_Zone.WorkersGrid.Column s[4].Visible:=true;
Workers_and_Zone.WorkersGrid.Column s[5].Visible:=true;
Workers_and_Zone.WorkersGrid.Column s[7].Visible:=true;
MainForm.Show;
LoginForm.Hide;
end
else
if Role=1 then
begin
ModalResult := mrOK;
Workers_and_Zone.Button3.Visible:=f alse;
Workers_and_Zone.Button4.Visible:=f alse;
Workers_and_Zone.Button5.Visible:=f alse;
Workers_and_Zone.Button6.Visible:=f alse;
Workers_and_Zone.Button9.Visible:=f alse;
Workers_and_Zone.ZonaName.Visible:= false;
Workers_and_Zone.Label3.Visible:=fa lse;
MainForm.Button2.Visible:=false;
Workers_and_Zone.WorkersGrid.Column s[4].Visible:=false;
Workers_and_Zone.WorkersGrid.Column s[5].Visible:=false;
Workers_and_Zone.WorkersGrid.Column s[7].Visible:=false;
MainForm.Show;
LoginForm.Hide;
end
else
begin
showmessage ('Нет такого пользователя');
ModalResult := mrAbort;
end;

end;
end;

procedure TLoginForm.Button1Click(Sender: TObject);
begin
close;
end;

class function TLoginForm.Execute: boolean;
begin
with LoginForm.Create(nil) do
try
Result := ShowModal = mrOk;
finally
Free;
end;
end;


end.

Код главной формы:

Цитата:
var
MainForm: TMainForm;

implementation

uses TechniqueUnit, WorkersUnit, Zone_and_CabinetsUnit;

{$R *.dfm}

begin
if TLoginForm.Execute then -----> Undeclarated identifier:TLoginForm и еще THEN expected but identifier "execute" was found
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm) ;
Application.Run;
end
else
begin
Application.MessageBox('You are not authorized to use the application. The password is "delphi".', 'Password Protected Delphi application') ;
end;



procedure TMainForm.Button1Click(Sender: TObject); ------> Statement expected but "Procedure" found
begin
Technique.show;
end;

procedure TMainForm.Button4Click(Sender: TObject);
begin
MainForm.Close;
end;

procedure TMainForm.Button3Click(Sender: TObject);
begin
Workers_and_Zone.Show;
end;

end.

Жирным выделено то, что имеет отношение к рассматриваемому методу "обмана" Delphi, так сказать. Красным выделены ошибки в тех, местах, в которых Delphi ругается.

Код, написанный на форме ввода логина-пароля ошибок не выдает, но и не функционирует (без кода, написанного в главной форме. Допустим, так и должно быть...). На код, написанный в главной форме, Delphi ругается, хотя что там неправильно - загадка... Вроде везде все прописано.

Да, еще в том совете было написано, что форму логина-пароля надо убрать из списка автоматически создаваемых форм. Если ее оттуда убрать (ну, это очевидно), она вообще не будет появляться при компиляции проекта. А мне такого счастья тоже не надо =)

Последний раз редактировалось BlackWhyT; 18.12.2010 в 23:32.
BlackWhyT вне форума Ответить с цитированием
Старый 18.12.2010, 23:47   #2
BlackWhyT
 
Регистрация: 18.12.2010
Сообщений: 3
По умолчанию

Блин, сейчас посмотрел, оказывается подобная тема уже существует. Просто раньше ее не увидел. Однако все равно интересно, в чем ошибка МОЕГО СПОСОБА???

Да, и еще... Прокэпьте по поводу метода "Free" у форм. В первой теме прочитал, что можно через него попробовать, но я вообще про такое в первый раз читаю. В чем его суть?

Последний раз редактировалось BlackWhyT; 18.12.2010 в 23:54.
BlackWhyT вне форума Ответить с цитированием
Старый 19.12.2010, 00:36   #3
abb777
 
Регистрация: 17.12.2010
Сообщений: 6
По умолчанию

Просто не могу удержаться... Такого бреда я, правда, еще не видал... Может редко по таким, с позволения сказать форумам, лазаю?...

Решается проблема элементарно: в файле проекта (.dpr) (только не спрашивайте, как его открыть в ИДЕ, а то я застрелюсь немедленно) пишем примерно такое:
............
begin
Application.Initialize;
===========><8============
with LoginForm.Create(Application) do
try
Result := ShowModal = mrOk;
finally
Free;
end;
===========><8============
Application.CreateForm(TMainForm, MainForm) ;
Application.Run;
end.

И не забываем соотв. модуль указать в uses.

И вообще, в указанном промежутке можно написать много чего полезного. На главную форму и прочие подобные умолчания Delphi это никак не влияет.

Цитата:
Сообщение от BlackWhyT Посмотреть сообщение
Да, и еще... Прокэпьте по поводу метода "Free" у форм. В первой теме прочитал, что можно через него попробовать, но я вообще про такое в первый раз читаю. В чем его суть?
Я тоже

TObject.Free уничтожает объект, как известно.
abb777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с формой rdama PHP 1 21.07.2010 09:34
Проблема с формой Underfinder Microsoft Office Access 3 03.03.2010 08:29
Загрузить библиотеку вместе сразу вместе с программой Anekdot Общие вопросы Delphi 4 26.01.2010 23:14
Запуск диалога ввести пароль перед главной формой MDIForm Comatoz Общие вопросы Delphi 0 07.06.2009 18:20
Проблема с формой. Teen4jump Общие вопросы Delphi 2 07.08.2007 16:46