VB编程俱乐部

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

    VB编程俱乐部推出后,我每天都会收到大量的来信,为了使你关于VB编程的疑问能尽快得到解答,在提交问题或解答问题时,可使用VBForums@126.com和VBForums@bigfoot.com这两个邮件地址,也可以通过访问网站http://VBForums.yeah.net在BBS上讨论。另外有许多只能上169的网友来信询问,如何订阅VBForums,在这里我告诉你们一个方法:你可以申请一个163和169通用的免费信箱。
#1    问题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文件可以做很多事情,只要你学会举一反三,就可以成为行家里手。
#1    问题2:我用VB5生成了一个可执行文件,想更改它的图标有什么办法?
    回答:更改VB5的可执行文件的图标需要分三步进行:⑴为某个Form制定图标(如MainForm);⑵修改工程属性,点选“生成”选项卡,在“图标”列表框中选中MainForm;⑶编译程序。完成上述操作后,看看,你的程序图标是否已改变?
#1    问题3:如何用编程方式调用通过VB报表设计器设计的报表。
    回答:在工程中引用CrystalReport 控件,然后将出现在 Toolbox 上的相应控件图标拖到Form上。选中这个控件(命名为CryReport),修改其各种属性值,如:报表文件名称等。最后,就可以用代码激活报表预览或打印窗口了,如:CryReport.Action = 1 。
#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
#1    问题5:我用EXCEL VBA编写宏,我想在打开电子表格文件时立即自动运行该宏命令,可不可以?
    回答:当然可以!你可以为你的 Workbook 编写一个 Open事件函数,在这个函数里做你需要做的事即可,例如:
    Private Sub Workbook_Open( )
    MsgBox″Main autoexec!″
    End Sub