国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

用VB制作常居上層的浮動(dòng)工具箱

2019-11-18 17:32:49
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
通過(guò)形象化的圖標(biāo),浮動(dòng)工具箱可以省去用戶點(diǎn)擊主菜單的麻煩。當(dāng)鼠標(biāo)位于其圖標(biāo)上時(shí),在鼠標(biāo)下方會(huì)自動(dòng)“掉出”一個(gè)小標(biāo)簽,說(shuō)明它的功能。而且常居上層,不會(huì)被打開(kāi)的文件所覆蓋。并且可以改變形狀及位置,盡可能地減少所占用的桌面面積。

能不能在我們自己的應(yīng)用程序中使用這種先進(jìn)手段呢?這里介紹一種用VB來(lái)實(shí)現(xiàn)的簡(jiǎn)單方法。主要編程思路是:引用WindowsAPL函數(shù),實(shí)現(xiàn)表單常居上層;建立控件數(shù)組,通過(guò)控件的MouseMove事件,引發(fā)注釋的彈出和消失。

一、浮動(dòng)工具箱的可視化實(shí)現(xiàn)方法

1.在Form1上放置控件SSRIBBON按鈕(因?yàn)樗旧碛腥N狀態(tài):按下、彈起、禁止使用,大部分圖標(biāo)按鈕都是這類按鈕)。再放置文本框Text1(也可以用Label控件,但效果會(huì)有所不同,稍后會(huì)講到),再放置一個(gè)命令按鈕Command1。各控件屬性見(jiàn)表1(表中只列出一個(gè)例子,其它的只要修改相應(yīng)的屬性即可)。

2.單擊GP3D1,按ALT+Del剪切,然后按ALT+I(xiàn)nsert復(fù)制若干,形成控件數(shù)組GP3D1(0)、GP3D1(2)、GP3D1(3)……,再如法建立Text1(0)、Text1(1)、Text1(3)……。

3.調(diào)整按鈕及文本框位置。

在此期間,每一項(xiàng)工作都是必要的,如文本框的Visible值為False,以確保程序啟動(dòng)時(shí)不顯示文本框,而Enable值為False是為了在運(yùn)行過(guò)程中,文本框不能輸入文本。如果使用標(biāo)簽(Label)代替文本框,則不能縱向排列圖標(biāo)按鈕,只能橫向。因?yàn)橄旅娴陌粹o會(huì)蓋住Label,但使用Label要比文本框省內(nèi)存。

為了實(shí)現(xiàn)常居上層的效果,必須調(diào)用WindowsAPI函數(shù),事實(shí)上VB的很多方法都引用于WindowsAPI。這里我們用SetWindowsPos過(guò)程,此過(guò)程在User.exe中定義,它是Windows系統(tǒng)重要的動(dòng)態(tài)鏈接庫(kù)。在VB中引用API函數(shù)時(shí),必須在通用聲明部分聲明注冊(cè)。聲明API函數(shù)往往比較麻煩且易出錯(cuò),比如:

DeclareSubSetWindowPosLib″User″(ByValhwndAsInteger,ByVal
hWndInsertAfterAsInteger,ByValXAsInteger,ByValYAsInteger,ByVal
cxAsInteger,ByValcyAsInteger,ByValwFlagsAsInteger)

如果所有的API函數(shù)聲明都這么輸入,效率太低。好在各版本的VB都提供了一個(gè)WindowsAPIHelp程序,打開(kāi)它,搜索SetWindowPos,找到以后點(diǎn)擊超文本帶出解釋,拷貝即可。

二、創(chuàng)建代碼在通用聲明部分輸入下列代碼并聲明一些常量及全程變量:

DeclareSubsetwindowposLib″User″(ByValhwndAsInteger,ByVal
hWndInsertAfterAsInteger,ByValXAsInteger,ByValYAsInteger,
ByValcxAsInteger,ByValcyAsInteger,ByValwFlagsAsInteger)

ConstSWP_NOSIZE=1

ConstSWP_nomove=2

Constflags=SWP_NOSIZEOrSWP_nomove

Consthwnd_topmost=-1

Consthwnd_notopmost=-2

DimIAsInteger

DimBAsInteger

為GP3D1按鈕的MouseMove事件添加如下代碼,這里僅實(shí)現(xiàn)鼠標(biāo)在其上時(shí)注釋器彈出、不在其上時(shí)隱去的功能,讀者可再加一個(gè)計(jì)時(shí)器控件和一些代碼,即可很容易地實(shí)現(xiàn)鼠標(biāo)位于其上片刻后注釋器彈出的效果,這樣就不會(huì)出現(xiàn)鼠標(biāo)“路過(guò)”按鈕時(shí),注釋器即出現(xiàn)的結(jié)果了。

SubGP3D1_MouseMove(indexAsInteger,ButtonAsInteger,Shift

AsInteger,XAsSingle,YAsSingle)

I=index′記錄下當(dāng)前鼠標(biāo)位于哪個(gè)按鈕上

text1(I).Visible=True″使其彈出

IfB<>IThen′使其它按鈕隱去

text1(B).Visible=False

EndIf

B=I′請(qǐng)好好體會(huì)這個(gè)變量B的作用

EndSub

為Command1按鈕的Click事件添加如下代碼:

SubCommand1_Click()

doWhileDoEvents()′用DoEvents()實(shí)現(xiàn)空閑循環(huán)下的多任務(wù)監(jiān)測(cè)

setwindowposhwnd,hwnd_topmost,0,0,0,0,flags′實(shí)現(xiàn)常居上層

loop

EndSub

為Command1按鈕的MouseMove事件添加如下代碼:

SubCommand1_MouseMove(ButtonAsInteger,ShiftAsInteger,X

AsSingle,YAsSingle)

text1(I).Visible=False′鼠標(biāo)離開(kāi)按鈕區(qū),位于命令按鈕上時(shí)隱去注釋器

EndSub

為Form1的MouseMove事件添加如下代碼:

SubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,X

AsSingle,YAsSingle)

text1(I).Visible=False′鼠標(biāo)離開(kāi)按鈕區(qū),進(jìn)入表單時(shí)隱去注釋器

EndSub->


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 田阳县| 蕉岭县| 安多县| 同江市| 日照市| 北安市| 平昌县| 天全县| 长岭县| 丹棱县| 垫江县| 中西区| 怀柔区| 盐山县| 屏东县| 托克逊县| 桦川县| 克拉玛依市| 江油市| 绍兴市| 涟源市| 桦南县| 新安县| 桓仁| 大洼县| 嘉禾县| 沁源县| 旺苍县| 贵州省| 宣恩县| 石阡县| 昌宁县| 北碚区| 宜良县| 五大连池市| 吉首市| 宜兰市| 连云港市| 谷城县| 建水县| 蕲春县|