(中国软件网讯)可能有很多人都认为无标题栏窗体的移动是非常简单的,网上很多的朋友也给出了一些方法,大多说人给出的方法是在窗体的privite部分创建一个私有过程 procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST; 就像这样的过程,这个原理就是发送消息给系统,欺骗鼠标点击的地方(也就是窗体的客户区)是窗体的标题栏,然而经过我的测试如果窗体上有其他的控件,比如一个TButton,那么TButton的事件是不会被触发的,所以此思路不可以。还有的人给出了使用MouseMove等一系列事件来进行窗体的Top和Left进行运算的。 1。首先建一个窗体,将BorderStyle属性设置为bsSingle 2。放一个TImage,载入一张图片,如下图
3。用PS打开TImage中载入的图片,来获取颜色
3。然后双击Form1下的Color属性值,在弹出的颜色对话框中点击“规定自定义颜色”,然后在红、绿、蓝后面的方框里填写上PS的拾色器里面的R、G、B后面对应的数值,如下图:
4。点击“添加到自定义颜色”,再在“自定义颜色”的方框上点击自己定义好的颜色,这时自定义的颜色会出现了一个一个黑色的边框,然后确定。这样,窗体的简单美化就完成了。 5。选择TImage组件,选择Events选项卡,选择OnMouseDown事件,为其添加代码如下: procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0); end; 这里我解释一下: ReleaseCapture 释放鼠标的捕获状态 Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0); 发送鼠标左键获取到的状态为窗体的标题栏的系统消息,其达到欺骗操作系统所点击的地方是窗体的标题栏。 这样一个既可以拖动又可以响应其他组件的无标题栏窗体就完成了。 如果你还有耐心的话,也可以继续为窗体添加一些特效,比如窗体时圆角的、像MSN那样慢慢滚动上来的消息框一样让你的窗体滚动上来,这里我就不截图了,直接给出代码: procedure TForm1.FormCreate(Sender: TObject); var Hnd: THandle; begin Hnd := CreateRoundRectRGN(0, 0, Width, Height, 15, 15); SetWindowRGN(Handle, Hnd, True); AnimateWindow(Handle, 1000, AW_SLIDE + AW_VER_NEGATIVE); end; 【说明】1。先定义一个句柄变量Hnd;2。使用Win API函数CreateRoundRectRGN创建圆角矩形区域;3。使用API函数SetWindowRGN设置窗体为圆角的;4。AnimateWindow这个函数用来设置窗体的出场方式(这里的表述可能不太精确,还请见谅)这个函数有很多参数的,具体自己查吧。 最后我们再来编写程序的关闭时的渐隐效果,还是使用AnimateWindow函数来实现的,不过这个函数只是让窗体隐藏了,并没有真正的关闭,所以你还得使用一句关闭代码来关闭窗体,好了不费话了,直接给代码了:
AnimateWindow(Handle, 2000, AW_SLIDE + AW_BLEND + AW_HIDE);
Application.Terminate;
(责任编辑:admin) |