精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VB和Basic>>● VB和Basic(1)>>文章连载>>VB邮件>>VB邮件(6.8)

主题:VB邮件(6.8)
发信人: aaaaaaaaa()
整理人: cobe(2000-02-12 23:53:10), 站内信件
                      编者的话
====================================================================
大家好!
    这是关于VB和ASP的免费邮件列表。
    如果您有问题或想回答别人的问题,请给我写信。
    如果您有好的作品或您发现了好的作品,不要忘
了让大家共享。
    热情欢迎您的参与!!!
                                版主   冯德平
                                [email protected]
=============================================
            VB邮件(6.8)
a VB应用程序中用DDE功能开发AutoCAD for Windows 
 
目前,许多工程CAD系统是以AutoCAD作为支撑软件,在其基础上进行二次开发而
形成的。AutoCAD R12 for Windows 以AutoLISP和ADS作为二次开发工具,但它们
都有不足之处,AutoLISP速度慢,没有友好的开发环境,ADS是基于C语言的开发
环境,而C语言面向Windows编程本身难以掌握,因此AutoLISP和ADS的使用都受到
一定的限制。VB是Windows下主要的开发工具之一,它的“可视性”和“事件驱动
性”简化了面向Windows的编程,深受广大用户的青睐。Windows下,VB和AutoCA
D都支持强有力的DDE(动态数据交换)功能,用VB编写具有DDE功能的程序来控制A
utoCAD,既能与AutoCAD交换各种复杂的数据结构,又能向AutoCAD发送命令,由
此开发出的应用程序能满足用户的需要,同时又缩短了开发周期。本文结合实例
介绍了用VB开发AutoCAD的途径与方法。 
一、直接利用DDE功能开发 

  DDE是Windows的强大功能之一,它可以使应用程序自动地接收由其它应用程
序发送来的数据,当传送端的数据有变化时,接收端的数据也会随之改变,也可
将命令或键盘输入传递给其它程序,实现远程控制。

  在VB编程环境中,创建应用程序的方法很简单,首先是设计用户界面,也就
是在空白窗体中放入所需要的控件,如命令按钮,单选钮,文本框,标签,图片
框等,然后针对各控件上要发生的事件(如鼠标单击,鼠标移动等)书写事件过程
,最后将编写的应用程序运行,调试,生成执行文件即可。VB中能和其它Window
应用程序建立DDE通道的控件有文本框,标签和图片框。下面结合简单实例,说明
VB应用程序与AutoCAD间建立DDE通道和交换数据的方法。

  在VB中启动一个新项目,参见图(1)建立窗体,其中“建立链接”,“直线”
,“标注”,“退出”为命令按钮,标有“Text1”的为文本框,用于建立DDE通
道,并输入下面的事件代码。 

 Option Explicit

 Private Sub cmdLine_Click() '画直线

  Text1.LinkExecute " [^3^3line 3,3 8,8 ^3]"

 End Sub

 Private Sub cmdText_Click() '标注文字

  Text1.LinkExecute " [^3^3text 10,10 1 90 AUTOCAD!^10]"

 End Sub

 Private Sub cmdLink_click() '建立链接

  Text1.LinkMode = 0

  Text1.LinkTopic = "autocad.dde|system"

  Text1.LinkMode = 2

 End Sub

 Private Sub cmdExit_click() '退出

  End

 End Sub 

  运行此应用程序,注意在运行前,一定要先加载AutoCAD。单击“建立链接”
按扭,cmdLink_Click()过程被执行,执行时设置文本框Text1的LinkTopic和Lin
kMode的属性,完成VB应用程序与AutoCAD间DDE通道的建立。LinkTopic属性用于
通知AutoCAD由谁来提供数据,它被管道符“|”分成两部分,第一部分“AutoCA
D.DDE”为应用程序名,第二部分“System”是通讯的主题。LinkMode属性用于切
实建立链接,在LinkMode=0时,表示关闭以前的DDE通道,在LinkMode=2时,表示
以手动模式激活DDE通道。

  在完成DDE链接后,VB应用程序就可以与AutoCAD间进行数据交换或命令传送
了。单击“直线”按扭,cmdLine_Click()过程被执行,应用程序通过LinkExecu
te方法向AutoCAD发送命令,在AutoCAD中以点(3,3)和(8,8)为端心,画一条直线
。语句中的^3相当于AutoCAD中的取消键Ctrl+C,空格相当于AutoCAD中的回车键
。单击“标注”按扭,执行cmdText_Click()过程,可在AutoCAD中显示以(10,10
)为基点,高为1,旋转角度为90的字符串“AutoCAD!”。语句中的^10相当于Aut
oCAD中的回车键,在标注文字时不能用空格代替回车键。

  根据需要,可用上面的方法传送AutoCAD的其它命令,实现对AutoCAD的开发


二、通过调用VB ADS开发 

  上面介绍了在VB应用程序中直接利用DDE与AutoCAD作用实现开发的方法,此
方法要求用户自己建立与AutoCAD间的DDE通道,此外,我们还可以通过调用VB A
DS函数对AutoCAD进行开发。在VB ADS函数库中已有专门的函数负责建立应用程序
与AutoCAD间的DDE通道,而不需用户亲自建立,较为方便。另外,VB应用程序还
可以通过VB ADS函数向AutoCAD发送数据和命令,同时也可以利用VB ADS函数的返
回值来获得AutoCAD的数据,实现对AutoCAD更深入的开发。

  为了利用AutoCAD的VB ADS函数建立VB的应用程序,AutoCAD提供了几个VB A
DS支撑文件,这些文件除DDEBAS.EXE和ACADVB.DLL存放在C:\ACADWIN子目录外,
其余都存放在C:\ACADWIN\VB\NEW子目录中。文件如下:

  1. DDEBAS.EXE-ADS/DDE服务者,为保证VB于AutoCAD 间正常通信,此命令必
须首先在AutoCAD中用XLOAD命令加载运行。

  2. ACADVB.DLL-VB ADS动态连接库,在运行VB应用程序前,应将其拷到C:\W
INDOWS\SYSTEM\子目录下。

  3. GLOBAL.BAS-VB ADS应用程序中所需要使用的全局变量定义文件。

  4. ADSFUNCS.BAS-VB ADS函数库,可以在VB应用程序中直接调用。

  5. ADSFUNCS.FRM-包含有应用程序和AutoCAD间建立DDE链接的窗体文件。 下
面结合具体的例子,说明利用VB ADS函数开发应用程序的方法。 [HJ]     启
动VB,打开C:\ACADWIN\VB\NEW\NEWPROJ.MAK项目文件,参见图 [2]建立新窗体,
并输入如下的事件代码。 

 Option Explicit

 Private Sub Form_Load()

  DDE_TIMEOUT = -1  '等待DDE事件

  txtX.Text = 5  '圆心,半径的隐含值

  txtY.Text = 5

  txtRadius = 3

 End Sub

 Private Sub cmdCircle_Click()  '画圆过程

  Dim ret As Integer

  Dim pt As ads_point  '定义Ads点类型

  Dim Radius As Double

  Dim Apndll As ApndLLType  '定义增加链表类型

  Dim Resbuf As ResbufType  '定义结果缓冲器

  pt.X = val(Trim(txtX.Text)) '给圆心,半径赋值

  pt.Y = val(Trim(txtY.Text))

   Radius = val(Trim(txtRadius.Text))

  ret% = ads_newrb(10, Resbuf) '建立新的结果缓冲器

  Resbuf.hResbuf = 0 

  Apndll.apType = RTSTR '说明链表类型为字符串

  Apndll.apString = "circle" + Chr$(0) '链表赋值

  ret% = ApndLLNode(Resbuf, Apndll)  '增加链表到结果缓冲器

  Apndll.apType = RTPOINT

  Apndll.apPoint = pt

  ret% = ApndLLNode(Resbuf, Apndll)

  Apndll.apType = RTREAL

  Apndll.apReal = Radius

  ret% = ApndLLNode(Resbuf, Apndll) 

  Apndll.apType = RTNONE   '链表结束值类型

  ret% = ApndLLNode(Resbuf, Apndll)

  ret% = ads_cmd(Resbuf)   '执行结果缓冲器的命令

  ret% = ads_relrb(Resbuf)   '释放结果缓冲器

  End Sub

Private Sub cmdExit_Click()   '退出过程

  End

 End Sub

  在应用程序运行前,必须首先运行AutoCAD,并用命令(XLOAD "DDEBAS")加载
DDEBAS. EXE。在上面的应用程序中,除语句DDE_TimeOut=-1外,没有其它涉及
建立DDE通道的语句,因为应用程序与AutoCAD间建立DDE通道所需要的代码已保存
在VB ADS 函数库中,打开支撑文件adsfuncs.bas,可以发现Sub OPENDDE()过程
,它负责VB应用程序与AutoCAD间DDE通道的建立,所以用户在开发应用程序时,
只管调用VB ADS函数即可。例子中的cmdCircle_Click()过程,是在VB 4.0编程环
境通过调用VB ADS函数开发的,运行程序后在文本框中输入半径和圆心的值,单
击“画图”按扭,即可在AutoCAD中得到所需的圆。


----------------------------------------------------------------------
----------

参考文献

 1.《Visual Basic For Windows语言参考详解》.北京航空航天大学出版社.周
民光 王复 康等编.1995.12.

 2.《AutoCAD for Windows 技巧与应用》.人民邮电出版社.卢师德编著.1995.
5. 


b VB应用程序访问SQL Server方法探讨 
摘要
       本文讨论了Visual Basic应用程序访问SQL Server数据的几中常用的方法
,分别说

明了每种方法的内部机理并给出了每种方法的一个简单的实例,最后比较了每种
方法的

性能和优缺点。

引言

       Microsoft Visual Basic(简称VB)作为一种面向对象的可视化编程工具,
具有简单

易学的,灵活方便和易于扩充的特点。而且Microsoft为其提供了与SQL Server通
信的

API函数集及工具集。因此它越来越多地用作大型公司数据和客户机—服务器应用
程序

的前端。与后端的Microsoft SQL Server相结合,VB能够提供一个鲁棒的、高性
能的客

户机—服务器方案。

使用Visual Basic作为前端开发语言,与SQL Server接口有三种常用的方法,即
:


1、数据访问对象/Jet
2、为ODBC API编程
3、使用SQL Server的Visual Basic库(VBSQL)为DB库API编程


本文将讨论这三种VB应用程序管理SQL Server数据的方法,并比较每种方法的性

能和优缺点。
 
方法1.数据访问对象/JetVisual Basic支持Data Access Objects(DAOs)的子集。
DAO的

方法虽然不是性能最好的管理客户机—服务器之间的对话方式,但它确有许多优
点。使

用DAOs访问SQL Server的过程如下:应用程序准备好语句并送至Jet,Jet引擎

(MASJT200.DLL)优化查询,载入驱动程序管理器并与之通讯,驱动程序管理器

(ODBC.DLL)通地调用驱动器(SQLSRVR.DLL)的函数,实现连接到数据源,翻译并向
SQL 

Server提交SQL语句且返回结果。下面是一个用DAOs访问SQL Server的VB实例。



