【发布时间】:2015-04-11 08:42:37
【问题描述】:
我已经使用可用表单 (Form4) 和 MainForm 设置了我的登录程序。 在可用的表格 (form4) 上,我有:
var
Form4: TForm4;
procedure Login;
implementation
.....
“登录”过程如下:
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 上的登录按钮时,应用程序时不时地 无故终止。为什么会这样? 应该
Application.MainFormOnTaskbar := False;
也许设置为真?
编辑:
我在创建事件时编辑了项目文件和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.
而且我似乎没有关闭应用程序....(它仍然可以,呃...)
编辑2:
试过这种方式。我将 AdvGlowButton1 设置为 ModalResult=mrNone 并将 Form 样式设置为 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。我也想知道为什么你不给你的表格名字。以及为什么在启动时创建它们。我猜ide是为你做的。但这是一个糟糕的指南。它认为你是 20 世纪后期的 VB 程序员。 -
BTW 在这一切都修好之后,您的下一个任务(在您在应用程序中执行任何其他操作之前)是摆脱数据库中的纯文本密码,并将它们替换为 (SHA1) 哈希.这是互联网/数据库安全规则 #1,你不能尽快开始这样做。
-
Buttons 属性已设置:ModalResult=mrOK
-
完全同意密码哈希,但也不要忘记公然的 SQL 注入!
标签: delphi delphi-xe7