学习Visual BASIC for Windows动态数据交换 侯丰胜 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应用程序窗体上的数据传递到此存储单元上。