各位好,好久没来了,最近没进步,还是特菜一级水平呢。今天看了一个小代码,很多很多东西不会,我把代码贴出来,然后在下面又把我的问题写了出来,请大家耐心回答问题呀!每个问题后我都写了自己的看法,但不能确定是否正确,如果您认为我的对,就打个YES或Y出来我就明白了,就不麻烦您动手了,我知道程序员手都比较懒。问题可能细点,笨呢,请勿见笑,特别现在手上没DELPHI没书,什么都没有。
代码:::
把应用软件加上30天的试用期 unit regApp; 
interface 
uses Windows,SysUtils,Registry,forms, Dialogs; 
type 
Tlogin = class 
  private 
  
  public 
constructor Create; virtual; 
procedure CheckLogin; 
end; 
implementation 
constructor Tlogin.Create; 
begin 
inherited Create; 
end; 
procedure Tlogin.CheckLogin; 
var 
Reg_id: TDateTime; 
RegisterTemp: TRegistry; 
InputStr, Get_id: string; 
Reg_tag, ClickDok: Boolean; 
Allow: Integer; 
begin 
Allow := 30; //试用期为30天 
Reg_tag := False; //软件是否到注册期 
registerTemp := TRegistry.Create; //准备使用注册表 
with registerTemp do 
begin 
RootKey := HKEY_LOCAL_MACHINE; //存放 
if OpenKey(''Software\Microsoft\Windows\CurrentSowft\tag'', True) then // 建一目 录,存放标志值 
   begin 
if ValueExists(''DateTag'') then begin //用DateTag的值作为标志 
Reg_id := ReadDate(''DateTag''); //读出标志值 
if (Reg_id <> 0) and (Now - Reg_id > Allow) then //允许使用的时间到 
Reg_tag := True; 
   end 
else 
WriteDateTime(''DateTag'', Now); //建立标志,并置初始标志值。 
end; 
if Reg_tag then 
begin  //要求用户输入注册码 
ClickDok := InputQuery(''您使用的是非注册软件,请输入注册码:'', '' '',  inputstr); 
if ClickDok then 
begin 
Get_id := IntToStr(2222); //注册码2 
if Get_id = InputStr then
begin 
WriteDateTime(''DateTag'', 0); //将标志值置为0,即已注册。 
CloseKey; 
Free; 
end 
else 
begin //若输入的注册码错误 
Application.MessageBox(''注册码错误!请与作者联系 !'', ''警告框'', mb_ok); 
CloseKey; 
Free; 
Application.Terminate; 
end; 
end 
else 
begin //若用户不输入注册码 
Application.MessageBox(''请与作者联系,使用注册软件!'', ''警告框 '', mb_ok); 
CloseKey; 
Free; 
Application.Terminate; 
end; 
end; 
end; 
end; end. 
问题如下:
1.
constructor Create; virtual; 是什么意思呢?constructor是什么?VIRTUAL是虚函数这个我知道。
2.
constructor Tlogin.Create; 
begin 
inherited Create; 
end; 
3,
中的Tlogin是自己定义的新类?inherited Create; 是不是继承了DELPHI的TOBJECT类的CREATE函数呢?那是什么意思?
4,
DATATIME类型取值范围是多少啊/不是日期时间型吗?怎么样还可以传值为0,0代表什么?
5,
这个程序是不是没有测试如果用户直接把注册表的键码给删了怎么办?如果删了是不是也不过期了。只要每三十天删一次就行了。有更好的限制方法吗?
还有一个更严重的问题如果我只删DateTag,而不删''Software\Microsoft\Windows\CurrentSowft\tag''那是不是以后再也不用注册了。
6
Get_id := IntToStr(2222)注册码是不是就是2222啊?那直接就2222与InputStr比较不就行了,为什么还用Get_id = InputStr去比较,是考虑程序的可扩展性吗? 
7
Application.Terminate这个什么意思啊?
8
OpenKey(''Software\Microsoft\Windows\CurrentSowft\tag'', True)如果没有这个键码,系统还会自动建立一个吗??要么如果没有怎么办呢?参数True是干什么的?'
9
你们说段程序该放在哪里啊?怎么样去使用它?是不是在主程序初始化时运行它。是在Project1的代码里,还是有FORM1主窗体的ONCREATE事件里呢??如果放在Project1工程文件里,怎么样去写呢。这个我一点也不会。 
我现在 想出来的使用方法是新建一个工程把这个单元加入,然后在FORM1主程序体中引用它,然后在ONCREAT事件里,用login:=Tlogin.create;新建一个TLogin的类,再用login.CheckLogin去测试。是这样吗?我想如果放在工程的源代码里是最好的,可是我不会做,希望帮心谢谢。
还有这段代码用的是“”号,应该用不着‘’吧?。
10
最后一个,我把当前日期写到注册表里的话,那用户找到了这个值,能看懂吗?我同学帮我测试,说是把2003年4月19号写进去,查注册表,结果是"F2 FC 8D B9 53 6C E2 40"也不是日期啊。怎么样译过来呢。
这样如果用户改时间就可以不注册了,怎么样解决这个问题呢?
11,在WIN2000下怎么样办,这个程序对系统有要求吗?

解决方案 »

  1.   

    买本书,看看吧,你的基础不行呀,
    1。是构造函数。
    后面的问题,看你想怎么解决了,不好说,
    例如:8,true 是有的情况。
    建议还是多看看书,书上都有。
      

  2.   

    1.学会看Help,涉及到WinOS的问题要看MSDN,碰到问题时要先自己解决.
    2.看了你的问题,感觉象一个毛头新兵试图驾驶一辆九○式坦克,富有热情但一窍不通,建议你花一年到两年的时间接收系统且正规的教育,这种磨刀的时间是必须的.
    3.建议公布一下你的年龄  ;-)