'Form Declarations
Dim mydb As Database
Dim mydynaset As Dynaset
Private Sub Form_Load()
Set mydb=OpenDatabase("",False,False,"ODBC;DSN=Myserver;WSID=LCL;DATAB
ASE=sales")
Set mydynaset=mydb CreateDynaset("Select*from Customers")
End Sub

上述例子是以非独占、非只读方式打开sales数据库,并检索Customers表中的所
有字

段。OpenDatabase函数的最后一个参数是ODBC连接字符串参数,它指明了Micros
oft 

Access连接到
SQL Server所需要知道的一些内容。其中“DSN”为数据源名,“WSID”为工作站
名,

“DATABASE”为所要访问的数据库名。

方法2.用ODBC API编程

     ODBC(Open Database Connectivity)的思想是访问异种数据库的一种可移植
的方式。

与数据资源对话的公用函数组装在一个称为驱动程序管理器(ODBC.DLL)的动态连
接中。

应用程序调用驱动程序管理器中的函数,而驱动程序管理器反过来通过驱动器反
过来通

来驱动器(SQLSRVR.DLL)把它们送到服务器中。

用ODBC API编程,一般要用到以下一些函数。下面列出了常用的函数以及它们的
功能。
函数 功能
SQLALLocEnv 初始化ODBC环境,返回环境句柄
SQLALLocConnect 为连接句柄分配内存并返回连接句柄
SQLConnect 连接一个SQL数据资源
SQLDriverConnect 连接一个SQL数据资源,允许驱动器向用户询问信息
SQLALLocStmt 为语句句柄分配内存并返回语句句柄
SQLExecDirect 把SQL语句送到服务器
SQLFetchAdvances 到结果集的下一行(或第一行)
SQLGetData 从结果集的特定的一列取回数据
SQLFreeStmt 释放与语句句柄相关的资源
SQLDisconnect 切断连接
SQLFreeConnect 释放与连接句柄相关的资源
SQLFreeEnv 释放与环境句柄相关的资源
下面的代码使用上面一些函数先登录到一个服务器数据库,并为随后的工作设置
了语句
句柄。
Global giHEnv As Long
Global giHDB As Long
Global giHStmt As Long
Dim myResult As integer
Dim myConnection As Srting
Dim myBuff As String*256
Dim myBufflen As Integer
If SQLAllocEnv(giHEnv)<>SQL_SUCCESS Then
MsgBox"Allocation couldn't happen!"
End if
if SQLAllocConnect(giHEnv,giHDB)<>SQL_SUCCESS Then
MsgBox "SQL Server couldn't connect!"
End if
myConnection="DSN=myServer;UID=lcl;PWD=;APP=ODBCTest;WSID=LCL;DATABASE
=sales"
myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(myCon
nection),
myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQUIED)
myResult=SQLAllocStmt(giHDS,giHStmt)
myResult=SQLFreeStmt(giHStmt,SQL_COLSE)
rsSQL="Select*from Customers Where City="Wuhan""
myResult=SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))

方法3.使用VBSQL对DB库API编程

     DB库是SQL Server的本地API,SQL Server的Visual Basic库(VBSQL)为Vis
ual Basic

程序员提供API。从一定意义上说,VBSQL是连接Visual Basic程序到SQL Server
的性能

最好最直接的方式。VBSQL包含以下三个文件:


VBSQL.VBX 包含库函数,具有访问重要的消息和处理错误的能力
VBSQL.BI 包括所有的常量和变量说明
VBSQL.HLP Windows帮助文件,使用VBSQL的指南
使用VBSQL时,必需将VBSQL.BI加入到Visual Basic工程文件中,并确保VB程序运
行时有
VBSQL.VBX文件。
一个典型的VBSQL对话中,一般要用到以下这些函数。
函数 功能
Sqlinit 在客户机上装载DB库
SqlOpenConnection 打开服务器连接,返回连接句柄
SqlCmd 在客户机上建立批处理命令
SqlExec 向服务器提交批处理命令
Sqlresults 把客户机定位在第一条(或下一条)结果集的开端
SqlNextRow 驱动每个结果集的行之间的循环
SqlData 访问一个特定列的数据
SqlC|ose 切断特定的连接
SqlExit 切断所有找开的连接
SqlWinExit 卸下DB库
一般的DB库API编程的过程是这样的:先通过调用SqlInit对DB库进行初始化,再
调用
SqlConnection打开一个连接,然后就可做一些工作。下面的代码是一个初始化D
B库并
登录到服务器的通用例程。
Private Sub initializeApplication()
DBLIB-VERSION●=Sqlinit●()
If DBLIB_VERSION●=""Then
MsgBox"Could not initialize DBLIB!Exit application.", MB_|CONEXCLAMAT|
ON
End
End if
End Sub
Private Function LoginToServer() As integer
loginToServer=SUCCEED
Status%=SqlSetloginTime%(loginTimeOut)
If giSq|Conn<>0 Then
SqlClose(giSqlConn) '关闭已打开的连接
giSqlConn=SqlOpenConnection(gsServerName,gsLoginID,gsPassword,Progr am
Name●,ProgramName●)
If giSqlConn<>o Then
|iresult=SqlUse(giSqlConn,"Sales")
Else
LogintoServer=FALL
End If
End Function

性能比较

      以上三种访问SQL Server的方法各有各的特点。DAOs方法是基于对象的,
因而便于

使用,但是它从Visual Basic到SQL Server的最慢的方式。ODBC API和VBSQL方法
从本质

上讲是基于程序的。ODBC API方法通用性好,允许最强的互操作性,编程简单,
但速度

