程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 如何在VB中制作不回顯的文本框

如何在VB中制作不回顯的文本框

編輯:VB綜合教程

  在應用程序中,有時需要用戶錄入一些不宜在屏幕上直接顯示的內容,如用戶口令或機密數據。我們已熟知,在Foxbase/Foxpro中這一功能可以用SETCONSOLEOFF命令關閉向屏幕的回顯來實現。那麼,在VisualBasicforWin-dows中如何做到這一點呢?

  一個容易想到的方法是利用文本框的Key-Press事件,但為了處理用戶對文字的編輯(如刪除、插入),則還要再用其它變量存放真正輸入的內容,而且必須書寫大量復雜的控制程序。實踐證明,這種方法比較繁瑣,不便使用。

  筆者在用VB編程時發現,Windows文本框可以響應許多消息,那麼,可不可以利用WindowsAPI函數sendmessage將控制特性的消息傳遞給文本框呢?如果可行,則可以將使目標以密碼形式輸出的消息傳遞給文本框,不就可以制作出不回顯文字的文本框了嗎?

  答案是肯定的。筆者使用以上思路實現了這一功能。以下是程序中用到的幾個API函數和有關的消息:

  getfocus():返回獲得輸入焦點的目標句柄;

  getwindowlong():取得指定目標的信息,第二個參數為GWL_STYLE時將返回目標的“風格”屬性;

  setwindowlong():把新的屬性值賦予指定的目標。該函數的三個參數分別為目標的句柄、屬性類型、新屬性值;

  sendmessage():向目標發送一條消息。該函數的四個參數分別為接收消息的目標句柄、消息、消息參數一、消息參數二;

  GWL_STYLE(程序中簡寫為STYLE):其值為-16,表示目標的“風格”;

  ES_PASSWORD(程序中簡寫為PASS)簡寫為PASS):其值為&H20,表示目標具有錄入口令的屬性,即在錄入時不回顯;

  EM_SETPASSWORDCHAR(程序中簡寫為PASSCHAR):其值為&H41C,表示傳遞密碼特性。用sendmessage向目標傳遞此消息成功,則目標會將自身的輸出信息以指定的密碼形式給出。

  以下程序,通過sendmessage函數修改文本框Text1的“風格”屬性,使其以指定的密碼形式輸出———不管用戶錄入的是什麼內容,都以相同數量的“*”來顯示。用戶可以通過單點“Command1”按鈕來顯示Text1.Text的真正內容。

  

DeclareFunctiongetfocusLib“user”()AsInteger
DeclareFunctiongetwindowlongLib“user”(ByValhandAsInteger,ByValind
ex AsInte-ger)AsLong
DeclareFunctionsetwindowlongLib“user”(ByValhandAsInteger,ByValind
ex AsInte-ger,ByValnewflagAsLong)AsLong
De reFunctionsendmessageLib“user”(ByValhandAsInteger,ByValmsgAs
Integer,ByValwparaAsInteger,ByVallparaAsLong)AsLong
ConstSTYLE=-16
ConstPASS=&H20
ConstPASSCHAR=&H41C
SubCommand1_Click()
  
        MsgBoxtext1.Text
EndSub
SubCommand2_Click()
  
        End
EndSub
SubForm_Load()
  
        Show
  
        text1.SetFocus
  
        hand%=getfocus()
  
        flag&=getwindowlong(hand%,STYLE)OrPASS
  
        flag&=setwindowlong(hand%,STYLE,flag&)
  
        flag&=sendmessage(hand%,PASS-CHAR,Asc(“*”),0&)
EndSub

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