您的位置:首页 > 编程语言 > VB

VB高手搜集-常见问题总结(2)

2008-11-18 19:07 316 查看
如何让程序在 Windows 启动时自动执行
  有以下二个方法:

  方法1: 直接将快捷方式放到启动群组中。

  方法2:
  在注册档 HKEY_LOCAL_MACHINE 中找到以下机码://Software//Microsoft//Windows//CurrentVersion//Run
新增一个字串值,包括二个部份:

  1. 名称部份:自己取名,可设定为 AP 名称。

  2. 资料部份:则是包含 /'全路径档案名称/' 及 /'执行参数/'

  例如:

  Value Name = Notepad
  Value Data = c://windows//notepad.exe

  在 TextBox 中如何限制只能输入数字

  参考下列程序:
  Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii < 48 Or KeyAscii > 57 Then
  KeyAscii = 0
  End If
  End Sub

  TextBox 中能不接受某些特定字符(如 /'@#$%/")

  方法有好几种, 以下列举二种:

  方法1: 可以使用 IF 或 Select Case 一个个判断, 但如果不接受的字符多时, 较麻烦!

  方法2: 将要剔除的字符统统放在一个字串中,只要一个 IF 判断即可 !! 如下:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim sTemplate As String
sTemplate = /"$%^&*()_+-=/" /'用来存放不接受的字符
If InStr(1, sTemplate, Chr(KeyAscii)) > 0 Then
KeyAscii = 0
End If
End Sub

  如何让鼠标进入 TextBox 时自动选定 TextBox 中之整串文字

  这个自动选定反白整串文字的动作,会使得输入的资料完全取代之前在 TextBox 中的所有字符。
Private Sub Text1_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text1)
End Sub

  如何制作透明的表单 (Form)

  请在声明区中放入以下声明:

  Const GWL_EXSTYLE = (-20)
  Const WS_EX_TRANSPARENT = &H20&
  Const SWP_FRAMECHANGED = &H20
  Const SWP_NOMOVE = &H2
  Const SWP_NOSIZE = &H1
  Const SWP_SHOWME = SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE
  Const HWND_NOTOPMOST = -2

  Private Declare Function SetWindowLong Lib /"user32/" Alias
/"SetWindowLongA/" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal
dwNewLong As Long) As Long

  Private Declare Function SetWindowPos Lib /"user32/" (ByVal hwnd
As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As
Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

  在 Form_Load 使用的范例如下:
Private Sub Form_Load()
SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_TRANSPARENT
SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0&, 0&, 0&, 0&, SWP_SHOWME
Me.Refresh
End Sub

  如何把小图片填满 Form 成为背景图

  对于这个问题,我看过很多方法,有的方法很麻烦,要声明一大堆 Type,用一大堆的 API,但是有一个最笨但我认为最好的方法如下: (就好像拼磁砖一样,不用任何 API, 不必声明任何 Type)

  在 Form 中放一个 PictureBox,Picture 属性设定为某一张小图,AutoSize 属性性设定 True,完成的模组如下:
Sub PictureTile(Frm As Form, Pic As PictureBox)
Dim i As Integer
Dim t As Integer
Frm.AutoRedraw = True
Pic.BorderStyle = 0
For t = 0 To Frm.Height Step Pic.ScaleHeight
For i = 0 To Frm.Width Step Pic.ScaleWidth
Frm.PaintPicture Pic.Picture, i, t
Next i
Next t
End Sub

  PictureTile 这个模组共有二个参数,第一个是表单名称,第二个则是 PictureBox 的名称。以下为一应用实例:
Private Sub Form_Load()
PictureTile Me, Picture1
End Sub

  关闭指定的程序

  要做到像 Task Manager 一样,可以关闭指定的程序,方法如下:

  在声明区中放入以下声明:(16位 改成 win31 API)

  Declare Function FindWindow Lib /"user32/" Alias /"FindWindowA/"
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

  Declare Function PostMessage Lib /"user32/" Alias /"PostMessageA/"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam
As Any) As Long

  Public Const WM_CLOSE = &H10

  以下之范例示范如何关闭一个视窗标题 (Caption) 为 【小算盘】的程序:
Dim winHwnd As Long
Dim RetVal As Long
winHwnd = FindWindow(vbNullString, /"小算盘/")
Debug.Print winHwnd
If winHwnd <> 0 Then
RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)
If RetVal = 0 Then
MsgBox /"Error posting message./"
End If
Else
MsgBox /"并未开启小算盘程序./"
End If

  如何隐藏及再显示鼠标

  很简单,只用到了一个 ShowCursor API,参数也很简单,只有一个 bShow,设定值如下:

  True:显示鼠标 / False:隐藏鼠标

  Declare Function ShowCursor Lib /"user32/" Alias /"ShowCursor/" (ByVal bShow As Long) As Long

  如何从您的应程序中结束 Windows 重开机

  很多软件在 Setup 完之后都会自动关机重开机,以便让某些设定值可以生效,其实这个功能很简单,只要几行指令就可以做到了!

  关键就是要使用 ExitWindowsEx 这个 API,这个 API 只有二个参数,第一个参数是一个 Flag,目的是要告诉
Windows 要以什么方式关机,在下面的声明中会列出可用的 Flag 常数值,至于第二个参数则是一个保留值,只要设定成 0 就可以了。

  很重要的一点是:如果您想要让关机动作更顺利,记得要 Unload 您的程序!

  在声明区中 (Bas Module / Form Module) 加入以下声明:

  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

  实例:如果您想强迫关机重开机,程序码如下:
ret = ExitWindowsEx(EWX_FORCE OR EWX_REBOOT, 0)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: