VB 版 (精华区)
发信人: bloom (├┝┞┟┠┡┢┣), 信区: VB
标 题: 软件世界 > VB编程俱乐部 fzx
发信站: 哈工大紫丁香 (2000年07月28日16:57:58 星期五), 站内信件
发信人: fzx (化石◎一骑红尘), 信区: Test
标 题: 软件世界 > VB编程俱乐部
发信站: 紫 丁 香 (Mon Nov 1 08:03:35 1999), 转信
大家好,VB编程俱乐部又与大家见面了,欢迎大家积极参与进
来。提交问题或解答问题,既可使用 VBForums@126.com 或
VBForums@bigfoot.com邮件地址,也可以通过访问网站 http://
VBForums.yeah.net 在 BBS板上讨论来达到。订阅VBForums请向 sub
-vbforums@e-lists.lawton.com.cn 发送一封空白信即可。
问题1:制作一个帮助文件如wangqr.hlp并采用帮助菜单来访
问,如何在vb程序中实现?
答:在窗体上放一CommonDialog控件,在菜单 Click 代码中写
入:
CommonDialog1.HelpFile = ″路径和帮助文件名称″
CommonDialog1.HelpCommand = cdlHelpContents
′列出帮助主题,若为cdlHelpPartialKey则为列出搜索项目
列表。
CommonDialog1.ShowHelp
问题2:我原来的程序是在VB5中作的,用了DBGRID控件,但
在VB6中没有这个控件,我想把程序从VB5升级到VB6,我先把
DBGRID32.OCX,DBGRID32.DEF拷到Windows/System32/下,然后注
册,当用到这个控件时,提示"该部件的许可信息没有找到,在设
计环境中,没有合适的许可证使用该功能"。为什么?请问该怎么做?
答:解决方法有两种,其一、可以先安装VB5,再安装VB6即可;
其二、也可以将VB5下的dbgrid32.reg和dbgrid32.ocx等文件复
制到Windows\System下,运行dbgrid32.reg进行注册,最后在VB6
下引用即可。
问题3: 如何用Dir()函数列出C:\下所有*.TMP文件,并且用
文本框输出?
答:下面是一个列出指定目录下所有符合要求的文件名的函数:
Public Function AutoListFiles(ByVal sDirName As
String,ByVal FileFilter As String ) As Boolean
On Error GoTo RF_ERROR
Dim sName As String, sFile As String, sExt As String
Dim sDirList() As String, iDirNum As Integer, i As Integer
′首先枚举所有文件
sFile = Dir(sDirName + FileFilter, vbNormal + vbArchive
+ vbHidden)
Do While Len(sFile) >0
sFile = UCase(Trim(sFile))
′在此处可以将 sFile 加入到一个 Text 控件...
sFile = Dir ′下一个文件
Loop
iDirNum = 0
sName = Dir(sDirName + ″*.*″, vbDirectory +
vbNormal)
Do While Len(sName) >0
If sName <> ″.″ And sName <> ″..″ Then
iDirNum = iDirNum + 1
ReDim Preserve sDirList(1 To iDirNum)
sDirList(iDirNum) = sDirName + sName + ″\″
End If
sName = Dir ′下一个目录
Loop
For i = 1 To iDirNum
AutoListFiles sDirList(i) ′递归调用
Next
End If
RF_EXIT:
AutoListFiles = True
Exit Function
RF_ERROR:
MsgBox Err.Description, vbCritical, ″″
Resume RF_EXIT
End Function
调用上述函数的示例:
AutoListFiles(″C:\″,″*.TMP″)
之所以采用上述先处理文件,再处理子目录,一是思路较清晰,
另外也有模仿 Prolog 语言中的"尾递归"的想法,当然,VB中是
不支持尾递归的。
问题4:请问怎样才能实现重启系统?是用shell″rundll32.exe
user.exe,restartwindows″吗?为什么会提示user.exe出错,
restartwindows项目丢失?
答:请首先在模块中增加以下说明:
Public Const EWX_LOGOFF = 0
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4
Declare Function ExitWindowsEx Lib ″user32″ Alias ″
ExitWindowsEx″ (ByVal uFlags As Long, ByVal dwReserved As Long)
As Long
′如果想强制重新启动计算机,函数应该这样使用:
t& = ExitWindowsEx(EWX_FORCE OR EWX_REBOOT, 0)
(魏霄鹏 提供解答)
问题5:怎样在软件中设定热键呢?就像抓图软件一样,无论窗
体活不活动只要按下热键就可执行一定功能。
答:可以用API,在Form中加入
Private Declare Function GetAsyncKeyState Lib ″user32
″ Alias ″GetAsyncKeyState″ (Byval vkey as Long) as integer
Private Function MyHotKey(vKeyCode) As Boolean
MyHotKey=((GetAsyncKeyState(vKeyCode)<0)
End Function
然后在循环中或Timer的Timer事件中检测:
If myHotKey(vbkeyA) then .....
其中vbkeyA是键盘″A″的常数,其他键可按F1查得。
(杨光宏 提供解答)
下载本期推荐软件
--
想集中阅读本期的《电脑报》所有文章的网友可到internet版的精华区
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: gaea.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.222毫秒