VB实现不占用CPU的延时
作者:admin 日期:2010-07-23
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Delay(ByVal t As Long)
Dim BeginTime As Long
BeginTime = timeGetTime
While timeGetTime < BeginTime + t
DoEvents
Sleep 1
Wend
End Sub
Private Sub Command1_Click()
Call Delay(5000)
MsgBox ("Hello world!")
End Sub
vb编程ListBox控件的ListCount不能大于32767?
作者:admin 日期:2010-06-17
vb编程picturebox的2个重要属性
作者:admin 日期:2010-06-03
AutoRedraw 属性
AutoRedraw 属性语法包含下面部分:
部分 | 描述 |
object | 对象表达式,其值是“应用于”列表中的一个对象。 |
Boolean | 布尔表达式,指定如何重绘对象,“设置值”中有详细描述。 |
设置值
boolean 的设置值如下:
设置值 | 描述 |
True | 使 Form 对象或 PictureBox 控件的自动重绘有效。图形和文本输出到屏幕,并存储在内存的图象中。该对象不接受绘制事件,必要时,用存储在内存中的图象进行重绘。 |
False | (缺省值)使对象的自动重绘无效,且将图形或文本只写到屏幕上。 当需要重画该对象时,Visual Basic 会激活对象绘制事件。 |
ScaleMode 属性
VB调用webbrowser技巧集
作者:admin 日期:2010-06-03
1、获得浏览器信息:
Private Sub Command1_Click()
WebBrowser1.Navigate "http://www.jlist.cn"
End Sub
Private Sub Command2_Click()
Dim oWindow
Dim oNav
Set oWindow = WebBrowser1.Document.parentWindow
Set oNav = oWindow.navigator
Debug.Print oNav.userAgent
Set oWindow = Nothing
Set oNav = Nothing
End Sub
vb用SendMessage操作剪贴板
作者:admin 日期:2010-05-25
要使用这一技巧,你就需要声明用于剪切、复制和粘贴的常数:
Private Const WM_COPY = &H301
Private Const WM_CUT = &H300
Private Const WM_PASTE = &H302
然后,声明对SendMessage API的调用:
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByValhWnd As Long, _
ByValwMsg As Long, ByValwParam As Long, lParam As Any) As Long
HWnd自变量能够接受消息发送的目的控件的句柄,而wMsg自变量会接受一个表明要被发送的是哪个对象的常数。WParam和lParam自变量被用来把其他信息同消息一起传递,但是不对WM_CUT、WM_COPY或者WM_PASTE使用。
下面是从菜单点击事件调用SendMessage API的代码:
Private Sub mnuCopy_Click()
Call SendMessage(Me.ActiveControl.hwnd, WM_COPY, 0, 0)
End Sub
Private Sub mnuCut_Click()
Call SendMessage(Me.ActiveControl.hwnd, WM_CUT, 0, 0)
End Sub
Private Sub mnuPaste_Click()
Call SendMessage(Me.ActiveControl.hwnd, WM_PASTE, 0, 0)
End Sub
这个技巧能够用于任何实现hWnd属性,并能够响应WM_CUT、WM_COPY和WM_PASTE消息的控件。还应该实现错误处理,以处理不带hWnd属性的控件。
vb用Like比较字符串
作者:admin 日期:2010-05-25
Like运算符可以让你比较两个字符串来判断它们是否匹配,它还支持通配符。例如,星号(*)代表一个或者多个字符,问号(?)代表单个字符,而井号(#)代表单个数字。另外,通过使用左括号和右括号([、]),你可以指定一个用来匹配的字符集合。
下面的代码给出了几种可以使用Like运算符的方法。
If "(800) 555-5555" Like "(###) ###-####"
Then
注释:有效的电话号码
End If
If "1ABCDEF" Like "#[A-Z]*" Then
注释:有效
End If
If "1ABCDEF" Like "#[a-z]*" Then
注释:有效
End If
Like运算符可以简化你的验证有效性逻辑并提高易读性。对比较复杂方式,它也比InStr函数易于使用。
vb取得Windows临时文件的路径
作者:admin 日期:2010-05-25
要获得Windows的临时文件的存放路径,可以使用GetTempPath API函数。以下是该函数的声明:
Private Declare Function GetTempPath Lib "kernel32" Alias_
"GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
“BufferLength”是这个函数的第一个参数,它将指定接受传进来字符串的缓冲区大小。“Buffer”参数用于装载临时文件路径的一个预初始化字串。
调用前,初始化一个(通常长为255)的以null为结尾的字符串,长度为字符长度加1。然后调用这个函数,这个函数的返回值是一个Long型的变量,该返回值将是TEMP路经的真实长度。
Dim lngFolderSize As Long
Dim strFolder As String
Dim lngLength As Long
lngFolderSize = 255
strFolder = String(lngFolderSize + 1, 0)
lngLength = GetTempPath(lngFolderSize, strFolder)
If lngLength > 1 Then
strFolder = Left(strFolder, lngLength)
Else
strFolder = vbNullString
End If
MsgBox strFolder
当你的用户需要确定临时文件目录,并且应用程序将在那里创建临时的工作文件时,这个API函数将十分有用。
VB利用API创建文件目录
作者:admin 日期:2010-05-25
Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Sub Main()
在C盘创建了"VB API"目录
Call CreateNewDirectory("C:\VB API")
MsgBox "在C盘创建了 VB API 目录"
VB对数据进行加解解密
作者:admin 日期:2010-05-25
VB创建可以输出函数的DLL
作者:admin 日期:2010-05-25
VB中创建的DLL只是COM组件,无法作为输出函数的DLL。今天从朋友哪里搞到一种可以创建输出函数的DLL的方法,欣喜之余,不敢独享,现在把他介绍给大家。
VB编译文件实际上采取了两次编译的方法,首先是调用c2.exe产生OBJ文件,然后调用Link.exe连接。如果在link的时候添加EXPORT选项,实际上是可以输出函数的。但是,在VB的工程选项中将这些屏蔽了。而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法通过Link来输出函数了。不过我找到一个比较龌鹾的变通的方法,就是先创建一个Exe工程,在Form_Load事件里面写下面的语句:
Private Sub Form_Load()
If (MsgBox("hehe", vbOKCancel) = vbOK) Then
Shell "link2.exe " & Command$
End If
End
End Sub
然后编译为linktemp.exe,接下来将LINK.EXE改名为Link2.exe,将linktemp.exe改名为link.exe。这样在VB调用link.exe时会弹出对话框,处理就会中断。这时就可以有机会将OBJ文件拷贝出来了 J
VB开发、打包、发布ActiveX控件
作者:admin 日期:2010-05-25
vb打开文本文件
作者:admin 日期:2010-05-23
如何更有效地打开文本文件应该是一个值得研究的课题,假设F盘下有一个名为d.txt的文本文件,若需要尝试这些例子请作相应的改动。
方法一:
用定长的String变量获取文本内容。由于定长String变量支持的下界为65400,所以在打开超过32K字节的文件时超出部分的字节将无法获取:
Private Sub Command1_Cliack()
Dim sA As String * 65400 '声明定长String变量
Open "F:\d.txt" For Binary As #1 '用二进制打开文件
Get #1, , sA '用Get语句从文件中获取字节
Text1 = sA '显示打开的文件
Close #1 '关闭文件
End Sub
方法二:
先声明一字符串变量,然后用空格填充字符串,使变量大小与文件大小一致,再通过Get语句将文件全部数据存储到变量中,从而达到获取整个文件字节数的目的。此法可以打开大于32K的文件,但应该注意的是,装载文件的容器必须能装载大于32K的文件,下例用RichTextBox控件显示打开的文件:
Private Sub Command1_Click()
Dim sA As String
Open "f:\d.txt" For Binary As #1
sA = Space(LOF(1)) '用空格填充sA变量
Get #1, , sA '用Get语句获取文件全部内容
RichTextBox1.Text = sA
Close #1
End Sub
方法三:
用StrConv函数将文件的控制字符串数据和Unicode码之间进行转换,从而达到打开文件的目的。可打开任意大小文件。此法笔者曾有一篇文章谈及,这里再给一个简单例子:
Private Sub Command1_Click()
Open "f:\d.txt" For Input As #1
RichTextBox1.Text = StrConv(InputB$(LOF(1), 1), vbUnicode)
Close #1
End Sub
方法四:
用Shell语句直接调出Windows的记事本,给个文件名即可轻而易举地打开文本文件。此法适合于打开程序的Readme文件(注意:在可执行文件和要打开的文本文件之间要有空格):
Shell "NotePad.EXE f:\d.txt",vbNormalFucus
方法五:
用RichTextBox控件自身的LoadFile属性打开文件:
RichTextBox1.LoadFile "f:\d.txt", rtfText
广告位