专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »VB教程 » vb界面美化:编程之路-界面美化-vb教程 »正文

vb界面美化:编程之路-界面美化-vb教程

来源: 发布时间:星期四, 2009年2月12日 浏览:299次 评论:0


sp; 现在越来越多软件Software都有了很Cool2D造型什么×××× XP啦×××× 2002的类看来争夺软件Software霸权地位2D界面是必不可少有很多人认为Visual Basic语言先天不足导致它不能够很灵活改变界面让俺们来看看究竟吧
如果大家用过Windows优化大师肯定会被它界面所倾倒其实利用ActiveSkin 就可以办到,甚至更爽,但是如果要做共享软件Software只是个文件,在加上几个OCX累赘,似乎很是不爽,看看VB是如何利用别东东来实现
首先新建个EXE工程再在窗体上拖几个LabelControl控件看看Label 强大功能吧原理就是利用Label来模拟个按钮但是首先要将LabelControl控件属性要调
Name: LblBtn
BorderStyle: 1
Appearance: 0
Alignment: 2
这样个按钮雏形就已经出来了如果工程量很大可以将多个LabelControl控件Name属性设为对于按钮识别就要靠识别Index属性了为了方便起见在进入到代码编辑窗口输入以下代码:
Private Const LBL_BACK_COLOR = &HE0E0E0 ’正常时LabelControl控件背景色
Private Const LBL_WHEN_MOUSE_MOVE = &HC0C0C0 ’鼠标移动时Label背景色
Private Const LBL_WHEN_MOUSE_DOWN = &H808080 ’鼠标按下时Label背景色
再在FormLoad事件中输入以下内容
Private Sub Form_Load()
Dim Count As Integer
For Count = 0 To 3 ’请将此出3换成你LblBtn数量个数-1
LblBtn(Count).BackColor=LBL_BACK_COLOR ’化LblBtn背景
Next Count
End Sub
然后再在LblBtnMouseMove和MouseDown事件中来搞定剩余部分:
Private Sub LblBtn_MouseDown(Index As Integer Button As Integer Sht As Integer X As Single Y As Single) ’当鼠标按在LblBtn上时
LblBtn(Index).BackColor = LBL_WHEN_MOUSE_DOWN ’临时改变LblBtn背景颜色
End Sub
Private Sub LblBtn_MouseMove(Index As Integer Button As Integer Sht As Integer X As Single Y As Single) ’鼠标在LblBtn上面移动时触发该事件
Dim Count As Integer
DoEvents ’暂时将系统控制权教给系统
If Button Then Exit Sub ’如果按钮被按下就退出该过程
For Count = 0 To 3
If Count <> Index Then ’如果按下不是其它按钮
LblBtn(Index).BackColor = LBL_BACK_COLOR ’将背景设为正常
Else
LblBtn(Index).BackColor = LBL_WHEN_MOUSE_MOVE ’将背景设为鼠标移动背景
End If
Next Count
End Sub
Private Sub Form_MouseMove(Button As Integer Sht As Integer X As Single Y As Single)
Dim Count As Integer
DoEvents
For Count=0 To 3
LblBtn(Count).BackColor=LBL_BACKCOLOR ’恢复背景
Next Count
End
本来利用Windows消息系统来完成这“艰巨”任务最简单可问题就来了LabelControl控件没有窗口句柄如何办?可是此问题和题无关写了会有骗稿费的:)

OKLabelControl控件就讲到这里在来说说TextBoxControl控件
各位看关恐怕看惯了白颜色背景那么就换换颜色以养养俺们那和绵羊眼睛(为什么说绵羊?俺也不知道)可是VB提供RGB弄出来颜色不是如何好看这里俺来教大家个小TipRGBRedGreenBlue这 3个参数若则产生颜色是灰度当然越接近白颜色越好但也不能让各位看不出来俺建议TextBox背景为RGB(235235235)各位还是实战个TextBox拖到窗体上属性设置如下
Appearance 0
BorderStyle 1
MutilLine True
千万不要设置ScrollBars属性否则会影响效果
在FormLoad事件中化TextBox
Dim bkColor As Long
Private Sub Form_Load()
bkColor=RGB(235235235)
Text1.BackColor=bkColor
End Sub
在Form和Text1MouseMove事件中:
Private Sub Form_MouseMove(Button As Integer Sht As Integer X As Single Y As Single)
Text1.BorderStyle = 0
End Sub
Private Sub Text1_MouseMove(Button As Integer Sht As Integer X As Single Y As Single)
DoEvents
Text1.BorderStyle = 1
End Sub
在按下F5试试是不是很Cool?
可能各位看关玩过石器时代定会对里面TextBox效果感到很爽VB还不是可以做到有焦点Control控件可以使用SetFocus思路方法来为其设置焦点可是个窗体上如果Control控件太多了用SetFocus是不是太傻了?这主角就是--------API
首先声明:
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function GetCursorPos Lib \"user32\" Alias \"GetCursorPos\" (lpPo As POINTAPI) As Long
Private Declare Function WindowFromPo Lib \"user32\" Alias \"WindowFromPo\" (ByVal xPo As Long ByVal yPo As Long) As Long
Private Declare Function SetFocus Lib \"user32\" Alias \"SetFocus\" (ByVal hwnd As Long) As Long
但是这里SetFocus会和Control控件SetFocus会搞混淆改改吧
Private Declare Function nSetFocus Lib \"user32\" Alias \"SetFocus\" (ByVal hwnd As Long) As Long
只要Alias指向接口是对前面名称简直就是摆设
在建立个过程:
Public Function sSetFocus() As Long
Dim CPos As POINTAPISuccessfull As BooleanhWnd As Long
DoEvents
Successfull =GetCursorPos(CPos)
If Not Successfull Then Exit Sub ’如果未成功则退出该过程
hWnd=WindowFromPo(CPos.xCPos.y)
sSetFocus=nSetFocus(hWnd)
End Sub
在窗体上放个TimerControl控件Interval 属性设为100就是0.1秒在Timer1Control控件Timer事件中填入sSetFocus在运行下看看效果如何样?


可是有先生小姐要问了TextBox难道就不能用ScrollBar吗?非也非也选 工程->部件->Microsoft Windows Common Controls-2 6.0 (SP3)就是你答案至于卷动TextBox就去研究SendMessage否则又有骗稿费的嫌如果想作绿色软件Software不想用Control控件可以用俺前面讲到LabelControl控件利用字体 Webdings 来模拟ScrollBar需要注意如果模拟ScrollBar上下左右箭头分别是5634别忘了把字体设为Webdings

再来讲讲窗体美化其实将BorderStyle属性设为0就是很好2D美化;)可是这样问题又来了如何办?凡事都要请API来帮忙这里需要两个API下是该API声明:
Public Declare Function ReleaseCapture Lib \"user32\" Alias \"ReleaseCapture\" () As Long ´这个API是用来解下鼠标追踪器有关他过多使用方法以及详细介绍可以写信向俺咨询
还有
Public Declare Function SendMessage Lib \"user32\" Alias \"SendMessageA\" (ByVal hwnd As Long ByVal wMsg As Long ByVal wParam As Long lParam As Any) As Long’这个该不要俺多介绍了吧
Public Const HTCAPTION = 2 ’代表窗体标题区
Public Const WM_NCLBUTTONDOWN = &HA1 ’表示非工作区左键按下
原理很简单卸下鼠标追踪器后向Form发送个移动窗体消息其实做到这思路方法很多但俺个人认为这种最简单添加个过程:
Public Sub MoveForm(hWnd As Long)
DoEvents
ReleaseCapture
SendMessage hWnd WM_NCLBUTTONDOWN HTCAPTION 0&
End Sub
在FormMouseMove事件中:
Private Sub Form_MouseMove(Button As Integer Sht As Integer X As Single Y As Single)
If Button=vbLeftButton Then MoveForm hWnd’如果按下鼠标左键就移动窗体
End Sub
台下这位小姐又纳闷了可是光秃秃窗体没有了标题栏也不好看俺要向这为小姐推荐俺东东-ActiveXControl控件ToolSign需要人可以写信给俺联系
该Control控件需要在代码编辑区域内添加下代码:
下声明是用在ToolSign AutoQuit属性
Public Const EXIT_FORCE = 2 ’注意在VB中运行时候如果选用此退出方式VB也会退出
Public Const EXIT_MESSAGE = 1 ’由操作系统发送关闭消息
Public Const EXIT_CUSTOM = Not (EXIT_FORCE Or EXIT_MESSAGE) ’自定义
将其注册后在部件栏中把e-Dogkid Studio Tools Sign打钩添加到工具箱中双击加入到窗体中
在FormLoad事件中添加化代码:
Private Sub Form_Load()
With Sign1
.AutoQuit = EXIT_CUSTOM
.ParentsHWND = hWnd ’填了此属性可以直接用ToolSign来移动窗体而不需要前面代码
End With
End Sub
Sign1Click事件
Private Sub Sign1_Click()
End ’关闭
End Sub
在FormResize事件中添加下代码:
Private Sub Form_Resize()
Sign1.Width = Width
End Sub
如果想让窗体可以改变大小可以修改下属性
Caption \"\"
BorderStyle 2或5
ControlBox False
实际情况如图


不知道各位看关见过爆炸试窗体没有?没有见过可以从俺要另外个俺自己ActiveX DLL那个东东其实是给我Software作运行库各位若不嫌弃可以用用注册后在工程->引用->e-Dogkid Runtime Library
然后在窗体Load事件中输入:
Private Sub Form_Load()
Dim As e_Dogkid_Runtime_Library.
Set = New e_Dogkid_Runtime_Library.
Show
.BoomIt hDC 60 Width Height Left Top
Set = Nothing
End Sub
其实俺那个DLL文件有几百个俺自己收集和自己编写很棒.
另外俺QQ号码:16184794email是e-



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: