資源描述:
《擴(kuò)展vb標(biāo)準(zhǔn)控件功能》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、擴(kuò)展VB標(biāo)準(zhǔn)控件功能VB相關(guān)技術(shù):http://blog.sina.com.cn/s/blog_5ccce2820100lof8.html很明顯的,Windows中的控件提供了比VB中的控件多的多的屬性?;蛘呤且?yàn)镸icrosoft太懶了,或者M(jìn)icrosoft認(rèn)為,一個用VB的程序員,永久不會碰到那些屬性。?? 比方說,我們來看看一個很普通的多行文本框。它和Windows中的編輯框(EditBox)幾乎在功能上幾乎沒有什么區(qū)別,只不過少了幾個屬性。比如,編輯框中有一個屬性用來指明它所包含的文本行數(shù),你還能夠通過屬性來得到編輯框中看的見的第一行文本的行序號
2、(同下拉列表的TopIndex相類似)。?? 那么,能夠通過什么方法來發(fā)掘這些本來不具有于VB中的屬性嗎?答案是肯定的。只不過有點(diǎn)麻煩,又要用到API了。在一個名為SendMessage的API函數(shù)的協(xié)助下,我們對普通的文本框的功能進(jìn)行一些很有用的擴(kuò)展:你能夠把文本框中的每一行當(dāng)做一個字符串?dāng)?shù)組中的一個元從來處理。當(dāng)你想要對文本框的內(nèi)容進(jìn)行分析的時(shí)候,這是非常有用的。比方說,如果你想做一個HTML的編輯器程序,并且希望它能有彩色代碼來區(qū)分不同得代碼段(和VB的代碼編輯器差不多的),對每一行進(jìn)行分析要比對整個文本進(jìn)行分析不是要來的方便,容易的多嗎?下面我們來
3、看看例子。?? Let’sgettowork...??來源:www.va1314.com/bc 既然要用到API函數(shù),首先要做的當(dāng)然是聲明SendMessage了:?? PublicDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,_?? ByValwMsgAsLong,_?? ByValwParamAsLong,_?? lParamAsAny)AsLong?? 你還有對要發(fā)送給文本框的消息進(jìn)行聲明。比方說,如果你想要寫一個能告訴你文本框中第一個可見
4、行的序號的函數(shù),你就要做如下的消息聲明:?? PublicConstEM_GETFIRSTVISIBLELINE=&HCE?? 然后你就能夠?qū)懞瘮?shù)了:?? PublicFunctionTopLineIndex(txtBoxAsTextBox)AsLong?? TopLineIndex=SendMessage(txtBox.hWnd,_?? EM_GETFIRSTVISIBLELINE,0&,0&)?? EndFunction?? 因?yàn)橄M_GETFIRSTVISIBLELINE不需要任何的參數(shù),因而wParam和lParam都必須賦值為0。
5、如果你想把這個函數(shù)應(yīng)用在一個富文本框上而標(biāo)準(zhǔn)文本框,僅僅需要把函數(shù)的的參數(shù)類型由TextBox改為RichTextBox就能夠了。不過要記得得是,這個行序號是以0為開始的,當(dāng)函數(shù)前往0時(shí)指的是第一行。?? 富文本框有一個方法GetLineFromChar能夠更具給定的字符序號來判斷它所在的行序號。而標(biāo)準(zhǔn)的文本框卻沒有這個功能。我們已能夠通過上面的方法來處理這個問題。不過這一次,你需要用到的是EM_LINEFROMCHAR消息:?? PublicConstEM_LINEFROMCHAR=&HC9?? EM_LINEFROMCHAR消息把要傳送的字符序號放
6、在參數(shù)wParam中:?? PublicFunctionGetLineFromChar(txtBoxAsTextBox,CharPosAsLong)AsLong?? GetLineFromChar=SendMessage(_txtBox.hWnd,EM_LINEFROMCHAR,CharPos,0&)?? EndFunction?? 因而,如果你想知道光標(biāo)所在行的具體的行序號,用上面的這個函數(shù)就能夠輕松的實(shí)現(xiàn)了:?? DimlngLineIndexAsLong?? lngLineIndex=GetLineFromChar(Text1,Text1.
7、SelStart)?? MsgBox"Youareonlinenumber"&lngLineIndex+1?? 反過來,你也能夠查到每一行的第一個字符在全文中的字符序號,EM_LINEINDEX消息能協(xié)助你做到這一點(diǎn):?? PublicConstEM_LINEINDEX=&HBB?? PublicFunctionGetCharFromLine(txtBoxAsTextBox,LineIndexAsLong)AsLong?? GetCharFromLine=SendMessage(_?? txtBox.hWnd,EM_LINEINDEX,LineI
8、ndex,0&)?? EndFunction??