麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

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

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

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

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

PRivateConstLBL_BACK_COLOR=&HE0E0E0’正常時Label控件的背景色
PrivateConstLBL_WHEN_MOUSE_MOVE=&HC0C0C0’鼠標移動時Label的背景色
PrivateConstLBL_WHEN_MOUSE_DOWN=&H808080’鼠標按下時Label的背景色

再在Form的Load事件中輸入以下內容

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

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

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

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

千萬不要設置ScrollBars屬性,否則會影響效果
在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?


  可能各位看關玩過石器時代,一定會對里面的TextBox的效果感到很爽,VB還不是可以做到,有焦點的控件可以使用SetFocus方法來為其設置焦點,可是一個窗體上如果控件太多了,一個一個的用SetFocus是不是太傻了?這一節的主角就是--------API函數,

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

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

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

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

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

  不知道各位看關見過爆炸試的窗體沒有?,沒有見過可以從俺要另外一個俺自己的ActiveXDLL,我的那個東東其實是給我的Software作運行庫的,各位若不嫌棄,可以用用,注冊后在工程->引用->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

->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: av电影免费在线看 | 最新中文在线视频 | 欧美高清在线精品一区二区不卡 | 国产成人精品区 | 久草在线最新免费 | 牛牛碰在线视频 | 欧美性精品videofree | 成人男男视频拍拍拍在线观看 | 丰满年轻岳中文字幕一区二区 | 日本精品免费观看 | 成人午夜免费福利 | 一级免费看片 | 婷婷久久青草热一区二区 | 国产做爰全免费的视频黑人 | av电影在线播放 | 91久久精品一区二区 | 亚州综合图片 | 色淫影院 | 亚洲一区二区三区四区精品 | 99爱视频 | 免费国产一级淫片 | 亚洲精久久 | 免费在线观看成年人视频 | 黄色美女免费 | 中国黄色一级生活片 | 日韩欧美电影在线观看 | 久草在线观看福利 | 成人免费看片a | 精品在线免费播放 | 久久久久免费精品国产小说色大师 | 国产一区精品视频 | 国产视频在线观看免费 | 久久久久久久久淑女av国产精品 | 男男羞羞视频网站国产 | 免费淫视频 | 欧美wwwsss9999 | 超碰一区 | 日本成人在线免费 | av国产片 | 国产免费一区二区三区在线能观看 | 中文欧美日韩 |