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毫秒