微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题VB编程俱乐部
栏目软件世界
作者庞一鸣
发布1999年第42期13版
  大家好,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查得。(杨光宏 提供解答)