技巧索引:[ 上 10 个 | 下 10 个 ]
Text 转换为 Access MDB
处理过程时的鼠标显示
让程序启动快一点
创建无 Icon 窗口
创建不规则窗口
向文件中写入非 ASCII 字符
显示程序的版本
监视程序运行情况
捕捉 MouseExit 事件
处理多个具有相同要求的控件

捕捉 MoueExit 事件 难
MouseDown、MouseUp、MouseMove。VB 似乎提供了很好的 Mouse 事件。但好象还缺少什么!对!还差 MouseExit(鼠标移出)事件。在 VB 中,我们要捕捉 MouseExit 事件,必须用 API 函数:
Private Declare Function SetCapture Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
然后,我们可以在控件(以 Picture1 为例)的 MouseMove 事件上加上以下代码:
    Dim MouseExit As Boolean
    MouseOver = (0 <= X) And (X <= Picture1.Width) And (0 <= Y) And (Y <= Picture1.Height)
    If MouseExit Then
        ........        
        SetCapture Picture1.hWnd
    Else
        ........
        ReleaseCapture
    End If

[返回技巧索引]


处理多个具有相同要求的控件 中
我们往往有时需要处理多个具有相同特性的控件,如:把 100 个 Text 及 Label 的内容加起来。这时,我们可以使用下面的技巧:1、如果是同一种类型的控件,我们可以使用控件组达到目标。2、如果不是同一类型控件,控件组就无法使用,这时,我们还可以利用控件的 Tag 属性,我们可以把每个控件设置一个 Tag 标志。在程序中,我们可以用下面代码来察看是否是我们需要的控件:
For i=0 To Controls.Count-1
    If Controls(i).Tag = "MyTag" Then ......
Next i

[返回技巧索引]


Text 转换为 Access MDB 中
Text 文件类型在很多软件中都为一般应用程序与数据库之间架起一座桥梁。你可以使用 Text ISAM 驱动程序和 SQL 来把 Text 文件转换成 Access MDB 数据库文件,首先,为文本文件创建一个 SCHEMA.INI 文件。然后,你可以使用下面的代码来实现转换:
Dim db As Database, tbl as TableDef
Set db = DBEngine.CreateDatabase(App.Path & "\mymdb.mdb", dbLangGeneral, dbVersion_0)
Set tbl = db.CreateTableDef("Temp")
tbl.Connect = "Text;database=c:\vbpj\data"
tbl.SourceTableName = "Customer#txt"
db.TableDefs.Append tbl
db.Execute "Select Temp.* into NewTable from Temp"
db.TableDefs.Delete tbl.Name
db.Close
Set tbl = Nothing
Set db = Nothing

[返回技巧索引]


处理过程时的鼠标显示 难
为让你的程序更加专业一点,我们往往需要在程序处理过程时的鼠标形状显示为“沙漏”状态。我们一般的方法是在子程序的开始及结尾编程来改变鼠标形状,这样十分烦琐且容易忘记。我们还可以以下面的方法来实现这一目标:
1、创建一个新类,命名为:CHourGlass;
2、在此类中加入以下代码:
Private Sub Class_Initialize()
Screen.MousePointer = vbHourglass
End Sub
Private Sub Class_Terminate()
Screen.MousePointer = vbDefault
End Sub
3、在子程序的开始加入下面代码:
Dim MyHourGlass As CHourGlass
Set MyHourGlass = New CHourGlass

[返回技巧索引]


让程序启动快一点 易
是否觉得你的应用程序启动得太慢了?你可以用下面小技巧让你的程序启动起来感觉快一点:
在你的启动窗口的 Form_Load 事件的第一行加入下面一行代码:Me.Show
园主点评:VB 在窗口显示前一般先执行 Form_Load 事件中的程序,如果你在 Form_Load 中加入大量代码,就可以导致 VB 执行代码很久而不显示窗口,我们在 Form_Load 事件的第一行强制加入 Me.Show 让窗口先显现出来。这样给人感觉程序运行好象就快了点。

[返回技巧索引]


创建无 Icon 的窗口 易

我们在很多时候都需要那种无 Icon 的 窗口,如“关于……”“查找”等。在 VB 中,我们可以按以下步骤来创建此类窗口:
1、设置窗口的 BorderStyle = 3;
2、在 Form_Load 中加入:Me.Icon = LoadPicture("")

[返回技巧索引]


创建不规则窗口 中

Win32 API 有很多让你意想不到的功能。要创建特殊的不规则窗口看上去似乎很难。但我们如果我们说我们用几行代码就可以实现,这似乎不可思议。但事实就是如此!请试试:

Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Private Sub Form_Load()
Show 'The form!
SetWindowRgn hWnd,   CreateEllipticRgn(0, 0, 300, 200),   True
End Sub

上述代码可以创建一个椭圆形状的窗口。怎么样??

[返回技巧索引]


向文件中写入非 ASCII 字符 中

如何向一个文件中写入非ASCII字符(ASCII码在128-255之间)?这在 VB3 中按常规方法就可以很好处理。但是,自 VB4 起,微软引入 Unicode 后,此问题就显得有些麻烦。方法如下:

Dim a As Byte     '如果你不用 Unicode,微软推荐使用 Byte 类型替换 String 类型
a=&HF5             '此处直接给处 ASCII 码即可
Open "test.dat" For Binary As #1
Put #1, , a
Close (1)

[返回技巧索引]


显示程序的版本 易

如果你想在程序的“关于……”中显示程序的版本(以标准方式显示:即 x.xx.xxxx),你可以使用以下子程序:
Public Function GetMyVersion() As String
Static strMyVer As String
If strMyVer = "" Then
strMyVer = Trim$(Str$(App.Major)) & "." & Format$(App.Minor, "##00") & "." Format$(App.Revision, "000")
End If
GetMyVersion = strMyVer
End Function

[返回技巧索引]


监视程序的运行情况 难
 
我们使用 VB 提供的 Shell 方法调用外部程序时,Shell 方法执行后会继续执行下面的代码,而我们不能确定外部程序什么时候调用结束。我们现在可以通过以下方法来实现对被调用程序的监视:
(1)首先在工程中添加一个模块,然后声明 OpenProcess 及 CloseHandle 这两个 API 函数;
(2)然后加入下面的函数:
Public Function StillRun(ByVal ProgramID) As Boolean
Dim lHProgram As Long
Dim lReturn As Long
hProgram = OpenProcess(0, False, ProgramID)
If Not hProgram = 0 Then
    StillRun = True
Else
    StillRun = False
End If
CloseHandle hProgram
End Function
说明:ProgramID 是 Shell 函数返回的那个值, 那是一个进程号;lHProgram 是被测程序的进程句柄;lReturn是进程的返回码。本程序只是在WIN32下有效,使用重要注意一个问题, 就是代码的重入问题。可以用类似以下的代码来解决。
While StillRun(id)
    DoEvents
Wend

[返回技巧索引]


[中国人]向你推荐好站点,非英文站点哦快按此图。
い瓣いゅが羛呼隔