Я установил мою процедуру входа в систему с помощью доступной формы (Form4) и MainForm. В доступной форме (form4) У меня есть:Приложение прекращается без видимой причины
var
Form4: TForm4;
procedure Login;
implementation
.....
Процедура 'Login' идет:
procedure Login;
begin
with TForm4.Create(nil) do
try
Application.MainForm.Hide;
if ShowModal = mrOK then
Application.MainForm.Show
else
Application.Terminate;
finally
Free;
end;
end;
Тогда на одной и той же форме, У меня есть кнопка, чтобы войти:
procedure TForm4.AdvGlowButton1Click(Sender: TObject); //the buton's property is ModalResult=mrOK
begin
DataModule2.LOGIN_QUERY.Active:=false;
DataModule2.LOGIN_QUERY.SQL.Clear;
DataModule2.LOGIN_QUERY.SQL.Add('select user,passsword from users where user='+QuotedStr(cxlookupcombobox1.text)+' and password='+QuotedStr(cxTextEdit1.Text));
DataModule2.LOGIN_QUERY.Open;
if DataModule2.LOGIN_QUERY.FieldByName('password').AsString<>''
then ModalResult := mrOK else
ModalResult := mrNone;
end;
Источник проекта выглядит следующим образом:
begin
Application.Initialize;
Application.MainFormOnTaskbar := False;
Application.CreateForm(TDataModule2, DataModule2);
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TForm7, Form7);
Application.CreateForm(TARCHIVE, ARHCIVE);
Application.CreateForm(TForm10, Form10);
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm6, Form6);
Application.CreateForm(TForm5, Form5);
Application.CreateForm(TForm9, Form9);
Application.CreateForm(TForm12, Form12);
Application.CreateForm(TForm12, Form12);
Application.CreateForm(TAboutBox, AboutBox);
Login;
Application.Run;
end.
Тем не менее, время от времени при нажатии кнопки «Вход» в Form4 приложение завершается без каких-либо причин. Почему это происходит ? Должно
Приложение.MainFormOnTaskbar: = False;
может быть установлен как истинный, возможно?
Edit:
я редактировал файл проекта и form4 на создание события:
procedure TForm4.FormCreate(Sender: TObject);
begin
AdvGlowButton1.ModalResult := mrOK;
end;
и изменил исходный код проекта:
{$R *.res}
var
MainForm: TMainForm;
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.MainFormOnTaskbar := False;
Application.CreateForm(TDataModule2, DataModule2);
Application.CreateForm(TForm7, Form7);
Application.CreateForm(TARCHIVE, ARCHIVE);
Application.CreateForm(TForm10, Form10);
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm6, Form6);
Application.CreateForm(TForm5, Form5);
Application.CreateForm(TForm9, Form9);
Application.CreateForm(TForm12, Form12);
Application.CreateForm(TForm12, Form12);
Application.CreateForm(TAboutBox, AboutBox);
Login;
Application.Run;
end.
и я не кажется, что получают приложение закрытие .... (он все еще делает, ughh ...)
изменить2:
Пробовал этот способ. Я установил мой AdvGlowButton1 к ModalResult = mrNone и стиль Форма для fsdialog:
procedure TForm4.AdvGlowButton1Click(Sender: TObject); //the buton's property is ModalResult=mrOK
begin
DataModule2.LOGIN_QUERY.Active:=false;
DataModule2.LOGIN_QUERY.SQL.Clear;
DataModule2.LOGIN_QUERY.SQL.Add('select user,passsword from users where user='+QuotedStr(cxlookupcombobox1.text)+' and password='+QuotedStr(cxTextEdit1.Text));
DataModule2.LOGIN_QUERY.Open;
if DataModule2.LOGIN_QUERY.FieldByName('password').AsString<>''
then ModalResult := mrOK else
dxStatusBar1.Panels[1].Text :='Wrong password !';
end;
это работает большую часть времени, и все же она иногда закрывается, когда я запустить приложение и нажать кнопку (логин) кнопку AdvGlowButton1. Еще одна вещь, которую я выяснил, отсутствует, как вы предлагаете закрыть приложение в этой форме входа, поскольку оно ожидает только модальных результатов?
я догадку, что ShowModal не Mrok. –
Довольно трудно увидеть прошлое, что 'Application.Terminate'. Я также задаюсь вопросом, почему вы не даете имена своих форм. И почему вы их создаете при запуске. Думаю, идеал сделал это для вас. Но это плохой путеводитель. Он считает, что вы программист VB с конца 20-го века. –
BTW После этого все ваше задание (прежде чем вы сделаете что-либо еще в своем приложении) должно избавиться от простых текстовых паролей в вашей базе данных и заменить их хэшами (SHA1). Это правило безопасности Интернета/базы данных №1 и ** вы не можете начать делать это достаточно скоро **. –