Visual Basic编程之路-如何让界面美化 |
假如大家用过《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是用来解下鼠标的追踪器,关于他的过多用法以及 详尽介绍 可以写信向俺 征询, 还有
|