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

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

VB編程之路-如何讓界面美化

2019-11-18 17:53:36
字體:
供稿:網(wǎng)友
如果大家用過《Windows優(yōu)化大師》,肯定會(huì)被它的界面所傾倒,其實(shí)利用ActiveSkin就可以辦到,甚至更爽,但是如果要做的共享軟件只是一個(gè)文件,在加上幾個(gè)OCX累贅,似乎很是不爽,看看VB是怎么利用別的東東來實(shí)現(xiàn)的吧。

  首先新建一個(gè)EXE工程,再在窗體上拖幾個(gè)Label控件,看看Label的強(qiáng)大功能吧,原理就是利用Label來模擬一個(gè)按鈕,但是首先要將Label控件的屬性要調(diào)一下,
Name:LblBtn,
BorderStyle:1,
Appearance:0,
Alignment:2,

  這樣一個(gè)按鈕的雛形就已經(jīng)出來了,如果工程量很大,可以將多個(gè)Label控件的Name屬性設(shè)為一樣的,對(duì)于按鈕的識(shí)別就要靠識(shí)別Index屬性了,為了方便起見,在進(jìn)入到代碼編輯窗口,輸入以下代碼:

PRivateConstLBL_BACK_COLOR=&HE0E0E0’正常時(shí)Label控件的背景色
PrivateConstLBL_WHEN_MOUSE_MOVE=&HC0C0C0’鼠標(biāo)移動(dòng)時(shí)Label的背景色
PrivateConstLBL_WHEN_MOUSE_DOWN=&H808080’鼠標(biāo)按下時(shí)Label的背景色

再在Form的Load事件中輸入以下內(nèi)容

PrivateSubForm_Load()
DimCountAsInteger
ForCount=0To3’請(qǐng)將此出的3換成你的LblBtn數(shù)量的個(gè)數(shù)-1
LblBtn(Count).BackColor=LBL_BACK_COLOR’初始化LblBtn的背景
NextCount
EndSub

然后再在LblBtn的MouseMove和MouseDown事件中來搞定剩余部分:

PrivateSubLblBtn_MouseDown(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)’當(dāng)鼠標(biāo)按在LblBtn上時(shí)
LblBtn(Index).BackColor=LBL_WHEN_MOUSE_DOWN’臨時(shí)改變LblBtn背景顏色
EndSub
PrivateSubLblBtn_MouseMove(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)’鼠標(biāo)在LblBtn上面移動(dòng)時(shí)觸發(fā)該事件
DimCountAsInteger
DoEvents’暫時(shí)將系統(tǒng)控制權(quán)教給系統(tǒng)
IfButtonThenExitSub’如果按鈕被按下就退出該過程
ForCount=0To3
IfCount<>IndexThen’如果按下的不是其它按鈕
LblBtn(Index).BackColor=LBL_BACK_COLOR’將背景設(shè)為正常
Else
LblBtn(Index).BackColor=LBL_WHEN_MOUSE_MOVE’將背景設(shè)為鼠標(biāo)移動(dòng)的背景
EndIf
NextCount
EndSub
PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
DimCountAsInteger
DoEvents
ForCount=0To3
LblBtn(Count).BackColor=LBL_BACKCOLOR’恢復(fù)背景
NextCount
End
  本來利用Windows的消息系統(tǒng)來完成這一“艱巨”的任務(wù)最簡(jiǎn)單,可問題就來了,Label控件沒有窗口句柄怎么辦?可是此問題與題無關(guān),寫了會(huì)有騙稿費(fèi)之:)
OK,Label控件就講到這里,在來說說TextBox控件,

  各位看關(guān)恐怕看慣了白顏色的背景,那么就換換顏色以養(yǎng)養(yǎng)俺們那和綿羊一樣的眼睛(為什么說綿羊?俺也不知道),可是VB提供的RGB函數(shù)弄出來的顏色不是怎么好看,這里俺來教大家一個(gè)小Tip,RGB函數(shù)的Red,Green,Blue這三個(gè)參數(shù)若一樣,則產(chǎn)生的顏色是灰度,當(dāng)然越接近白顏色越好,但也不能讓各位看不出來,俺建議TextBox的背景為RGB(235,235,235),各位還是實(shí)戰(zhàn)一下,將一個(gè)TextBox拖到窗體上,屬性設(shè)置如下
