首先新建一個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?
首先聲明:
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
|
新聞熱點
疑難解答