VB Link 操作(DDE 會話)

VB Link 操作(DDE 會話)
━━━━━━━━━━━━━━━━━━━━━━━━━━

程序之間進行數據通信,一個常見的方法就是採用DDE 會話,在 VB 中就是使用對象的 Link 操作。

一、DDE會話基本設計

★發送方設置:
''注:Kj 代表窗體中發送 DDE 會話的某控件,如 TextBox、Label

1.加入代碼:

Kj.LinkMode 0
Kj.LinkTopic "收|Form1"  ''文件名|窗體名
Kj.LinkItem "Text1"      ''控件名
Kj.LinkMode Mode         ''0(斷開)    1(自動)  2(手動)   3(通知)

2. 用“Kj.LinkPoke”        ''發送源程序控件 kj 的字符 到 本程序的 Text1 中
3. 用“Kj.LinkRequest”     ''源程序將本程序 Text1字符取回 放入 kj
4  用“Kj.LinkExecute Cmd” ''觸發本標程序的 Form_LinkExecute 事件

★接收方設置:
1.必須在設計狀態下設置本程序的窗口:LinkMode = 1
2.在 Form_LinkExecute 事件中接收發送程序發出的 DDE 會話消息

二、DDE會話的事件 ——————————————————————————————

▲LinkClose                      (事件)DDE 對話結束
▲LinkError(linkerr As Integer)  (事件)DDE 對話出錯
▲LinkExecute(cmdstr As String, cancel As Integer)   (事件)
當一個 DDE 對話中的命令字符串由一個接收端應用程序發出時而發生的
▲LinkOpen(cancel As Integer)    (事件)DDE 對話正在啓動時
▲LinkNotify                  (事件)
如果接收端控件的 LinkMode 屬性被設置爲 3(通知),
當發送端已經改變了由 DDE 鏈接定義的數據時,此事件發生。

三、DDE會話的有關屬性 ——————————————————————————————
▲LinkTimeout [Number]屬性 返回或設置等待 DDE 響應消息的時間。
缺省爲 50(相當於 5 秒),
最大等待時間長度爲65,535個十分之一秒,或大約爲 1 時 49 分鐘
▲LinkItem [String]屬性 返回或設置傳給接收端的數據
▲LinkTopic [value]屬性 對於接收端控件-返回或設置發送端應用程序和主題
▲LinkMode [Number]屬性 DDE 會話方式

★對於 DDE 會話中用做目標的控件, Number 的設置值爲:
0vbLinkNone      無     無 DDE 交互。(缺省值)
1vbLinkAutomatic 自動   每次鏈接數據改變,目標控件都要更新
2vbLinkManual    手動   只有激活 LinkRequest 方法時,才更新目標控件。
3vbLinkNotify    通知   鏈接數據改變時,會產生 LinkNotify 事件,
但是只有在LinkRequest 方法激活時纔會更新目標控件。


★對作爲 DDE 會話源的窗體,number 的設置值爲:

0vbLinkNone(缺省值)  無     沒有 DDE 交互。
沒有目標應用程序能夠啓動與源窗體的主題會話,沒有應用程序能夠向窗體放置數據。如果在設計時 LinkMode 爲 0(無),在運行時不能將其改變爲1(源)。

1vbLinkSource          源     允許窗體上的任何 Label、PictureBox 或TextBox控件爲與該窗體建立 DDE 會話的目標應用程序提供數據。

如果存在這種鏈接,Visual Basic 在控件內容改變時會自動提醒目標應用程序。另外,目標應用程序能夠向窗體上的 Label、PictureBox、TextBox 控件存放數據。如果設計時LinkMode爲 1(源),運行時可以將它改爲 0(無)也可以再改回來。
返回一個代表包含該窗口的框架的 Window 對象,此屬性爲只讀,只應用於Window 對象


四、DDE會話的有關方法 ——————————————————————————————

▲LinkSend         (方法)
在一次 DDE 對話中將 PictureBox 控件的內容傳輸到的接收端應用程序。
▲LinkExecute String (方法)
DDE對話過程中將命令字符串發送給發送端應用程序
▲LinkPoke         (方法)
DDE對話過程中將 Label、PictureBox 或 TextBox 控件的內容傳送給發送端應用程序
▲LinkRequest      (方法)
DDE 對話中請求發送端應用程序更新 Label、PictureBox 或 TextBox 控件中的內容

★如果 object 的 LinkMode 屬性設置爲自動( 1 或 vbLinkAutomatic),則源應用程序自動更新 object 而不需要 LinkRequest。

★如果 object 的 LinkMode 屬性設置爲手工(2 或 vbLinkManual),則只有使用LinkRequest 時源應用程序才更新 object。

★如果 object 的 LinkMode 屬性設置爲通知 Notify( 3 或 vbLinkNotify),則源端通過調用 LinkNotify 事件通知接收端已更改數據。然後接收端必須使用 LinkRequest 更新數據。設置一指示對象爲可見或隱藏的值


五、DDE會話的集合

LinkedWindows 集合 ——————————————————————————————
▲Count  (屬性)    集合內成員的個數,此屬性爲只讀
▲Parent (屬性)    返回包含另一對象或集合的對象或集合,此屬性爲只讀
▲VBE    (屬性)    返回該 VBE 對象的根,此屬性爲只讀。

