⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 025.htm

📁 delphi教程
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<p>StrCopy(PWord,StrUpper(Password));</p><p>Result := True;</p><p>end;</p><p>finally</p><p>SetPasswordForm.Free;</p><p>end;</p><p>end;</p><font face="宋体" lang="ZH-CN"><p>  口令成功设置,把</font>PassWord<fontface="宋体" lang="ZH-CN">的值拷贝给</font>PWord<font face="宋体" lang="ZH-CN">输出,并返回</font>True<fontface="宋体" lang="ZH-CN">。应该注意的是由于</font> PWord<font face="宋体"lang="ZH-CN">本身就是指针类型,指向一个字符串的地址,因而虽然</font>PWord<fontface="宋体" lang="ZH-CN">用于输出,但在参数表中仍为传值参数,而不是传址参数。另外调用函数</font>StrCopy<fontface="宋体" lang="ZH-CN">,要求</font>PWord<font face="宋体" lang="ZH-CN">在传入前已分配内存,否则会导致一个一般保护错。</font>try...finally<fontface="宋体" lang="ZH-CN">用于保护窗口所占用内存资源在任何情况下都能正常释放,读者可参看第十二章。</p><p>  在口令设置窗口中,为了确保用户记住了设置的口令,在用户输入并按回车键后,要求用户再次输入进行确认。只有用户重新输入的字符串与原设置口令相同,口令设置窗口才能正常关闭</font><font face="宋体" lang="ZH-CN">。否则将原设置口令清空,要求用户再次输入。以上功能的实现在编辑框的</font>OnKeyPress<fontface="宋体" lang="ZH-CN">事件处理过程中。 </p></font><p>procedure TSetPassWordForm.Edit1KeyPress(Sender: TObject; var Key: Char);</p><p>begin</p><p>if Edit1.text = '' then Exit;</p><p>if Key = #13 then</p><p>begin</p><p>if Verified then</p><p>if StrPas(PassWord) = Edit1.text then</p><p>begin</p><p>OKBtn.Enabled := True;</p><p>Edit1.Enabled := False;</p><p>OKBtn.SetFocus;</p><p>end</p><p>else</p><p>begin</p><p>Verified := False;</p><p>MessageDlg('PassWord is InValid.',mtWarning,[mbOK],0);</p><p>Edit1.text := '';</p><p>PassWord := '';</p><p>Label1.Caption := 'Please Input PassWord:';</p><p>end</p><p>else</p><p>begin</p><p>Verified := True;</p><p>StrPCopy(PassWord,Edit1.text);</p><p>Edit1.text := '';</p><p>Label1.caption := 'Please Verify PassWord:';</p><p>end;</p><p>Key := #0;</p><p>end;</p><p>end;</p><font face="宋体" lang="ZH-CN"><p>  口令检查窗口的实现相对简单,只定义了一个输出函数</font>GetPassWord<fontface="宋体" lang="ZH-CN">,用于生成口令检查窗口并返回口令检查的结果。 </p></font><p>function GetPassword(Password: PChar): Boolean;</p><p>var</p><p>GetPasswordForm: TGetPasswordForm;</p><p>begin</p><p>Result := False;</p><p>GetPasswordForm := TGetPasswordForm.Create(Application);</p><p>try</p><p>with GetPasswordForm do</p><p>if ShowModal = mrOK then</p><p>if UpperCase(Edit1.Text) &lt;&gt; StrPas(StrUpper(Password)) then</p><p>MessageDlg('Invalid Password', mtWarning, [mbOK], 0)</p><p>else</p><p>Result := True;</p><p>finally</p><p>PasswordForm.Free;</p><p>end;</p><p>end;</p><font face="宋体" lang="ZH-CN"><p>  </font>PassWord<font face="宋体" lang="ZH-CN">为输入的参数,不能为空,由调用以上函数的程序负责维护。</p><p>  窗口中用户输入口令时回显在屏幕上的字符由编辑框的</font>PassWordChar<fontface="宋体" lang="ZH-CN">属性确定。</p><p>  在</font>DLLs<font face="宋体" lang="ZH-CN">的工程文件中,把两个输出函数写到</font>exports<fontface="宋体" lang="ZH-CN">子句中。 </p></font><p>library PassForm; </p><p>uses</p><p>GetPass in 'GETPASS.PAS' {PasswordForm},</p><p>Setpass in 'SETPASS.PAS' {SetPassWordForm}; </p><p>exports</p><p>GetPassword,SetPassWord; </p><p>begin</p><p>end. </p><p>10.4.2.2 Delphi<font face="宋体" lang="ZH-CN">应用程序调用重用窗体 </p><p>  在</font>Delphi<font face="宋体" lang="ZH-CN">应用程序中调用重用窗体,首先必须包含</font>passform.dll<fontface="宋体" lang="ZH-CN">的两个输出函数: </p></font><p>function GetPassword(Password: PChar): Boolean;</p><p>far; external 'c:\dlls\PassForm';</p><p>function SetPassword(PassWord: PChar): Boolean;</p><p>far; external 'c:\dlls\PassForm';</p><font face="宋体" lang="ZH-CN"><p>  这位于程序单元的</font>implementation<fontface="宋体" lang="ZH-CN">部分。</font></p><font face="宋体" lang="ZH-CN"><p>口令设置部分的实现代码为: </p></font><p>procedure TForm1.SetButtonClick(Sender: TObject);</p><p>begin</p><p>PassWord := StrAlloc(40);</p><p>if SetPassWord(PassWord) = False then</p><p>MessageDlg('PassWord is not set',mtInformation,[mbOK],0); </p><p>end;</p><font face="宋体" lang="ZH-CN"><p>  首先为口令字符串分配内存。当口令设置窗体按</font>Cancel<fontface="宋体" lang="ZH-CN">按钮取消时,显示相应的信息。</p><p>  口令检查部分的实现代码为: </p></font><p>procedure TForm1.TestButtonClick(Sender: TObject);</p><p>begin</p><p>if PassWord = nil then</p><p>begin</p><p>MessageDlg('Set password first', mtInformation, [mbOK], 0);</p><p>SetButton.SetFocus;</p><p>Exit;</p><p>end;</p><p>if GetPassword(PassWord) then</p><p>Label1.Caption := 'You are Wellcome !'</p><p>else</p><p>Label1.Caption := 'Sorry,You are InValid User.';</p><p>end;</p><font face="宋体" lang="ZH-CN"><p>  根据口令检查的结果,在标签框中显示相应的信息。 </p></font><p>10.4.2.3 VB<font face="宋体" lang="ZH-CN">应用程序调用重用窗体 </p><p>  </font>VB<font face="宋体" lang="ZH-CN">是微软公司极力推荐的一个可视化开发工具。它虽然并不支持动态链接库的创建,但可以调用标准的</font>WindowsAPI<font face="宋体" lang="ZH-CN">动态链接库和用其它语言编写的动态链接库。为了验证所生成</font>DLLs<fontface="宋体" lang="ZH-CN">的普适性,我们用</font>VB<font face="宋体"lang="ZH-CN">开发了一个简单的程序来调用</font>passform.dll<font face="宋体"lang="ZH-CN">中储存的窗体。</font></p><font face="宋体" lang="ZH-CN"><p>下面是</font>VB<font face="宋体" lang="ZH-CN">程序的完整代码,和</font>Delphi<fontface="宋体" lang="ZH-CN">程序的对应部分基本一致。 </p></font><p>Option Explicit</p><p>Declare Function GetPassWord Lib &quot;c:\dlls\passform.dll&quot; (ByVal PassWord AsString) As Integer</p><p>Declare Function SetPassWord Lib &quot;c:\dlls\passform.dll&quot; (ByVal PassWord AsString) As Integer </p><p>Dim PassWord As String * 40</p><p>Sub Check_Click ()</p><p>If PassWord = &quot;&quot; Then</p><p>MsgBox (&quot;Enter sample password first&quot;)</p><p>SetPass.SetFocus</p><p>Else</p><p>If GetPassWord(PassWord) Then</p><p>StatusLbl.Caption = &quot;You are Welcome!&quot;</p><p>Else</p><p>StatusLbl.Caption = &quot;Sorry,You are Invalid User.&quot;</p><p>End If</p><p>End If</p><p>End Sub</p><p>Sub SetPass_Click ()</p><p>If SetPassWord(PassWord) = 0 Then</p><p>MsgBox (&quot;PassWord is not Set.&quot;)</p><p>End If</p><p>End Sub</p><font face="宋体" lang="ZH-CN"><p>  有关</font>VB<font face="宋体" lang="ZH-CN">编程的一些具体问题,读者可参看有关的</font>VB<fontface="宋体" lang="ZH-CN">参考书。 </p></font><p>10.4.3 <font face="宋体" lang="ZH-CN">小结 </p><p>  本章我们讨论的是动态链接库编程。许多可视化开发工具(如</font>VisualBasic<font face="宋体" lang="ZH-CN">)不支持</font> DLLs<font face="宋体"lang="ZH-CN">的创建,而</font>Delphi<font face="宋体" lang="ZH-CN">在这里又有上乘的表现。特别是窗体重用机制是</font>Delphi<fontface="宋体" lang="ZH-CN">对</font>Windows<font face="宋体" lang="ZH-CN">下</font>DLLs<fontface="宋体" lang="ZH-CN">编程的一个重大改进。在一般的</font>DLLs<fontface="宋体" lang="ZH-CN">编程中也体现了</font>Delphi<font face="宋体"lang="ZH-CN">快捷、方便的特点。动态链接库是</font> Windows<fontface="宋体" lang="ZH-CN">下程序组织的一种重要方式,使用动态链接库可以极大地保护用户在不同开发工具、不同时期所做的工作。利用动态链接库,用户可以逐步去构筑自己的程序模块库,为今后的工作积累素材。</font></p><font face="宋体" lang="ZH-CN"><p> </font></p><BR><hr  width="94%"></TD><TD CLASS="tt3" VALIGN="bottom" width="8%"  ><strong><A HREF="026.htm"><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR><A HREF="024.htm"><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR><A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR></strong></TD></TR></table></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -