首先新建一个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)AsLongPrivateDeclareFunctionWindowFromPointLib"user32"Alias"WindowFrom Point"(ByValxPointAsLong,ByValyPointAsLongAsLongPrivateDeclareFunctionSetFocusLib"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 7 回答者: ys步骤:
1、 工欲善其事,必先利其器。用到的工具有ResourceHacker、eXeScope。可以搜索下载。替换的背景图片,大小可以不和原来的一样,默认大小是324×214,当然你也可以自定义。如果要更换按钮图片,则需要制作4张图片,分别是鼠标滑过、鼠标按下、普通状态、“登陆QQ”按钮状态。其他图片类似。
2、 到QQ安装目录下查找LoginCtrl.dll文件(2007版本之后是 LoginCtrlRes.dll文件),做好备份,以便发生错误时恢复。
3、 使用ResHacker打开LoginCtrl.dll文件,在左侧资源中的“位图”中替换相应图片:替换16050为你想要的背景图片。如果你设置图片想原来默认图片一样是上下2张分开的,则需要替换963和16050两个图片。
4、 打开“对话框”→450,这时会看到右边的预览对话框:
5、 右键点击上面的图片(QQ2006图片),选择“编辑控件”,打开“控件编辑器”,在风格中选择最下面的“WS_CLIPSIBLINGS”,这个选项的功能是隐藏控件,但是能点击到,在下面缓稿升的按钮修改中还要用到。
6、 右键点击下面的图片,就是你换的那个图片,选择“编辑控件”,在控件坐标的左、上都填上“0”,确定后这样界面改成这样:
7、 修改代码窗口中背景图片对应的一行代码,将控件ID修改为0或者其他没有用到的数字(在修改过程中我没有修改,导致登陆框下方总是存在一行白条,调节下方的竖长条也不行,现在还没有搞明白),一般使用0或者-1等。
8、 为什么我的图片不能完全显示呢(如果你的图片是规则的324×214则不会出现问题,为了全面介绍,我使用的图片是432×228)?和上面最终效果比较一下,右边一部分没有出现。测试发现,上图右下角的“取消”按钮是控制右边界的(聪明的你是不是想到网上流传的超小登陆界面是怎么制作的了?)。在ResHacker代码窗口最上面一行中,修改对话框宽度为图片宽度288。点击“编译脚本”,看看右边预览窗口是不是变了?
这时用鼠标或者键盘将“取消”按钮移动到右边框左侧一点:
9、 右边界搞定了,下面来确定下边界。经测试,下边界通过下面的竖长条确定:
10、 调整竖长条上边界到上面图片的下边界,然后调整右侧的控件位置,然后确保竖长条的下边界能包含住右边的控件:
11、 回到主界面。用鼠标调整按钮等控件到合适位置。然后编辑控件,选择上边扰老第5步中的“WS_CLIPSIBLINGS”项,让按钮隐藏,但是能够起作用。对于其他的控件可以这样处理:“忘记密码”、“QQ号码”“QQ密码”等可以使用上述方式隐藏,也可以将大小设置为长为0或者宽为0来隐藏。“自动登陆”和“隐身登陆”前面的复选框这样设置:右键编辑控件,大小设置为8×8,取消风格中的“BS_FLAT”项,这样没有黑边。
12、 这样设置后,基本上就OK了。这样做出来的只是界面更换了,其他的没有改变,下面我们来去掉它的边框和标题栏:在预览窗口中右键选择“编辑对话”,取消风格中的“WS_CAPTION”(去标题栏)和“DS_MODALFRAME”(去边框)即可。
注:去掉标题栏后无法关闭界面,可以将下面的“取消”按钮(不是控制右边界的那个取消,下面还有一个)挪上来,放置到合适位置,如本例中的右上角位置。
13、 到这一步应该就结束了,回头看看其实也没有什么难的,困难的就是背景图片的选择制作。在整个过程中只要细敬知心、小心,一般是没有问题的。当然为了方便起见可以完成一个或者一套修改后备份一次,测试一次,这样如果哪一步出错了,可以恢复到前一步的 *** 作中来,不用从头来了。
14、 网上还流传着这样的教程,重命名位图→963为1111(或者其他没有重复的数字),替换位图→1111为你想要的背景图片,修改删除位图→16050。然后在右侧预览窗口中删除下面的位图控件(原来的位图→16050),将上面的位图控件(位图→1111)的ID修改为1,这样在代码窗口中原来的963行出成为第一行,复制第一行,粘贴到第二行之前,这样前2行是一样的。修改第二行的963数字为1111,点击“编译脚本”,这样珊瑚虫版的界面也可以正常显示。
评论列表(0条)