Appearance0
BorderStyle1
MutilLineTrue

千萬不要設(shè)置ScrollBars屬性,否則會(huì)影響效果
在Form的Load事件中初始化TextBox
DimbkColorAsLong
PrivateSubForm_Load()
bkColor=RGB(235,235,235)
Text1.BackColor=bkColor
EndSub
在Form和Text1的MouseMove事件中:
PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Text1.BorderStyle=0
EndSub
PrivateSubText1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
DoEvents
Text1.BorderStyle=1
EndSub

在按下F5試試是不是很Cool?


  可能各位看關(guān)玩過石器時(shí)代,一定會(huì)對(duì)里面的TextBox的效果感到很爽,VB還不是可以做到,有焦點(diǎn)的控件可以使用SetFocus方法來為其設(shè)置焦點(diǎn),可是一個(gè)窗體上如果控件太多了,一個(gè)一個(gè)的用SetFocus是不是太傻了?這一節(jié)的主角就是--------API函數(shù),

首先聲明:
PrivateTypePOINTAPI
xAsLong
yAsLong
EndType
PrivateDeclareFunctionGetCursorPosLib"user32"Alias"GetCursorPos"(lpPointaspOINTAPI)AsLong
PrivateDeclareFunctionWindowFromPointLib"user32"Alias"WindowFromPoint"(ByValxPointAsLong,ByValyPointAsLong)AsLong
PrivateDeclareFunctionSetFocusLib"user32"Alias"SetFocus"(ByValhwndAsLong)AsLong
但是這里的SetFocus會(huì)和控件的SetFocus會(huì)搞混淆,改改吧,
PrivateDeclareFunctionnSetFocusLib"user32"Alias"SetFocus"(ByValhwndAsLong)AsLong
只要Alias指向的接口是對(duì)的前面的函數(shù)名稱簡(jiǎn)直就是擺設(shè),
在建立一個(gè)過程:
PublicFunctionsSetFocus()AsLong
DimCPosAsPOINTAPI,SuccessfullAsBoolean,hWndAsLong
DoEvents
Successfull=GetCursorPos(CPos)
IfNotSuccessfullThenExitSub’如果未成功則退出該過程
hWnd=WindowFromPoint(CPos.x,CPos.y)
sSetFocus=nSetFocus(hWnd)
EndSub
  在窗體上放一個(gè)Timer控件,Interval屬性設(shè)為100,就是0.1秒,在Timer1控件的Timer事件中填入sSetFocus,在運(yùn)行一下看看,效果怎么樣?

  可是有的先生小姐要問了,TextBox難道就不能用ScrollBar嗎?非也非也,選工程->部件->MicrosoftWindowsCommonControls-26.0(SP3)就是你的答案,至于卷動(dòng)TextBox就去研究SendMessage函數(shù)吧,否則又有騙稿費(fèi)之嫌,如果想作綠色軟件,不想用控件,可以用俺前面講到的Label控件,利用字體Webdings來模擬ScrollBar,需要注意的是,如果模擬ScrollBar,上下左右箭頭分別是5,6,3,4,別忘了把字體設(shè)為Webdings

  再來講講窗體的美化,其實(shí)將BorderStyle屬性設(shè)為0就是很好的2D美化;)可是,這樣一來,問題又來了,怎么辦?凡事都要請(qǐng)API來幫忙,這里需要兩個(gè)API,一下是該API的聲明:

PublicDeclareFunctionReleaseCaptureLib"user32"Alias"ReleaseCapture"()AsLong注釋:這個(gè)API是用來解下鼠標(biāo)的追蹤器,關(guān)于他的過多用法以及詳細(xì)介紹可以寫信向俺咨詢,
還有
PublicDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong’這個(gè)該不要俺多介紹了吧
PublicConstHTCAPTION=2’代表窗體的標(biāo)題區(qū)
PublicConstWM_NCLBUTTONDOWN=&HA1’表示非工作區(qū)左鍵按下
  原理很簡(jiǎn)單,卸下鼠標(biāo)追蹤器后向Form發(fā)送一個(gè)移動(dòng)窗體的消息,其實(shí)做到這一點(diǎn)的方法很多,但俺個(gè)人認(rèn)為這一種最簡(jiǎn)單,添加一個(gè)過程:

PublicSubMoveForm(hWndAsLong)
DoEvents
ReleaseCapture
SendMessagehWnd,WM_NCLBUTTONDOWN,HTCAPTION,0&
EndSub
在Form的MouseMove事件中:
PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=vbLeftButtonThenMoveFormhWnd’如果按下鼠標(biāo)左鍵就移動(dòng)窗體
EndSub
臺(tái)下的這位小姐又納悶了,可是光禿禿的窗體沒有了標(biāo)題欄也不好看,俺要向這為小姐推薦俺的東東-ActiveX控件,ToolSign,需要的人可以寫信給俺聯(lián)系,
該控件需要在代碼編輯區(qū)域內(nèi)添加一下代碼:
’一下聲明是用在ToolSign的AutoQuit屬性的
PublicConstEXIT_FORCE=2’注意,在VB中運(yùn)行的時(shí)候如果選用此退出方式,VB也會(huì)退出
PublicConstEXIT_MESSAGE=1’由操作系統(tǒng)發(fā)送關(guān)閉消息
PublicConstEXIT_CUSTOM=Not(EXIT_FORCEOrEXIT_MESSAGE)’自定義
將其注冊(cè)后在部件欄中把e-DogkidStudioToolsSign打鉤,添加到工具箱中,雙擊加入到窗體中,
在Form的Load事件中添加一下初始化代碼:
PrivateSubForm_Load()
WithSign1
.AutoQuit=EXIT_CUSTOM
.ParentsHWND=hWnd’填了此屬性可以直接用ToolSign來移動(dòng)窗體而不需要前面的代碼
EndWith
EndSub
Sign1的Click事件
PrivateSubSign1_Click()
End’關(guān)閉程序
EndSub
在Form的Resize事件中添加一下代碼:
PrivateSubForm_Resize()
Sign1.Width=Width
EndSub
如果想讓窗體可以改變大小,可以修改一下屬性
Caption""
BorderStyle2或5
ControlBoxFalse

  不知道各位看關(guān)見過爆炸試的窗體沒有?,沒有見過可以從俺要另外一個(gè)俺自己的ActiveXDLL,我的那個(gè)東東其實(shí)是給我的Software作運(yùn)行庫(kù)的,各位若不嫌棄,可以用用,注冊(cè)后在工程->引用->e-DogkidRuntimeLibrary
然后在窗體Load事件中輸入:
PrivateSubForm_Load()
DimSystemAse_Dogkid_Runtime_Library.System
SetSystem=Newe_Dogkid_Runtime_Library.System
Show
System.BoomIthDC,60,Width,Height,Left,Top
SetSystem=Nothing
EndSub

->


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 德阳市| 沾化县| 大悟县| 南城县| 清镇市| 台南县| 扎赉特旗| 兴安盟| 临潭县| 霍山县| 玛纳斯县| 庆元县| 余干县| 新乡县| 双牌县| 罗定市| 雷州市| 丹棱县| 绵竹市| 余姚市| 卫辉市| 丹寨县| 监利县| 额尔古纳市| 杭州市| 乐平市| 尼玛县| 应城市| 万州区| 明水县| 佛山市| 苍山县| 利川市| 公安县| 嘉荫县| 佛坪县| 三门峡市| 苍南县| 霍山县| 沁阳市| 遂宁市|