慢于VBSQL方法。VBSQL方法通过VBSQL控件,提供了重要的SQL` Server前端应用
程序所

需的灵活性、强大功能和良好性能。它具有真正的事件驱动及错误处理能力,完
全支持

异步处理、游标和计算列等。这些都是VBSQL方法超出其它方法的优势,但其编程
稍复

杂。至于实际使用哪一种接口方式,在很大程度上依赖于用户的应用程序的具体
情况而

定。


c VB应用程序编制实例

    VB自1991年问世以来,已从1.0版步入到功能十分强大的5.0版。VB以其开发
软件周期短、操作简单、可视化程度高的优点倍受编程人员的青睐。近几年来,
许多Windows程序员应用VB作为编程语言,开发了大量的应用软件。本文通过几个
实例说明了VB的强大功能。

一、工具棒的建立方法

    Windows应用程序的操作界面都含有大量的图标,这些图标集中放在某一个区
域形成工具棒(Toolbars), 工具棒中的图标用图示的方法表示某一种功能,可以
加速操作,在某些Windows应用程序中还把这些工具棒直接称为加速棒(Speedba
rs)。下面介绍编制工具棒的方法。

    在窗体上画一个足够大的图片框,使用这个图片框可以存放图标。设置图片
框的Align属性,使图片框列在窗口的顶部,即[窗体名][控件名]Align=1.

    在图片框中增加影像控件(Image Control)数组或者三维命令控制按钮数组(
3D Command Button Control)。改变控件的Picture属性,输入图形,图形的格式
为:*.BMP,*.DIB,*.WMF,*.ICO。

    下面的实例介绍了工具棒的建立方法,具体步骤为:

    1.建立一个图片框,取名为Demo(即Name属性为Demo),设置Align属性,即
 Demo.Align=1

    2.在图片框上增加三维命令按钮,设置Name属性为Tool,设置Index的属性
为0(第一个控件),改变 Picture 属性,输入图示化的图形(文件)。改变提示信
息,设置Caption取值为空。

    3.增加三维命令按钮控件,设置Name属性为Tool,注意使Index属性分别为
1,2,……。

    4.建立窗体Paint事件过程

Sub FormPaint()

Demo.ScaleHeight = Tool(0).Height '设置工具棒的高度

iw% = Tool(0).Width '获取第一个图标的宽度,用于设置其他的图标宽度

For i% = 0 To 3

Tool(i%).Height = Demo.Scaleheiht

Tool(i%).Width = iw%

Tool(i%).AutoSize = 1 '设置图标中的图形充满整个图形框

Tool(i%).Move iw% * i%, 0 '重新排列所有图标的位置

Next i%

End Sub

    5.建立图标事件过程

    为工具棒中的每一个图标增加一个过程,执行相应的命令:

Sub Tool_Click(index As Integer)

 

If index = 0 Then

Tool (0). Picture = Load(″animal.bmp″) '更换第一个图标中图像

ElseIf index = 1 Then

j% = Shell(″calc.exe″, 1) '执行WINDOWS95计算重新CALC.EXE

ElseIf index = 2 Then End '中止程序的执行

End If

 

End Sub

    在实际应用中,程序员可以发挥自己的想象力,从而完善工具棒的功能。

二、Windows演示程序的编程方法

    Windows应用软件系统中教学演示程序,在整个系统中占有十分重要的地位,
它从一个侧面反映了应用软件的功能和用户界面。下面介绍了使用VB编制演示软
件的语言基础,并列举实例说明。

三、演示软件激活语言软件的方法

    应用软件可以通过演示程序激活,无论该应用程序是否是用户自己编制的程
序。例如,用户可以通过演示激活字处理软件Word for Windows。应用软件的激
活可以依照应用软件所处状态使用Shell函数或AppActivate命令激活。

    1.Shell函数的使用

    Shell函数可以运行一个执行程序(即应用程序),类似在“文件管理器”的“
文件”菜单中运行一个程序,Shell函数的使用语法是:

 

Shell(commandstr$,winstyle%)

    其中,commandstr$是一个包含有路径的可执行文件字符串,winstyle%是
决定运行窗口类型的参数。例如

j%=Shell(″c:\win\write.exe″,1)

    该句启动Windows中“Write”应用软件,窗口类型为具有输入焦点的正常窗
口,它的返回值在VB中不使用。

 

2.AppActivate命令的使用

    AppActivate命令可以把Windows的焦点移向指定的应用程序,若该应用程序
没有启动,AppActivate也不能启动,且此时会出现运行错误,使用AppActivate
的语法是:

AppActivate titletext$

titletext$是应用出现的标题(窗口顶部的第一行文字),对大小写不敏感。例如


 

AppActivate“calculator”or AppActivate“CALCULATOR”

 

    这两句都能够把Windows的焦点移向“计算器(Calculator)”,即把计算器从
后台调入前台。对于中文版Windows应使用下面的命令:

AppActivate“计算器”

 

3.模拟输入控制应用程序

    演示程序的关键是能使用代码模拟手工输入,控制应用程序的运行过程。使
用Sendkey命令可以模拟键盘输入,使用方法为:

 

Senekey keyin$,Wait%

 

其中, keyin$为模拟输入的控制字符串。Wait%为真(非零)时,说明其它程序
运行模拟     输入完毕后,VB才继续运行;Wait%为假时,说明VB命令一执行(
 Send Keys),马上继续运行自己本身。Wait%可省略,缺省值为0。下面为两实例


 

SendKeys“%{F4}”,1

该句说明向应用程序输入<ALT>+<F4>,相当于通过键盘键入了退出应用程序的操
作。

 

SendKeys“(Hello){Enter}”,1

相当于通过键盘键入“Hello”,然后按回车键换行。

 

四、实例棗使用Word for Windows应用程序

    下面的实例,演示使用Word,模拟输入“电脑爱好者”的英文和中文。

 

Private Sub Form_Click()

 

x = Shell(″c:\msoffice\winword\winword.exe″, 1) '启动 

Word for Windows

SendKeys ″(Computer Fan)″, 1 '模拟输入英文″Computer Fan

SendKeys ″{Enter}″, True '停留三秒

waittime (3)

SendKeys ″电脑爱好者{Enter}″, 1

waittime (3)

SendKeys ″%″, 1

waittime (2)

SendKeys ″(F)″, 1 '模拟按字母″F″,选择″文件(F)″菜单

waittime (2)

SendKeys ″(X)″, 1 '模拟按″X″选择,″退出″

SendKeys ″(N)″, 1 'WORD弹出一个对话框,询问文件是

否存盘,模拟按″N″

End

 

End Sub

 

Private Sub waittime(xt As Single)

 

Dim starttime As Single

starttime = Timer

Do Until (Timer - starttime) > xt

Loop

End Sub

 

    总之,演示程序的编制主要是使用Shell、 AppActivate 和SendKeys函数或
语句,并且对应用程序进行演示时,需全面掌握键盘的输入过程,以便模拟。下
面为一演示计算器使用的演示程序。读者不妨一试。

 

Private Sub Form_Click()

 

x = Shell(″c:\winwords\calc.exe″, 1) '启动计算器

SendKeys ″(2)″, 1 '模拟输入2

waittime (3) '停留三秒

SendKeys ″(+)″, 1 '模拟输入″+″

waittime (3)

SendKeys ″(2)″, 1

waittime (2)

SendKeys ″(=)″, 1 '模拟输入″=″

waittime (3)

SendKeys ″4″, 1 '模拟得到结果

waittime (4)

SendKeys ″(F)″, 1 '模拟按字母″F″,选择″文件(F)″菜单

SendKeys ″(X)″, 1 '模拟按″X″,选择″退出″

 

End

 

End Sub

 

五、Windows 初始化文件的修改

    Windows应用程序的初始化文件(INI)对应用程序缺省设置起着重要的作用,
初始化文件可以采用文本编辑器修改,但这种方法容易出现错误,不易由用户操
作。下面介绍用VB实现修改初始化文件的方法。

 

1初始化文件的结构与特点

    Windows应用程序初始化文件中通常设置应用程序的运行环境,确定应用程序
变量的缺省设置,初始化文件既包含Windows本身的两个INI文件,也包括应用程
序的初始化文件。如:win.ini、system.ini、ucdos.ini、vb.ini等。

 

    其中,ucdos.ini、 vb.ini分别为希望公司的UCDOS和VB的初始化文件,这些
初始化文件一般都是由应用程序和关键词构成,文件中内容的格式采用下面的通
用格式:

 

[程序名称]

关键词=取值

 

例如,在system.ini中有一段内容设置非WINDOWS应用程序的字体,即:

 

〔Non WindowsApp〕

FontChangeEnable=1

    其中,Non WindowsApp为应用程序名,FontChangeEnable为关键词,1为取值


 

2与初始化有关的API函数

    Windows95中的动态链接库Kernel.exe包含了六个函数,可以对INI文件进行
操作,其中GetProfileInt、GetPrivateProfileInt、GetProfileString和GetPr
ivateString四个函数可以从INI文件中基于应用程序名和关键词的行获得信息。
WritePrivateProfileString和WriteProfileString两个函数可以在INI文件中修
改或创建文件中的有关行。

    在VB应用程序中应按下面的方式在全局模块中进行声明。

 

Declare Function GetProfilelnt Lib ″Kernel″ (ByVal lpAppName As Stri
ng, ByVal lpKeyName As String, ByVal nDefault As Integer) As Integer

 

Declare Function GetProfileString Lib ″Kernel″(ByVal lpAppName As St
ring, lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedsri
ng As String, ByVal nSize As Integer) As Integer

 

Declare Function WriteProfileString Lib ″Kernel″(ByVal lpApplication
Name As String, lpKeyName As Any, lpString As Any) As Integer

 

Declare Function GetPrivateProfilelnt Lib ″Kernel″ (ByVal lpApplicat
ionName As String, ByVal lpKeyName As String, ByVal nDefault As lntege
r, Byval lpFileName As String) As Integer

 

Declare Function GetPrivateProfileString Lib ″Kernel″(ByVal lpApplic
ationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVa
l lpReturnedString As String, ByVal nSize As String, ByVal nSize As In
teger, Byval lpFileName As String) As Integer

Declare Function WriteProfileString Lib ″Kernel″ (ByVal lpApplicatio
nName As String, lpKeyName As Any, lpString As Any) As Integer

 

其中:lpApplicationName$为应用程序名称;

lpKeyName$为关键词;

nDefault%为关键词指定的缺省值;

lpFileName$为初始化文件名称;

lpDefault$为关键词指定的缺省字符串;

lpReturnString$为接受返回值指定字符的缓冲变量;

nSize%指定拷贝到缓冲变量的字符个数;

lpString$为新的关键词指定字符串。

    上面的声明可以从VB目录上的winapi中文件win32txt获得,可以通过剪贴
板直接拷贝到VB中。

 

3修改初始化文件实例

 

    Windows软件包程序管理器(PROGRAMEXE),初始化文件为PROGRAM.INI,缺
省内容为

 

[Settings]

……

order=6 3 2 4 7 1 

……

 

    其中,order指定程序组的排列顺序,下面的程序把Order的值改为“2 3 4 
1 7 6 5”,并使用SHELL函数启动程序管理器。

 

Private Sub form_Click()

 

lpAppName$ = ″Settings″

lpKeyName% = ″Order″

lpString$ = ″2 3 4 1 7 6 5 ″

lpFileName$ = ″progman.ini″

j% = WritePrivateProfileString(lpAppName$, lpKeyName$ =

″Order″, lpString$ = ″2 3 4 1 7 6 5″, lpFileName$)

j% = Shell(″progman.exe″, 1)

 

End Sub

 

六、增强VB的报表制作功能

    VB专业版中包含一个报表制作软件 ?/FONT> Crystal Report简版,该软件是
一个功能强大的报表制作系统,但因其版本低而且是简本,功能受到一定的限制
。下面介绍Crystal Report增强VB报表功能的方法及使用。

 

1Crystal Report更新VB的方法

    Crystal Report更新VB,只需要覆盖VB报表子目录下的一些文件,例如Crys
tal Report安装在缺省目录“C:\CRW”,VB报表的子目录为“ C:\VB\REPORT”,
文件更新和替换步骤为:

 

    (1)更新CRW.EXE 和CRW.HLP

copy c:\crw\crw.exe c:\vb\report

copy c:\crw\crw.hlp c:\vb\report

    (2)增加文件CRSUPREG.DLL和文件CRSUPPRT.DLL

copy c:\crw\crsupreg.dll c:\vb\report

copy c:\crw\crsupprt.dll c:\vb\report

    Crystal Report版本更新后,在VB编程环境下,激活菜单“Windows/Repor
t Designer”,可以启动新版的Crystal Report。

    (3)Crystal.vbx文件更新

 

2CRPE.DLL的使用

    Crystal Report动态链接库CRPE.DLL能够在应用程序中调用Crystal Report
的报表模块,实现与Crystal Report相同的报表功能,CRPE.DLL支持的语言有C、
C++、VB、VC、Delphi等,下面介绍VB调用CRPE.DLL的方法。

 

Declare Function PEOpenPrintJob Lib “CRPE.DLL”(ByVal RptName$)As In
teger

 

Declare Function PEClosePrintJob Lib “CRPE.DLL”(ByVal PrintJob$)As 
Integer

 

    其中PEOpenPrintJob函数开始报表打印工作,PEClosePrintJob子程序关闭报
表打印工作。在调用时注意指明CRPE.DLL所在的路径,如“C:\CRW\CRPE.DLL”函
数和子程序的声明比较严格,容易出现错误,在编辑时采用下面两种方法中的任
意一种简化声明工作。

    (1)在工程文件(MAK)中,包含文件GLOBAL.BAS,该文件在目录“C:\CRW”下


    (2)在某一编辑器中打开文件GLOBAL.BAS,把需要的声明块拷贝到剪贴板上,
然后进入VB编程环境中,使用PASTE命令将剪贴板中的内容粘贴到VB程序中。

    Crystal Reports提供了一个例程CRPEDEMO.MAK,介绍这些函数和子函数的使
用方法。下面的事件过程Command1_Click()直接向屏幕输出报表ORDERS.RPT。

 

Sub Command1_Click()

 

result% = PEPrintReport(″c:\CRW\CODERS.RPT ″, 0, 1, ″报表输出演示″
, CW - USED

 

EFAULT, CW - USEDEFAULT, CW - USEDEFAULT, CW - USEDEFAULT, 0, 0)

 

If result% <> 0 Then MsgBox (″报表不能输出″)

 

End Sub

 

    函数PEPrintReport是一个非常实用的函数,它不需要调用其它任何函数,直
接输出(向打印机或屏幕)已形成的报表。

 

3报表控件属性设置

    Crystal Report提供的Crystal.vbx的属性更加容易控制。下面的实例介绍了
程序在运行时更改CrystalReport控件属性的方法。

 

Sub Commmand1_Click()

 

Main.Reportl.CopiesToPrinter = Copies.Text ′设置报表调用份数

Main.Reportl.DetailCopies = NDetailCopies.Text ′设置节中调用份数

If Collate.Value = True Then

Main.Reportl.PrintCollation = 1 ′设置是否进行打印份数检验

Else

Main.Reportl.PrintCollation = 0

End If

If StartPage.Tcxt = “”Then

Main.Reportl.PrinterStartPage = 0 '设置打印报表的起始页

Else

Main.Reportl.PrinterStartPage = StartPage.Text

End If

If EndPage.Tcxt = “”Then

Main.Reportl.PrinterStopPage = 0 '设置打印报表的中止页

Else

Main.Reportl.PrinterStopPage = StopPage.Text

End If

If SaveData.Value = True Then

Main.Reportl.DiscardSaveData = False '确定是否存储报表数据

Else

Main.Reportl.DiscardSaveData = True

End If

Main.Reportl.Destination= 1 '输出设置(打印机)

 

End Sub

 

    使用Crystal Report,会给用户创建表格和编写程序带来极大的方便,读者
不妨一试。
=============================================
              问题征答()
=============================================
                其它
====================================================================
欢迎订阅VB免费邮件:
订阅地址  http://server.com/WebApps/mail-list-subscribe.cgi?id=16852  

====================================================================  

如果您觉得这个邮件列表好的话,请告诉您的朋友。  
====================================================================
欢迎投稿  [email protected]  
====================================================================  

网易上的主页地址:http://www4.netease.com/~aaaaaaaaa 
本网站主页镜像地址:goodvbhome.yeah.net 
====================================================================

--
欢迎访问主页:goodvbhonme.yeah.net
或:http://www4.netease.com/~aaaaaaaaa
http://personal.gz168.gnet.gd.cn/vbok/

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.48.245]

[关闭][返回]