摘要:該文介紹了利用VB設(shè)計(jì)簡(jiǎn)單適用的超文本功能時(shí)熱鏈功能的設(shè)計(jì)與實(shí)現(xiàn)方法。
關(guān)鍵詞:超文本;Visual Basic;熱鏈
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2008)36-2655-03
Designing and Achieving Hotlink of hypertext System in VB
FAN Xian-mei
(Technique Center of Modern Education, Anhui University of Architecture, Hefei 230022, China)
Abstract:The article describes a new methods to designed and achieve hotlink in a simple and practicable hypertext system in VB
Key words: Hypertext; Visual Basic; Hotlink
1 引言
使用過WINDOWS的人都會(huì)用到Micsorft復(fù)雜的幫助系統(tǒng),該系統(tǒng)可以讓用戶很快地找到特定的主題,并且通過單擊熱鏈在主題與主題之間跳轉(zhuǎn)。WINDOWS幫助系統(tǒng)是典型的超文本應(yīng)用程序。
超文本是近年來興起的一種表示和管理多媒體信息的強(qiáng)有力工具。與傳統(tǒng)文本相比超文本的最大特點(diǎn)是:它可以把信息根據(jù)需要以非線性的方式鏈接起來。結(jié)點(diǎn)(Node)和鏈(Link)是超文本的兩個(gè)核心概念。結(jié)點(diǎn)是信息的單位,可以包括文本、圖像、聲音、視頻、動(dòng)畫等各種媒體信息。鏈用來組織信息,表達(dá)信息間的關(guān)系(包括媒體間的時(shí)空關(guān)系),實(shí)現(xiàn)結(jié)點(diǎn)間的連接與轉(zhuǎn)移(單向與雙向)。因此,超文本試圖通過非線性的手段,將相關(guān)信息有機(jī)地組織在一起,模擬人腦的自由聯(lián)想。它不僅注意信息本身,更注意信息之間的聯(lián)想關(guān)系。建立和瀏覽信息系統(tǒng)時(shí),用戶可以任意選擇起始點(diǎn)和其后的順序。
熱鏈?zhǔn)浅谋镜撵`魂,它定義了超文本的結(jié)構(gòu),其作用主要是用來建立結(jié)點(diǎn)之間的基本順序。
2 熱鏈的基本要素
在顯示的超文本中,熱鏈總是突出顯示,它是一個(gè)活動(dòng)的區(qū)域,當(dāng)鼠標(biāo)在熱鏈上移動(dòng)時(shí),會(huì)改變指針的形狀,當(dāng)用戶在活動(dòng)區(qū)域內(nèi)單擊鼠標(biāo)時(shí),會(huì)被引導(dǎo)到相關(guān)主題。熱鏈可以是文本或圖片。熱鏈的內(nèi)容可以用異種格式(帶下劃線、粗體/斜體、改變顏色、圖標(biāo)、按鈕等)給予標(biāo)記。
熱鏈的特點(diǎn)包括兩個(gè)方面:一是鼠標(biāo)處于其上時(shí)具有不同的形狀;二是單擊鼠標(biāo)左鍵的響應(yīng)。操作過程上可以分為兩個(gè)事件:鼠標(biāo)移動(dòng)和鼠標(biāo)單擊。由鼠標(biāo)移動(dòng)的響應(yīng)函數(shù)完成對(duì)鼠標(biāo)是否在熱鏈上的判斷,若在熱鏈上則改變鼠標(biāo)的形狀。在單擊鼠標(biāo)事件的響應(yīng)函數(shù)中,根據(jù)鼠標(biāo)的開關(guān)來確定應(yīng)彈出的相應(yīng)信息。
3 超文本中熱鏈的設(shè)計(jì)與實(shí)現(xiàn)
目前有多種方法開發(fā)超文本系統(tǒng)。由于VB不支持超文本,因此,筆者在用VB開發(fā)多媒體CAI教學(xué)軟件時(shí)用VB開發(fā)了一個(gè)小型的超文本系統(tǒng)。本文僅介紹其中熱鏈功能的實(shí)現(xiàn)方法。
3.1 鼠標(biāo)指針圖形的設(shè)計(jì)
在通常情況下我們?cè)谄聊簧纤吹降氖髽?biāo)指針形狀為雙線箭頭,當(dāng)鼠標(biāo)移動(dòng)到熱鏈上時(shí),其指針形狀將改變以提示用戶此處是熱區(qū),這里指針形狀的改變是由Mous.Move函數(shù)來實(shí)現(xiàn)。而鼠標(biāo)的指針形狀的設(shè)計(jì)和選擇有兩種方法:第一種方法是利用現(xiàn)有資源。這種方法比較簡(jiǎn)單,在WINDOWS系統(tǒng)和VB軟件的Cursors子目錄中有許多擴(kuò)展名為.CUR的圖標(biāo)文件,這些文件提供了各種不同形狀的圖形,我們?cè)陂_發(fā)軟件時(shí)可以根據(jù)不同的需要適當(dāng)加以選擇后直接應(yīng)用(只要將所選擇的圖形文件拷貝到相應(yīng)的路徑及文件夾中即可)。當(dāng)然還可以利用各種能夠找到的擴(kuò)展名為.ICO的圖標(biāo)文件。第二種方法是自己設(shè)計(jì)鼠標(biāo)圖形。目前有許多易學(xué)實(shí)用的圖標(biāo)編輯工具軟件,比較常見的有以下幾種:Axialis IconWorkshop(全功能圖標(biāo)編輯軟件)、YansIconMaker(Ico格式圖標(biāo)及ani格式動(dòng)態(tài)光標(biāo)制作)、Falco Image Studio (圖標(biāo)制作和編輯工具)、IconCool Studio(ico圖標(biāo)編輯和圖標(biāo)制作工具)、IcoFX(圖標(biāo)編輯工具)、Easy Paint Tool SAI(專業(yè)級(jí)的圖標(biāo)制作工具)、IconLover(icon圖標(biāo)處理軟件)、ArtIcons Pro(創(chuàng)建和編輯以及管理系統(tǒng)環(huán)境下圖標(biāo)ico)等。利用這些工具軟件可以對(duì)已有圖標(biāo)進(jìn)行修改編輯,也可以自行設(shè)計(jì)具有獨(dú)特風(fēng)格的個(gè)性化鼠標(biāo)圖形,圖形編輯結(jié)束后,將所編輯的圖形以合適的文件名存放到適當(dāng)?shù)哪夸浿?,系統(tǒng)將會(huì)把該文件以.ICO或.CUR后綴文件格式存放。
根據(jù)圖形來源不同,在VB應(yīng)用程序中,編寫相應(yīng)的語句如下:
Cursor1=LoadPicture(“D:\\ICONS\\MOUSE02.ICO”) \\\\自定義圖形
Cursor2=LoadPicture(“D:\\ICONS\\MOUSE03.CUR”)\\\\自定義圖形
Cursor3=LoadPicture(“C:\\Windows\\Couser\\Buzy_1.CUR”) \\\\系統(tǒng)提供的圖形
以上的文件路徑應(yīng)根據(jù)文件存放位置自行設(shè)置。
3.2 MousePointer和MouseIcon屬性的設(shè)置
在VB系統(tǒng)中為控件設(shè)置了MousePointer屬性和MouseIcon屬性,MousePointer屬性用來設(shè)置或返回當(dāng)鼠標(biāo)經(jīng)過對(duì)象某一部分時(shí)鼠標(biāo)指針的類型,該屬性設(shè)有15個(gè)值,當(dāng)其返回值為0—14時(shí),鼠標(biāo)的圖形為系統(tǒng)設(shè)置的不同的默認(rèn)形狀;當(dāng)其值為99時(shí),則顯示自定義鼠標(biāo)圖形。因此,在應(yīng)用程序中若要使用自定義的鼠標(biāo)圖形,必須蔣該屬性的值設(shè)為99,否則蔣不能顯示自定義的鼠標(biāo)圖形。MouseIcon屬性提供一個(gè)自定義圖標(biāo),使程序能夠很容易地訪問自定義光標(biāo),它可以是任意大小并具有任何熱點(diǎn)的光標(biāo),它在MousePionter屬性設(shè)為99時(shí)使用。為窗體上的Picture1控件設(shè)置自定義鼠標(biāo)指針類型的相應(yīng)語句示例如下:
Frmjtzd.Picture1.MousePionter=99
Frmjtzd.Picture1.MouseIcon= LoadPicture(“D:\\ICONS\\MOUSE02.ICO”) \\\\自定義圖形
雖然VB不創(chuàng)建或不支持彩色光標(biāo)(.CUR格式)文件,但可以使用MouseIcon屬性來裝入光標(biāo)或者圖標(biāo)文件。這樣裝入的彩色光標(biāo)文件(例如Windows附帶的)將以黑白形式顯示。要顯示一個(gè)彩色光標(biāo),應(yīng)使用彩色圖標(biāo)文件(.ICO格式)。
目前在高版本的Windows系統(tǒng)中支持32位高色彩的鼠標(biāo)指針,然而在VB程序中,卻不支持這么高位的色彩,也不支持動(dòng)畫圖標(biāo),因此,若要載入32位色彩或者動(dòng)畫的鼠標(biāo)指針,可以通過調(diào)用Windows的API函數(shù)實(shí)現(xiàn)這一目的。這里用到兩個(gè)API函數(shù),LoadCursorFromFile用于裝入新光標(biāo)(xin),需要指明新光標(biāo)的具體路徑及文件名;SetClassLong用于設(shè)置使用新光標(biāo)(NewCur)。這一函數(shù)使用時(shí)會(huì)返回一個(gè)代表前一個(gè)光標(biāo)的變量值(OldCur),為我們關(guān)閉程序時(shí)得以方便的恢復(fù)原始光標(biāo)(OldCur)。函數(shù)的VB定義如下:
Private Declare Function LoadCursorFromFile Lib \"user32\" Alias \"LoadCursorFromFileA\"(ByVal lpFileName As String) As Long
Private Declare Function SetClassLong Lib \"user32\" Alias \"SetClassLongA\" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Dim NewCur As Long
Dim OldCur As Long
為窗體對(duì)象設(shè)置新光標(biāo)的語句示例:
Private Sub Form_Load()
NewCur = LoadCursorFromFile(\"C:\\WINDOWS\\CURSORS\\ handns.ani\")
OldCur = SetClassLong(hwnd, -12, NewCur)
End Sub
恢復(fù)原始光標(biāo)的語句示例:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
SetClassLong hwnd, -12, OldCur
End Sub
3.3 建立跟蹤熱鏈的數(shù)據(jù)結(jié)構(gòu)
超文本文檔中將會(huì)包含許多超級(jí)鏈接,程序只有記錄了熱鏈在屏幕中的位置后,我們才能跟蹤它們,為此,必須定義一個(gè)記錄熱鏈位置的數(shù)據(jù)結(jié)構(gòu):
Private Type Link_Type
Left X As Integer
Top X As Integer
Right X As Integer
Bottom X As Integer
LinkIndex As Integer
End Type
這個(gè)數(shù)據(jù)主要用于記錄熱鏈在屏幕中的位置,這是由程序來實(shí)現(xiàn)的,當(dāng)文字在屏幕上顯示的同時(shí),讀取文字的子程序會(huì)自動(dòng)的識(shí)別其中的熱鏈,并記錄其各熱鏈在屏幕上的位置(上、下、左、右)及序號(hào),以備下一步使用。
3.4 建立鼠標(biāo)移動(dòng)事件與其響應(yīng)函數(shù)的映射
當(dāng)經(jīng)過處理后的超文本文件顯示在屏幕上時(shí),其熱鏈部分將以異種格式顯示,此時(shí)熱鏈在屏幕中的位置已經(jīng)被相應(yīng)的子程序記錄下來,當(dāng)光標(biāo)在其上移動(dòng)時(shí),光標(biāo)的形狀將改變以提示用戶此處是熱鏈,這一功能的實(shí)現(xiàn)是由鼠標(biāo)移動(dòng)事件及其響應(yīng)函數(shù)來完成的。該項(xiàng)函數(shù)主要用來判斷鼠標(biāo)是否在熱點(diǎn)上,若在則改變鼠標(biāo)指針形狀。相應(yīng)的語句如下:
Private Sub Picture1_mouseMove(Button As Integer, Shift As integer, X As single, Y As single )
Dim found As integer
Dim Index As integer
Found=1
For index=1 to CurrentLink
If(X>Links(index).left X) and ((Xlink(indx) .Top Y)
and ((Y
Found=ture
End if
Next Index
If Found Then
Frmjtzd .Picture1 .MouseIcon=Couser1 \\\\用戶自定義鼠標(biāo)指針圖形
Frmjtzd .Picture1 .MousePointer=99
Else
Frmjtzd .Picture1 .MousePointer=0
End if
End sub
3.5 建立單擊鼠標(biāo)事件與其響應(yīng)函數(shù)的映射
鼠標(biāo)移動(dòng)到熱鏈上后將改變形狀,這時(shí)單擊鼠標(biāo)則可以彈出相關(guān)信息,這一功能的實(shí)現(xiàn)主要是由MouseDown函數(shù)來完成的。假如Picture1中(100,100,200,200)的矩形區(qū)域?yàn)闊徭溗谖恢?,Word的內(nèi)容為與熱鏈相關(guān)的信息內(nèi)容,則相應(yīng)的部分函數(shù)語句如下:
Private Sub Picture1_mouseDown (Button As Integer, Shift As integer, X As single, Y As single )
Dim found As integer
Dim Index As integer
Found=1
For index=1 to CurrentLink
If(X<200 and X>100 and Y>100 and Y<200) then
Picture2.piont Word
End if
┋
Next Index
End sub
4 結(jié)束語
熱鏈?zhǔn)浅谋镜暮诵?,是?shí)現(xiàn)超文本功能的關(guān)鍵技術(shù),本文介紹的方法已應(yīng)用于我們開發(fā)的多媒體CAI教學(xué)軟件中,用此方法可以輕松實(shí)現(xiàn)多個(gè)熱鏈響應(yīng),效果很好。
參考文獻(xiàn):
[1] Regelski M.Visual Basic 開發(fā)多媒體應(yīng)用程序[M].謝東譯.北京:清華大學(xué)出版社,1997.
[2] Petroutsos E.Visual Basic 從入門到精通[M].邱促潘,譯.北京:電子工業(yè)出版社,1997.