快速业务通道

Windows的动态链接库原理及使用2

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
etPassWordForm和GetPassWordForm分别用于设置和检查口令。

窗体类TSetPassWordForm定义了两个数据成员Verified和PassWord,用于记录口令确认状态和设置的口令。TSetPassWordForm的定义如下:

  type
      TSetPassWordForm = class(TForm)
       Label1: TLabel;
       Edit1: TEdit;
       OKBtn: TBitBtn;
       CancelBtn: TBitBtn;
       procedure FormCreate(Sender: TObject);
       procedure Edit1KeyPress(Sender: TObject; var Key: Char);
      private
       { Private declarations }
       Verified: Boolean;
      public
       { Public declarations }
       PassWord: PChar;
      end;

窗口生成时,对数据成员和部件状态进行初始化:

    procedure TSetPassWordForm.FormCreate(Sender: TObject);
     begin
    Verified := False;
    PassWord := StrAlloc(40);
    OKBtn.Enabled := False;
    Label1.Caption := ''Please Input PassWord:'';
     end;

按钮OKBtn在程序启动时Enabled属性设置为False,直到口令被正确设置后Enabled属性才恢复为True。这样就保证了只有口令被正确设置后,口令设置窗口才能正常关闭。否则只能按Cancel按钮取消。

在口令设置代码单元中定义了一个输出函数SetPassWord,用于生成口令设置窗口并返回设置的口令:

    function SetPassWord(PWord: PChar): Boolean;
     var
      SetPassWordForm: TSetPassWordForm;
     begin
      Result := False;
      SetPassWordForm := TSetPassWordForm.Create(Application);
      try
       with SetPasswordForm do
        if ShowModal = mrOK then
        begin
         StrCopy(PWord,StrUpper(Password));
         Result := True;
        end;
      finally
       SetPasswordForm.Free;
      end;
     end;

口令成功设置,把PassWord的值拷贝给PWord输出,并返回True。应该注意的是由于 

PWord本身就是指针类型,指向一个字符串的地址,因而虽然PWord用于输出,但在参数表中仍为传值参数,而不是传址参数。另外调用函数StrCopy,要求PWord在传入前已分配内存,否则会导致一个一般保护错。try...finally用于保护窗口所占用内存资源在任何情况下都能正常释放,读者可参看第十二章。

在口令设置窗口中,为了确保用户记住了设置的口令,在用户输入并按回车键后,要求用户再次输入进行确认。只有用户重新输入的字符串与原设置口令相同,口令设置窗口才能正常关闭。否则将原设置口令清空,要求用户再次输入。以上功能的实现在编辑框的OnKeyPress事件处理过程中。

    procedure TSetPassWordForm.Edit1KeyPress(Sender: TObject; var Key: Char);
     begin
      if Edit1.text = '''' then Exit;
      if Key = #13 then
      begin
       if Verified then
        if StrPas(PassWord) = Edit1.text then
        begin
         OKBtn.Enabled := True;
         Edit1.Enabled := False;
         OKBtn.SetFocus;
        end
        else
        begin
         Verified := False;
         MessageDlg(''PassWord is InValid.'',mtWarning,[mbOK],0);
         Edit1.text := '''';
         PassWord := '''';
         Label1.Caption := ''Please Input PassWord:'';
  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号