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

📄 winapi.htm

📁 对于学习很有帮助
💻 HTM
📖 第 1 页 / 共 2 页
字号:
按钮内容+图标+缺省指针+信息框方式&quot;。便如您想得到一个含&quot;确定&quot;和&quot;取消&quot;两个按<br>
钮、带&quot;?&quot;图标、缺省指针指向第二个按钮(即&quot;取消&quot;)的信息框,那么就该这样设置:<br>
mbType:=OKCancel+Question+DefaultButton2;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; title为信息框中显示文本的变量。</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; MsgBox的返回值与MessageDlg函数的返回值完全一样,例如返回mrYes表示&quot;Yes&quot;或<br>
&quot;是&quot; 按钮被按下,mrNo表示&quot;No&quot;或&quot;否&quot;按钮被按下等等。可参考MessageDlg函数的说<br>
明。下面即是在Delphi中通过调用Windows API的GetActive Windows函数和MessageBox<br>
函数来实现MsgBox函数的代码:{信息框函数}</font><big><big><big><br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; function 
TForm1.MsgBox(msg:string;mbType:Word;title:stri</font><big><big><big> <br>
</big></big></big><font size="3">ng):Word;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; var hWnd:HWND;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; 1pText,!pCaption:Pchar;</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; begin</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1pText:=StrToPch(title);</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; 1pCaption=StrToPch(msg);</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; hWnd:=GetActiveWindow();</font><big><big><big> 
<br>
</big></big></big><font size="3"> 
&nbsp;&nbsp;&nbsp; MsgBox:=MessageBox(hWnd,1pText,1pCaption,mbType);</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; end;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; {将Pascal字符串转换成null结尾字符串函数}</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; function 
TForm1.StrToPch(Str:string):PChar;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; var</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; a:PChar;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; begin</font><big><big><big> <br>
</big></big></big><font size="3"> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a:=StrAlloc(Length(Str)+1);</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StrPCopy(a,Str);</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StrToPch:=a;</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; end;</font><big><big><big> </big></big></big></p>

<p><font size="3">&nbsp;&nbsp;&nbsp; 二、文件拷贝函数CopyFDelphi提供了一组比较完整的文件操作函数,用它们可以完<br>
成几乎全部的文件操作,但恰恰缺少拷贝文件的函数。而文件拷贝的使用应该说是比<br>
较常用的,因此,笔者利用几个API函数定义了一个功能很强的文件拷贝函数CopyF。<br>
该函数代码如下(请注意:该函数中调用了上述的MsgBox函数):</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; {文件拷贝函数}</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; function TForm1.CopyF(var 
ExistingFileName:string;const</font><big><big><big> <br>
</big></big></big><font size="3">NewFileName:string; var Mode:Integer):Boolean;</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; var</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EFile,NFile:PChar;</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; CpFlag,FailIfExists:Boolean;</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; msg:string;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; ErrID,mbType:integer;</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; begin</font><big><big><big> <br>
</big></big></big><font size="3"> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EFile:=StrToPch(ExistingFileName);</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; NFile:=StrToPch(NewFileName);</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; if (Mode=1) or (Mode=3) then 
FailIfExists:=True</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; else FailIfExists:=False;</font><big><big><big> 
<br>
</big></big></big><font size="3"> 
&nbsp;&nbsp;&nbsp; CpFlag:=CopyFile(EFile,NFile,FailIfExists);</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; if not CpFlag then</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; begin</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ErrID:=GetLastError();</font><big><big><big> 
<br>
</big></big></big><font size="3"> 
&nbsp;&nbsp;&nbsp; ExistingFileName:=SysErrorMessage(ErrID);</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; if Mode&lt;2 then</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; begin</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg:='CopyFile Error!';</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; mbType:=OKOnly+Excalamation;</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; MsgBox(msg,mbType,ExistingFileName);</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; end;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; Mode:=ErrID;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; end;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; CopyF:=CpFlag;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; end;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; CopyF函数参数说明如下:</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; 若拷贝操作成功,函数CopyF返回True,失败函数CopyF返回False。</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; ExistingFileName是字符变量,输入时代表源文件名。若操作失败,则返回错误信息字符<br>
串(由于调用了API函数,在中文Windows下该信息当然就是中文)。 
NewFileName是字符<br>
常量,代表目标文件名。</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; Mode是整数变量,输入时代表拷贝的方式:</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; 0表示如果目标文件存在,将覆盖它,操作失败,将显示具有出错信</font><big><big><big> 
<br>
</big></big></big><font size="3">息的信息框;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; 1表示如果目标文件存在,不覆盖它,操作失败,显示具有出错信息</font><big><big><big> 
<br>
</big></big></big><font size="3">的信息框;</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; 2表示如果目标文件存在,将覆盖它,操作失败,不显示信息框;</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; 3表示如果目标文件存在,不覆盖它,操作失败,不显示信息框;</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; 当拷贝操作失败时,Mode将返回出错代码。</font><big><big><big> 
<br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; 总之,灵活应用API函数可以使您的应用程序的界面与您使用的Windows的语言环境相<br>
当和谐地融为一体,摆脱掉Delphi的痕迹,使您的程序给人以相当&quot;专业&quot;的感觉。最后说明<br>
一点,如果要使这些自定义的函数成为&quot;全局&quot;的,在其它单元中也能够使用,需将函数标题<br>
复制到Unitl单元interfaces的type段中(应删除&quot;TForml.&quot;几个字符);然后在调用函数的其他单<br>
元implementation中的user段中加入Unitl;在函数名前要加上&quot;Form1.&quot;几个字符,如在Unit2单<br>
元中调用MsgBox就应写成Form1.MsgBox。</font><big><big><big> <br>
</big></big></big><font size="3">&nbsp;&nbsp;&nbsp; (以上所有函数均在Windows 95中文版使用Delphi 
Desktop V2.0</font><big><big><big> <br>
</big></big></big><font size="3">调试通过)</font><big><big><big> </big></big></big></p>
</body>
</html>

⌨️ 快捷键说明

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