4. 实例分析
在本例中,VB5 应用程序向ArcView 发出Avenue 请求以建立新的文档如views 和layouts, 而且应用程序询问ArcView 以得到当前激活的文档。此时VB5 应用程序是目标,而ArcView 是源。
如果已安装VB5 和ArcView,按照下面步骤建立应用程序:
(1) 启动VB5,建立缺省窗体Form1。
(2) 在Form1上根据下列属性建立控件,然后放大窗体以便整齐地排列控件。
ObjectProperty Setting
Text BoxNametxtDDE
Command ButtonCaptionSend Request
NamecmdRequest
Combo BoxNamecboDocType
(3) 在Form1的说明部分增加下面代码:
Const NONE=0, MANUAL=2
Sub Startup()
Dim t
Const DDE_NO_APP=282
'this will start ArcView if it isn't running
On Error GoTo FireUp
txtDDE.LinkMode=NONE'清除DDE链接
txtDDE.LinkTopic="ArcView|System"'建立对话
txtDDE.LinkMode=MANUAL'建立人工链接
Exit Sub
FireUp:
If Err=DDENOAPP Then
ChDir "C:\ARCVIEW2\BIN"
t=Shell("arcview",1)
t=DoEvents()
Resume
Else
MsgBox "Unknown error."
Stop
End If
End Sub
(4) 在FormLoad 事件中增加下列代码:
Sub FormLoad()
cboDocType.text=""
cboDocType.AddItem "View"
cboDocType.AddItem "Layout"
cboDocType.AddItem "SEd"
Startup'调startup 程序
End Sub
(5) 在FormUnload 事件中增加下列代码:
Sub FormUnload (Cancel As Integer)
txtDDE.LinkMode = NONE'关闭DDE 对话
End Sub
(6) 在cboDocTypeClick事件中增加下列代码:
Sub cboDocTypeClick()
cmd="av.GetProject.AddDoc("&cboDocType&".make) av.GetProject.GetActive.Get(0).Ge tWin.Open"
txtDDE.LinkExecute cmd
End Sub
(7) 在cmdRequestClick事件中增加下列代码:
Sub cmdRequestClick ()
'LinkItem是能够返回值的Avenue script
txtDDE.LinkItem = "av.GetActiveDoc.GetName"
txtDDE.LinkRequest
End Sub
(8) 存储VB5工程并编译成EXE 文件。
现在即可运行Visual Basic应用程序。如果ArcView 没有运行,应用程序就 会激活它。从dropdown combo box 选择一个文档名以便在ArcView中建立一个文档。要访问 当前激活的文档就敲击Send Request button,在文本框里将会显示文档名。本例所有的DDE 通讯都是通过文本框实现的。在VB5中, 任何text box, picture box和label在对话中都可 作为目标,同时任何窗体可看作源。
以上实例的运行环境为:Visual Basic 4.0以上,ArcView2.1以上,Windows3.1以上。
参 考 文 献
1、边馥苓主编,《地理信息系统原理和方法》,北京:测绘出版社,1996 年8月。
2、郭达志、盛业华等编著,《地理信息系统基础与应用》,煤炭工业出版社,1997 年5月。
3、(美国) Mike McKelvy & Ronald Martinsen 著,《Visual Basic 5开发使用手 册》,机械工业出版社,1998年4月。