VB编程俱乐部推出后,我每天都会收到大量的来信,为了使你关于VB编程的疑问能尽快得到解答,在提交问题或解答问题时,可使用
VBForums@126.com 和 VBForums@bigfoot.com
这两个邮件地址,也可以通过访问网站 http://VBForums.yeah.net 在 BBS上讨论。另外有许多只能上169的网友来信询问,如何订阅VBForums,在这里我告诉你们一个方法:你可以申请一个163和169通用的免费信箱。
问题1:在程序运行时,怎样把多个文本框的内容保存起来?(保存到一个文件中,打开时要在相应的文本框输出)。
回答:可以利用 INI 文件和Windows95/98的注册数据库来保存,下面讲解如何使用
INI 文件来保存和读取内容。假设当前有 Text1、Text2、Text3三个文本框的内容需要保存,INI文件名为
ABC.INI。
首先新建一个Module,然后,在此Module中说明 API 函数:
Declare Function WritePrivateProfileString Lib ″ker nel32″ Alias ″WritePrivateProfileStringA″
(ByVal lpApplica tionName As String, ByVal lpKeyName As Any, ByVal lp String As Any, ByVal
lpFileName As String) As Long
Declare Function GetPrivateProfileString Lib ″kernel32″ Alias ″GetPrivateProfileStringA″
(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String,
ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
为了简化工作,最好定义好几个函数,给程序提供更简单的操作,首先定义一个用于输入的函数WriteOneString:
Private Function WriteOneString(ByVal Section As String, ByVal Key As String, ByVal
value As String) As Boolean
Dim x As Long, buff As String * 128, I As Integer
buff = value + Chr(0)
x = WritePrivateProfileString(Section, Key, buff,
″ABC.INI″)
WriteOneString = x
End Function
然后定义一个用于输出的函数 ReadOneString :
Private Function ReadOneString(ByVal Section As String, ByVal Key As String) As
String
Dim x As Long, buff As String * 128, I As Integer
x = GetPrivateProfileString(Section, Key, ″″, buff, 128, ″ABC.INI″)
I = InStr(buff, Chr(0))
ReadOneString = Trim(Left(buff, I - 1))
End Function
这时,你就可以在 Form 的 Load 和 UnLoad
事件里分别进行保存和读取操作。
Private Sub Form_Load()
Text1 = ReadOneString(″Option″,″Text1″)
Text2 = ReadOneString(″Option″,″Text2″)
Text3 = ReadOneString(″Option″,″Text3″)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Text1 = WriteOneString(″Option″,″Text1″,Text1)
Text2 = WriteOneString(″Option″,″Text2″,Text2)
Text3 = WriteOneString(″Option″,″Text3″,Text3)
End Sub
利用INI文件可以做很多事情,只要你学会举一反三,就可以成为行家里手。
问题2:我用VB5生成了一个可执行文件,想更改它的图标有什么办法?
回答:更改VB5的可执行文件的图标需要分三步进行:⑴为某个Form制定图标(如MainForm);⑵修改工程属性,点选“生成”选项卡,在“图标”列表框中选中MainForm;⑶编译程序。完成上述操作后,看看,你的程序图标是否已改变?
问题3:如何用编程方式调用通过VB报表设计器设计的报表。
回答:在工程中引用CrystalReport 控件,然后将出现在 Toolbox
上的相应控件图标拖到 Form 上。选中这个控件(命名为CryReport),修改其各种属性值,如:报表文件名称等。最后,就可以用代码激活报表预览或打印窗口了,如:CryReport.Action
= 1 。
问题4:许多用VB编写的软件,当选择“关于”时,其中的E-mail地址和主页网址都是蓝色带下划线的链接形式,这是怎么实现的呢?
回答:热心的Prisoner 提供了使用API函数ShellExecute 的方法。
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 Label1_Click()
Dim HyperJump
HyperJump = ShellExecute(0&, vbNullString, WEB, vbNullString,vbNullString,
vbNormalFocus)
End Sub
其中WEB为你定义的超连接地址,例如:
Private Const WEB = ″http://i.am/hellprisoner″
如果需要调入E-mail,就要在E-mail地址前加入“mailto:” 例如
Private Const WEB = ″mailto:prisoner@990.net″
如果在Label的属性中再设置MousePointer = 99 , 并把MouseIcon设置为一只手的图标,当鼠标移动到标签上时,指针就变成手的形状,这就更像超连接了。
WEIV网友提供了更简单的解决方法:先建立两个Label控件Label1和Label2,设它们的Caption分别为“我的mail”
和“我的主页”(或是其他你想要显示的内容),然后加入如下代码:
Private Sub Label1_Click()
Set ie = New InternetExplorer
ie.Visible = False
ie.Navigate ″mailto:weiv@163.net″
End Sub
Private Sub Label2_Click()
Set ie = New InternetExplorer
ie.Visible = True
ie.Navigate ″http://playworld.126.com″
End Sub
问题5:我用EXCEL VBA编写宏,我想在打开电子表格文件时立即自动运行该宏命令,可不可以?
回答:当然可以!你可以为你的 Workbook 编写一个 Open
事件函数,在这个函数里做你需要做的事即可,例如:
Private Sub Workbook_Open()
MsgBox ″Main autoexec!″
End Sub
(VB版主 庞一鸣)
本文出自:《电脑报》1999年3月01日第08期 |