学习Visual BASIC for Windows动态数据交换

Author: 侯丰胜 Date: 1997-01-01

#2  一、动态数据交换(DDE)简介
  动态数据交换(DDE)是Windows提供的一种重要功能,它是应用程序之间相互进行通信时较为常用的数据交换技术。动态数据交换总是在客户应用程序与服务器应用程序之间发生。DDE服务器是一个存取对其他应用程序有用的数据,或执行客户应用程序所要求命令的程序,DDE客户则是一个从服务器获得数据或其他服务的程序。一个应用程序可以既是客户应用程序,又是服务器应用程序。
#2  二、在设计状态下建立DDE对话管道的方法
  用VB设计应用软件时,在设计状态下就可以建立与其他应用程序的DDE对话管道。
#3  (一)VB应用程序作为客户应用程序
  VB应用程序若需要由某一(些)应用程序提供数据时,则VB应用程序就是客户应用程序,而提供数据的应用程序就是服务器应用程序。建立这种DDE对话管道前,服务器应用程序必须是在执行状态下,而VB应用程序则是在设计状态下。建立DDE对话管道的一般方法如下:
  1.在服务器应用程序上选出要传递的数据的范围。
  2.在服务器应用程序菜单“Edit”项下选“Copy”命令。
  3.回到VB应用程序上,准备好要接受数据的对象(文本框、标签或图像框)。
  4.在VB应用程序菜单“Edit”项下选“Paste Link”命令。
  例1.将Microsoft Word For Windows建立的一段文字(数据)传递到VB的文本框上,方法如下:
  1.在Microsoft Word For Windows下打开或者建立一个包含所要传递的那段文字的文件。
  2.在Word上选择出要传递数据的范围,并在菜单“Edit”项下单击“Copy”命令。
  3.回到VB窗体上建立一个文本框(Text1,清除文本内容,并设置Multiline属性为True)。
  4.在VB菜单“Edit”项下单击“Paste Link”命令,则Word上的那段文字立刻传递到文本框Text1上。
#3  (二)VB应用程序作为服务器应用程序
  VB应用程序也可以给其他应用程序提供数据,此时,VB应用程序是服务器应用程序,而请求VB应用程序提供数据的应用程序是客户应用程序。建立DDE对话管道的一般方法如下:
  1.在VB应用程序上准备好要提供的数据。
  2.在VB菜单“Edit”项下选“Copy”。
  3.在客户应用程序上选好要接受数据的位置。
  4.在客户应用程序菜单“Edit”项下选“Paste Link”命令。
  例2.将VB文本框上的一段文字传递到Microsoft Word for Windows,方法步骤如下:
  1.在VB窗体的文本框(text1)打开或者建立一个包含所要传递的那段文字的文件(设Mutiline为True)。
  2.选择好要传递的那段文字,并在VB菜单“Edit”项下单击“Copy”命令。
  3.跳到Word上,选好接受传递过来的那段文字的位置。
  4.在Word菜单“Edit”项下单击“Paste Link”命令。
  5.在出现的对话框上选择是否要建立自动更新的链接(Auto Update),选择完后,单击“OK”确认,则VB文本框上选择的那段文字就传递到Word的画面上。
#2  三、在执行状态下建立DDE对话管道的方法
#2  (一)VB应用程序作为客户应用程序
  当VB应用程序作为客户应用程序时,要在程序执行时进行对话,则“LinkTopic”、“Linkiter”、“LinkMode”这三个属性必须自动加入程序中才能启动DDE对话。“LinkTopic属性指的是担任服务器应用程序的名称,以及在它下面所建立的文件名。格式为:
        服务器应用程序名称|标题
  例如Excel|C:\Excel\Try1.xls
  “Linkiter”属性指的是在服务器应用程序的“LinkTopic”属性下指定要传递给VB控件的某些项目,这些项目名称因服务器应用程序而异。在Excel上用的是“R1C1”“R1C2”等。
  “Linkiter”属性用来决定DDE对话的方式并初始化链接。
  当VB应用程序作为客户应用程序时,对其控件来说,“LinkMode”属性分为三种:
  (1)“0--None”(缺省):没有DDE交互作用;
  (2)“1--Hot”(热式):当与其对应的服务器应用程序的数据变动时,VB应用程序中相应对象上的数据也会变动;
  (3)“2--Cold”(冷式):VB应用程序中相应对象上的数据只有当被请求时才更新。
  例3.编写一程序,在Excel和VB应用程序之间建立DDE对话管道。要求:VB从应用程序从Excel建立的6个单元(“R1C1~R1C6”)上获取数据到Text1文本框上。程序如下:
  Sub Form-Click()
  For i=1 to 6
  if i=1 then
  text1.linkmode=0 ' 清除原有的DDE链接
  text1.linktopic=“excel|sheetl”
  text1.linkitem="R1C1” '将texel上的第一个单元的数据传递到text1文本框上
  text1.linkmode=1 '建立DDE链接
  Else
  text1.linkitem="R1"+"C"+Ltrim$(i)) 将Excel上的第i个单元的数据传递到text文本框上
  End if
  Next i
  End sub
#3  (二)VB应用程序作为服务器应用程序
  VB应用程序作为服务器应用程序时用到两个属性:“LinkTopic”和“Linkmode”。
  “LinkTopic”属性表示:如果服务器应用程序某一个窗体要对客户应用程序作出反应,则该窗体或该窗体中的某一(些)对象就是客户应用程序所请求数据的项目。例如:如果在VB应用程序上设计了一个叫“Houcount”的应用程序,这个应用程序中有一个窗体的“LinkTopic”属性被设为“account”,那么客户应用程序就可用“Houcount|account”来与该窗体建立DDE对话管道。如果在该窗体上有一个对象“interest”,那么客户应用程序就可用“Houcount|account!interest”来取得此对象上的数据。
  “LinkMode”属性有两种选择:“0--None”和“1--server”。如果设置为“1--server”,则窗体上的对象就可以提供数据给已建立DDE对话管道的客户应用程序。如果设为“0--None”则客户应用程序就无法从此窗体取得数据,其缺省值为1。
  例4,假设在VB应用程序Houl中,某一窗体“account”上有一个文本框“study”存有Excel所需的数据,编写一个程序来启动DDE对话管道,使得Excel能从VB应用程序的“account”窗体上获得数据。
  程序如下:
  Sub Form-Click()
  Linktopic="account"
  End sub
  Linkmode=1
  在Excel上的某一存储单元只要键入“=Houl|account!study”命令字符串,即可将VB应用程序窗体上的数据传递到此存储单元上。