请问一个小小的问题。(50分)

  • 主题发起人 主题发起人 Delphi之旅
  • 开始时间 开始时间
D

Delphi之旅

Unregistered / Unconfirmed
GUEST, unregistred user!
现在我想实现下列功能:
打开一个应用程序之前,弹出对话框,要求输入密码,
密码正确进入,错误三次,自动退出。

请问这样的功能用delphi怎么实现?
 
就是定义一个变量记录它的次数,到三次密码不正确退出就行了
 
在主FORM的onshow事件中写入:
Application.createform(tfmsplash,fmsplash);
fmsplash.showmodal

在tfmsplash中加入变量I:INTEGER
IF 密码错误 THEN
BEGIN
I:=I+1;
IF I》=3 THEN
APPLICATION。TEM。。。。
SHOWMESSAGE();
EXIT;
END;
 
搞一个三次的循环。
 
players的方法可行
不过我一般在主窗口中判断用户或密码是否错误,毕竟数据库的控件没有人会放在登录Form中
 
对话框可能要用一个form来做,如players所说,如果密码输错三次退出,返回一个为false
的变量(正确当然是返回true),然后在主form的返回部分判断该变量,为false则退出主程序。
 
对! 这个form最好动态创建!
 
新建frmLogin,代码大体如下:

type
TfrmLogin = class(TForm)
private
Count: Integer;
public
tbl: TTable;
end;

function SysLogin(tbl: TTable): Boolean;

var
frmLogin: TfrmLogin;

implementation

procedure TfrmLogin.btnOKClick(Sender: TObject);
begin
if tbl.FieldByName('Password').AsString <> edtPswd.Text then
begin
ShowMessage('密码错误!');
Inc(Count);
if Count = 3 then
begin
ShowMessage('三次密码错误!');
ModalResult := mrCancel;
end
else
ModalResult := mrNone;
end;
end;

function SysLogin(tbl: TTable): Boolean;
begin
frmLogin := TfrmLogin.Create(Application);
frmLogin.tbl := tbl;
Result := frmLogin.ShowModal = mrOk;
frmLogin.Free;
end;


在主窗体的OnCreate事件中加入:
if not SysLogin(DM.tblOperator) then Application.Terminate;
 
在主窗体的OnCreate事件中加入:
if not SysLogin(DM.tblOperator) then Application.Terminate;


再请问参数DM是什么?
 
DM是TDataModule,我习惯将数据库有关的控件放在DateModule中,所以顺手就打了个DM,
DM需要在主窗体之前创建,不好意思,没说清楚。
 
对不起,
还是不懂,
能够再说的清楚一点么?
先谢谢了。
 
DM就是放用户表(tblOperator)的那个Form,该Form从TDataModule继承。
在Delphi IDE下:File|New...里面的New|Data Module就是上面提到的TDataModule.
当然,你直接放一个TTable到主窗体中也没有问题,只要能传递到frmLogin中就行。
 
我试过了,
不管用
 
你说的不管用指的是出错?(错误信息?)还是不能达到密码正确进入,
错误三次,自动退出的目的?请说明白,最好把代码贴出来。
 
tblOperator是什么?
 
一直是上面的东西出错。
 
主窗口代码如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Unit2, DBTables, DB;

type
TForm1 = class(TForm)
dm: TTable;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
if not SysLogin(DM.tblOperator) then Application.Terminate;
end;

副窗口代码如下:
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons,DBtables, DB;

type
TForm2 = class(TForm)
BitBtn1: TBitBtn;
Edit1: TEdit;
Table1: TTable;
procedure BitBtn1Click(Sender: TObject);
private
Count: Integer;
public
tbl: TTable;
end;
function SysLogin(tbl: TTable): Boolean;
var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
if tbl.FieldByName('Password').AsString <> edit1.Text then
begin
ShowMessage('密码错误!');
Inc(Count);
if Count = 3 then
begin
ShowMessage('三次密码错误!');
ModalResult := mrCancel;
end
else
ModalResult := mrNone;
end;

end;
function SysLogin(tbl: TTable): Boolean;
begin
form2 := Tform2.Create(Application);
form2.tbl := tbl;
Result := form2.ShowModal = mrOk;
form2.Free;
end;

end.
 
哪个是你放用户信息的表啊!:)
 
我对这一方面一点也不懂。
对不起了。
麻烦大家了。
 
倒……

dm: TTable;
if not SysLogin(DM.tblOperator) then Application.Terminate;
可以改为:
tblOperator:TTable;
if not SysLogin(tblOperator) then Application.Terminate;

这里tblOperator与你放用户信息的表相连(通过ODBC或ADO),用户信息表你可以用ACCESS创建,
我上面的例子中该表只用了一个字段"Password",这是不完善的,应该加上用户名等字段,
password也应该做点简单的加密。

得,建议你先看看书吧。
 
后退
顶部