我的程序流程是这样的:
在主窗口显示前显示一个登录窗口,然后有一段程序,大体是这样:
procedure TForm2.Button1Click(Sender: TObject);//登录按钮
begin
if Trim(edit1)<>zcm then//比较注册码
Application.Terminate;
if Trim(edit2)<>xtmm then
Application.Terminate;//比较密码
........
end;
系统安装了120个客户,其中有113个用户能够正常运行,但有七台联想品牌机却可以不输入或随便输入注册码和系统密码即可进行系统,弄得我很是尴尬。
我可以肯定程序逻辑是没有任何问题的,唯一的规律是这七台机器都装了联想家庭版xpsp1,莫非Terminate在这些机器上没有作用?
在主窗口显示前显示一个登录窗口,然后有一段程序,大体是这样:
procedure TForm2.Button1Click(Sender: TObject);//登录按钮
begin
if Trim(edit1)<>zcm then//比较注册码
Application.Terminate;
if Trim(edit2)<>xtmm then
Application.Terminate;//比较密码
........
end;
系统安装了120个客户,其中有113个用户能够正常运行,但有七台联想品牌机却可以不输入或随便输入注册码和系统密码即可进行系统,弄得我很是尴尬。
我可以肯定程序逻辑是没有任何问题的,唯一的规律是这七台机器都装了联想家庭版xpsp1,莫非Terminate在这些机器上没有作用?
Application.Terminate
改为
halt
看看行不行
应该这样:procedure TForm2.Button1Click(Sender: TObject);//登录按钮
begin
if (Trim(edit1)<>zcm) or (zcm='') then//比较注册码
Application.Terminate;
if (Trim(edit2)<>xtmm) or (xtmm = '') then
Application.Terminate;//比较密码
........
end;
有没有这种可能,就是直接关闭的窗口?就是点的窗口上的X,不是点你的输入键,所以根本就不会调用你的TForm2.Button1Click。
见Delphi Help:
Terminate calls the Windows API PostQuitMessage function to perform an orderly shutdown of the application. Terminate is not immediate.所以应该:
if Trim(edit1)<>zcm then//比较注册码
begin
Application.Terminate;
exit;
end;
begin
if Trim(edit1.text)<>zcm then//比较注册码
Application.Terminate;
if Trim(edit2.text)<>xtmm then
Application.Terminate;//比较密码
........
end;没有.text,是不是你的笔误?
好像三星的硬盘取不了id号
我取ID号是从网上下载的一个dll文件中调用函数取出来的。
这是我的工程单元里面的代码你可以参考一下:
program FinanceReport;uses
Forms,
zrFormMain in 'zrFormMain.pas' {zrForm_Main},
zrFormLogin in 'zrFormLogin.pas' {zrForm_Login};
{$R *.res}
begin
Application.Initialize;
with zrForm_Login.Create do
try
if ShowModal()=mrOk then
begin
Application.CreateForm(TzrForm_Main, zrForm_Main);
end;
finally
Free;
end;
Application.Run();
end.
在工程文件中加入对登录框的判断
if fmlogin.showmodal = mrOK then
Application.Run
else
Application.Terminate;
Application.Terminate;
加Application.exit;