CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

我真的相信这世界上有鬼!

楼主sxqwhxq(步青云)2005-06-09 08:54:56 在 Delphi / Windows SDK/API 提问

我的程序流程是这样的:  
  在主窗口显示前显示一个登录窗口,然后有一段程序,大体是这样:  
  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

相关问题

  • 你相信有鬼么?~~~~
  • 世界上有没有鬼
  • 大家相信有鬼吗?有些异灵照片,看看
  • Csdn有鬼啦!
  • 有鬼啊?
  • 你相信这个世界有真情真爱吗?(第2贴)
  • 你相信这个世界还有真爱吗?(第3贴 最后一贴)
  • 太可怕了,这个灵异帖子我发了N遍才成功,难道真的有鬼??
  • 救命呀,有鬼呀!
  • 大家快来呀,有鬼呀.

关键词

  • 硬盘
  • 密码
  • application
  • 系统
  • 注册
  • 代码
  • 用户
  • zcm
  • xtmm
  • terminate

得分解答快速导航

  • 帖主:sxqwhxq
  • naughtyboy
  • DelphiGuy
  • kunke
  • cnmaxu
  • cuilj

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo