VB编程俱乐部

Author: 庞一鸣 Date: 1999年 第50期 13版


  这是为悼念Prisoner而作的专题,他回答的问题多得数也数不清,可如今他却离我们远去了!
  这期精选了他生命的最后阶段回答的6个问题如下。
    问题1:4×4的矩阵为:
  1   2   3   4
  5   6   7   8
  9   10  11  12
    13  14  15  空
  随机打散后,有何算法可以保证回复到上面的排序形式。 
    回答:问题其实很简单,可以把二维数组先转化为一维数组,进行升序排序,然后再转化为二维数组。
    问题2:如何实现二进制<-->十进制<-->十六进制<-->八进制的转换?
    回答:十进制转换为八进制、十六进制可以用Oct\Hex函数,注意返回的都是字符型。对于其他的转换,可以简单地把其他进制先转换为十进制。再把十进制转换为二进制,而其他进制转换为十进制只要简单的乘法和加法就行了。
    问题3:怎样点击窗体上的标签控件(显示主页地址)即可自动调出浏览器?怎样点击窗体上的标签控件(显示眉儿地址)即可自动调出E-mail软件?
    回答:使用API函数ShellExcute
  Declare Function ShellExecute Lib ″shell32.dll″ Alias ″ShellExecuteA″ _
  (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As _
    String, ByVal lpParameters As String, ByVal lpDirectory As String,_
  ByVal nShowCmd As Long) As Long
  在Label控件的click事件上加入代码:
  Private Sub lblURL_Click()
  Dim HyperJump
  HyperJump = ShellExecute(0&, vbNullString, WEB, vbNullString,vbNullString, vbNormalFocus)
  其中WEB为你定义的超链接地址,例如:
  Private Const WEB = ″http://i.am/hellprisoner″
  如果需要调入Email,就要在Email地址前加入mailto: 例如
  Private Const WEB = ″mailto:prisoner@990.net″
  如果再在Label的属性中设置MousePointer = 99  'Custom 并把MouseIcon设置为一只手的图标,当鼠标移动到标签上时,指针就变成手的形状,这就更像超链接了。
    问题4:如何在VB4中得到一个文本文件的长度(其长度大于64K)。我试过用getfilesize()不行。能不能用LOF()循环,请给出具体代码。或是用Window API方法。
    回答:其实getfilesize()就是Windows API函数。 
  Declare Function GetFileSize Lib ″kernel32″ Alias ″GetFileSize″ _
  (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
  或者用以下函数,不过可能比较复杂。
  Declare Function GetFileInformationByHandle Lib ″kernel32″ Alias
  ″GetFileInformationByHandle″ (ByVal hFile As Long, lpFileInformation As
  BY_HANDLE_FILE_INFORMATION) As Long
  Type BY_HANDLE_FILE_INFORMATION
  dwFileAttributes As Long
  ftCreationTime As FILETIME
  ftLastAccessTime As FILETIME
  ftLastWriteTime As FILETIME
  dwVolumeSerialNumber As Long
  nFileSizeHigh As Long
  nFileSizeLow As Long
  nNumberOfLinks As Long
  nFileIndexHigh As Long
  nFileIndexLow As Long
  End Type
    问题5:用access开发的数据库应用程序如何脱离access在其它机器上运行? 
    回答:有一位朋友告诉我Office97开发员版本有将Access97数据库编译为可执行程序的工具。还有一个办法,有一个工具叫AccessToVB (最新版本4.02),可以将Access97数据库转换为VB5/6的工程,然后就可以编译为可执行文件了。不过可能有一小部分代码还需要手工修改,我刚刚拿到手,还没有来得及试验。http://www.gfminc.com/AccessToVB4.zip 下载试用版。
    问题6:在进行多个文本框输入时,怎样控制输入完第一个文本框时用回车键跳跃到第二个文本框,而不是用TAB键来切换。
    回答:假设有text1和text2两个文本框,加入如下代码即可实现:
  Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
  If KeyCode = vbKeyReturn Then
  Text2.SetFocus
  End If
  End Sub