我真的相信这世界上有鬼!
我的程序流程是这样的:
在主窗口显示前显示一个登录窗口,然后有一段程序,大体是这样:
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在这些机器上没有作用?
问题点数:80、回复次数:29Top
1 楼longwycn((理想0769) ---要做DBA)回复于 2005-06-09 09:08:16 得分 0
有象你这样的写法吗?
这本来就不好的/Top
2 楼naughtyboy(重归起跑线)回复于 2005-06-09 09:30:45 得分 5
不清楚
Application.Terminate
改为
halt
看看行不行Top
3 楼lyguo(愚人(每天顶几顶挣分升星星)http://zz.ihenan.cn/map/)回复于 2005-06-09 10:04:36 得分 0
不明白Top
4 楼wxmwxm(wxmwxm)回复于 2005-06-09 10:08:53 得分 0
把代码贴全了,整个过程贴出来,zcm和xtmm可不可能是空字符串??Top
5 楼kongguangming(Fly)回复于 2005-06-09 11:44:52 得分 0
到xp下编译Top
6 楼FigoZhu(谢慕安)回复于 2005-06-09 12:29:11 得分 0
zcm和xtmm可不可能是空字符串??
这个很有道理。
应该这样:
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;
Top
7 楼cnmaxu(Max)回复于 2005-06-09 12:41:38 得分 0
你的字符串变量第次比较之前最好是清零。Top
8 楼birdhaha(haha)回复于 2005-06-09 13:04:19 得分 0
空字符楼主应该是想到了的。
有没有这种可能,就是直接关闭的窗口?就是点的窗口上的X,不是点你的输入键,所以根本就不会调用你的TForm2.Button1Click。Top
9 楼sxqwhxq(步青云)回复于 2005-06-09 13:40:34 得分 0
程序逻辑是没有任何问题的,因为同样的测试在其他机器上均可正确运行,唯有这7台机子不行。
注册码是取系统硬盘id号通过一个计算公式算出来的,系统密码是用户可以更改并存贮在数据库中的。Top
10 楼ffanpeng(樊澎)回复于 2005-06-09 14:39:07 得分 0
是不是公式有问题Top
11 楼hellolongbin(一个人(自从扩充话题改版,再也不去灌水乐园了))回复于 2005-06-09 15:22:15 得分 0
以为是讲故事的,走错门了,sorryTop
12 楼DelphiGuy()回复于 2005-06-09 16:01:00 得分 50
Application.Terminate并不是立即终止程序。
见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;
Top
13 楼kunke(kun)回复于 2005-06-10 00:42:33 得分 5
procedure TForm2.Button1Click(Sender: TObject);//登录按钮
begin
if Trim(edit1.text)<>zcm then//比较注册码
Application.Terminate;
if Trim(edit2.text)<>xtmm then
Application.Terminate;//比较密码
........
end;
没有.text,是不是你的笔误?
Top
14 楼jkx01whg(爱迪01)回复于 2005-06-10 03:08:24 得分 0
帮你顶Top
15 楼steely(浪迹天涯)回复于 2005-06-10 10:07:08 得分 0
我不相信有鬼。Top
16 楼Kshape(C/C++初学者~~~~)回复于 2005-06-10 10:23:41 得分 0
trim(edit1.text)
//加上.textTop
17 楼sseedd(草裙舞男)回复于 2005-06-10 11:02:33 得分 0
"注册码是取系统硬盘id号通过一个计算公式算出来的"
好像三星的硬盘取不了id号Top
18 楼heromei(jerry)回复于 2005-06-10 12:27:18 得分 0
真的以为是故事呢Top
19 楼w95927w(D版第一铁公鸡^^)回复于 2005-06-10 12:41:29 得分 0
想错了,寒一个
Top
20 楼rexwu(小子风)回复于 2005-06-10 16:16:38 得分 0
硬盘号?我记得我们以前取硬盘号的时候如果是克隆的机器好像取出来的硬盘号有可能是相同的,不知道你会不会碰上这个问题.错了别见笑.Top
21 楼sxqwhxq(步青云)回复于 2005-06-10 16:54:41 得分 0
是的,有些三星硬盘没有ID号。
我取ID号是从网上下载的一个dll文件中调用函数取出来的。Top
22 楼sxqwhxq(步青云)回复于 2005-06-10 16:58:44 得分 0
谢谢DelphiGuy,我在csdn上全文搜索似乎也是这样解释的。改一下再试试。Top
23 楼lost_memory()回复于 2005-06-10 21:51:19 得分 0
哎 csdn服务器这么慢,你让我充满好奇的等了半天才发现我原来不是讲故事,我容易吗我Top
24 楼cnmaxu(Max)回复于 2005-06-13 10:36:02 得分 0
试试用正常途径吧,不用 Terminate ,对退出的流程小改一下,登录不成功,或者取消登录都 Close() 当前窗体,再保证下面没有代码,这样程序会自运退出,如果这样程序都退不出来,恐怕...:(Top
25 楼cnmaxu(Max)回复于 2005-06-13 11:00:10 得分 10
说的再详细一点吧,登录框一定是响应式的对吧,即 ShowModal 出来的。如果登录校验不过去就返回mrAbort,如果登录用户点取消则反回 mrCancel 只有登录校验成功的时候,才返回 mrOK 这样你只要在 ShowModal 之后判断就可以了,如果是 mrOK 在初始化应用程序就可以了。
这是我的工程单元里面的代码你可以参考一下:
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.Top
26 楼cuilj(一云忆水)回复于 2005-06-13 11:23:11 得分 10
我建议,你应该把Application.Terminate;改成ModalResult := mrNo;
在工程文件中加入对登录框的判断
if fmlogin.showmodal = mrOK then
Application.Run
else
Application.Terminate;Top
27 楼wlbfeihu(下辈子不写程序)回复于 2005-06-13 11:37:53 得分 0
怎么没见到鬼啊Top
28 楼jian23cn(黑翼天使)回复于 2005-06-13 14:23:44 得分 0
楼主真强,用这个标题骗了好多人(偶也被骗了~~:)
从以上各位的结果来看,本人也认为是硬盘ID的问题。楼主可以稍微改一下,设置一个默认的ID,如果取不到硬盘ID就用那个默认ID。不然如果返回值是空当然不用如果密码了,''=''当然成立啦!!Top
29 楼sxqwhxq(步青云)回复于 2005-06-14 17:50:09 得分 0
把鬼驱了,在
Application.Terminate;
加Application.exit;Top