例  返回活動工程名稱:Debug.Print Application.VBE.ActiveVBProject.Name

▲Add (component)  (方法)  將一個對象添加到集合。
component 參數:
vbext_ct_ClassModule 將一個類模塊添加到集合。
Vbext_ct_MSForm 將窗體添加到集合。
vbext_ct_StdModule 將標準模塊添加到集合。

▲Item(index)      (方法)返回集合中所索引的成員。
index 參數可以是數值或包含對象標題的字符串。字符串必須和集合的 key 參數匹配。
Key 參數:
Windows          Caption 屬性設置
LinkedWindows    Caption 屬性設置
CodePanes        無唯一字符串與此集合相關。
VBProjects       Name 屬性設置
VBComponents     Name 屬性設置
References       Name 屬性設置
Properties       Name 屬性設置

▲Remove(component(方法)從集合中刪除一項
component參數是必需的。
對於 LinkedWindows 集合來說,是一個對象。
對於 References 集合來說,是一個對類型庫,或者對工程的引用。
對於 VBComponents 集合來說,是一個枚舉型的常數,它代表一個類模塊、一個窗體,或者是一個標準模塊。


六、DDE會話的 Link 操作示例 ———————————————————————————————————— -

1.本示例建立一個 Microsoft Excel 的 DDE 鏈接,將一些值放置到一個新工作單的第一行的單元裏,並按照這些值畫圖。 LinkExecute 向 Microsoft Excel 發送激活工作單的命令,選擇一些值並按照它們畫圖。

Private Sub Form_Click()
    
Dim Cmd, I, Q, Row, Z                                   '' 聲明變量。
    
Chr(34)                                             '' 定義引用標記。
    '' 創建一個含有 Microsoft Excel 宏指令的字串。
    
Cmd "[ACTIVATE("SHEET1")]"
    Cmd Cmd "[SELECT("R1C1:R5C2")]"
    Cmd Cmd "[NEW(2,1)][ARRANGE.ALL()]"
    If Text1.LinkMode vbNone Then
        
Shell("C:\Program Files\Microsoft Office\Office\EXCEL.EXE", 4'' 啓動 Microsoft Excel。
        
Text1.LinkTopic "Excel|Sheet1"                    '' 設置連接主題。
        
Text1.LinkItem "R1C1"                             '' 設置連接項目。
        
Text1.LinkMode vbLinkManual                       '' 設置連接模式。
    
End If
    For 
To 5
        Row I                                             '' 定義行號。
        
Text1.LinkItem "RRow "C1"                   '' 設置連接項目。
        
Text1.Text Chr(64 I)                            '' 將值放置在 Text 中。
        
Text1.LinkPoke                                      '' 將值放入單元。
        
Text1.LinkItem "RRow "C2"                   '' 設置連接項目。
        
Text1.Text Row                                    '' 將值放置在 Text 中。
        
Text1.LinkPoke                                      '' 將值放入單元。
    
Next I
    on Error Resume Next
    
Text1.LinkExecute Cmd                                   '' 執行 Microsoft Excel 命令。
    
MsgBox "LinkExecute DDE demo with Microsoft Excel finished.", 64
    End
End Sub

2.使用 LinkRequest 更新含有 Microsoft Excel 工作單中值的正文框的內容
計算機上必需正在運行着 Microsoft Excel

Private Sub Form_Click()
    
If Text1.LinkMode vbNone Then                         '' 測試連接模式。
        
Text1.LinkTopic "Excel|Sheet1"                    '' 設置連接主題。
        
Text1.LinkItem "R1C1"                             '' 設置連接項目。
        
Text1.LinkMode vbLinkManual                       '' 設置連接模式。
        
Text1.LinkRequest                                   '' 更新正文框內容。
    
Else
        If 
Text1.LinkItem "R1C1Then
            
Text1.LinkItem "R2C1"
            Text1.LinkRequest                               '' 更新正文框內容。
        
Else
            
Text1.LinkItem "R1C1"
            Text1.LinkRequest                               '' 更新正文框內容。
        
End If
    End If
End Sub

3.LinkItem、LinkMode、LinkTopic 屬性示例

在這個例子中,每一次敲擊鼠標都會使 Microsoft Excel 工作單中的單元更新 Visual Basic
的 TextBox   先啓動 Microsoft Excel,打開一個新的名叫 Sheet1 的工作單,在第一列中放入一些數據。

Private Sub Form_Click()
    
Dim CurRow As String
    Static 
Row                                              '' 工作單的行數.
    
Row Row 1                                           '' 增加行.
    
If Row Then                                         '' 只第一次.
        '' 確保連接不是活動的.
        
Text1.LinkMode 0
        '' 設置應用程序的名字和題目名.
        
Text1.LinkTopic "Excel|Sheet1"
        Text1.LinkItem "R1C1"                             '' 設置 LinkItem.
        
Text1.LinkMode 1                                  '' 設置 LinkMode 爲自動.
    
Else
        
''在數據項目中更新行.
        
CurRow "RRow "C1"
        Text1.LinkItem CurRow                             '' 設置 LinkItem.
    
End If
End Sub

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章