程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 用VB防止文本控件中的部分滾動

用VB防止文本控件中的部分滾動

編輯:VB綜合教程

  Windows API的SendMessage函數可以用來向Visual Basic控件中 發送消息,例如向文本框控件上發送消息。本文介紹如何利用該函數 防止文本框控件中的部分文本滾動,即該控件中不能滾動的部分不能 被用戶看見。

  發送消息到文本框控件

  Visual Basic中的文本框控件就是一個最小化的字處理程序。當 該文本控件的Mult iLine屬性被設置為True時,則文本可以自動換行; 當在文本框控件中鍵入了許多文本時,控件中的文本會向上滾動。這 時文本就變得看不到了,但這些文本實際上仍然在控件中——它們並 沒有被刪除。

  Windows API的SendMessage函數可以用來防止文本框控件中的文 本滾動而超出我們的視線。當創建該文本框控件時,它的客戶區域格 式化為一個矩形(該區域就是鍵入文本的地方),可以給該控件發送EM_ SETRECTNP消息,對該矩形區域進行限制,以在文本框的客戶區域中指 定一個特定區域。

  在下面的樣例程序中,我們希望文本控件的後一半原封不動地保 持完整,即不希望文本滾動而超出視線。可以從文本框控件的Height 屬性中提取出它的高度,並將該值除以2,得到該文本框控件後一半的 坐標。然後將該結果傳遞給SendMessage函數,告訴EM_SETR ECTNP防 止該矩形區域滾動。

  有些程序員可能會希望使用EM_SETRECT消息代替EM_SETRECTNP消 息。但是,使用EM_ SETRECT消息會停止Windows對該格式化矩形區域 中的文本的重新繪制,導致文本框控件中的文本看不到。

  樣例程序

  該程序顯示了如何臨時凍結一個文本框控件中的特定部分,該部 分包含的文本不能滾動,因而不會超出視線之外,如下圖所示。

  1.在Visual Basic中開始一個新的工程,采用缺省的方法建立For m1。

  2.將如下常量和聲明語句添加到Form1的通用聲明部分中(注意該 聲明語句需要書寫在一行內):

  

  Private Declare Function SendMessage Lib "User" (ByVal h Wnd As Integer, ByVal wMsg As Integer, ByVal wParam As Inte ger, lParam As Any) As Long
  
        Const WM_USER = &H400
  
        Const EM_SETRECTNP = WM_USER + 4
  
        Const EM_SETRECT = WM_USER + 3

  對於32位環境下使用Visual Basic 5.0的用戶,需要將如下聲明 語句添加到Form1的通用聲明部分中:

  

  Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVa l wParam Long, lParam As Any) AsLong
  
        Const EM_SETRECTNP = &HB4
  
        Const EM_SETRECT = &HB3

  3.將如下代碼添加到Form1的Form_Load事件中:

  

  Private Sub Form_Load()
  
        Text1.Text = "這是我們希望顯示出來的第一段"
  
        Text1.Text = Text1.Text & "它位於文本框控件中"
  
        Text1.Text = Text1.Text & Chr$(13) & Chr$(10) & "這是第 二段,我們"
  
        Text1.Text = Text1.Text & "希望將之凍結以使文本不能滾動 "
  
        End Sub

  4.將如下代碼添加到Form1的Click事件中:

  

  Private Sub Form_Click()
  
        Dim R As RECT
  
        Dim X As Long
  
        ScaleMode = 3
  
        R.Left = 0
  
        R.Top = 0
  
        R.Right = Text1.Width
  
        R.Bottom = Text1.Height / 2
  
        X = SendMessage(Text1.hWnd, EM_SETRECTNP, 0, R)
  
        End Sub

  5.創建一個新的模塊,采用缺省的方法建立Module1.Bas。

  6.將如下TYPE結構添加到Module1.Bas中:

  

  Type RECT
  
        Left As Integer
  
        Top As Integer
  
        Right As Integer
  
        Bottom As Integer
  
        End Type

  對於32位環境下使用Visual Basic 5.0的用戶,需要將如下TYPE 結構添加到Module1 .Bas中:

  

  Type RECT
  
        Left As Long
  
        Top As Long
  
        Right As Long
  
        Bottom As Long
  
        End Type

  7.在Form1上添加一個文本框控件,采用缺省的方法建立Text1,將 其MultiLine屬性設置為True。

  按下F5來執行該程序,我們可以看到文本框顯示在Form1上。在窗 體上單擊一次鼠標,將新的文本鍵入到該文本框控件中。這時我們可 以注意到,當我們在文本框控件的開頭處鍵入新的文本時,在文本框控 件下半部分的文本不會滾動。

  如果我們將EM_SETRECT消息替代EM_SETRECTNP消息發送給文本框 ,再次運行該程序,這時我們會發現,文本框的下半部分顯示不出來,盡 管實際上文本仍然是存儲在控件中的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved