| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2045 人关注过本帖
标题:求教:无边框表单如何做出四周带阴影的效果
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 10楼 linkhai
看了一下,有个问题:当Shape的Curvature值大点时窗体的4个角明显。
图片附件: 游客没有浏览图片的权限,请 登录注册


变了一下不用GDI,改用几个相关的 WinAPI。
图片附件: 游客没有浏览图片的权限,请 登录注册


示例
程序代码:
of = CREATEOBJECT("Form1")
of.show
READ EVENTS

DEFINE CLASS Form1 as Form
    Desktop = .T.
    ShowWindow = 2
    WindowType = 1
    AutoCenter = .T.
    BorderStyle = 1
    TitleBar = 0    
    BorderStyle = 0
    
    ADD OBJECT Shape1 as Shape WITH top=0,left=0,Width=this.Width,Height=this.Height,Curvature=50,BackColor=RGB(250,240,240)
    ADD OBJECT Command1 as CommandButton WITH Top=50,Left=100,Height=25,Caption="Color"
    ADD OBJECT Command2 as CommandButton WITH Top=100,Left=100,Height=25,Caption="Exit"
    
    PROCEDURE UnLoad
        CLEAR EVENTS
    ENDPROC

    PROCEDURE Load
        DECLARE LONG SetWindowLong IN user32 LONG, LONG, LONG
        DECLARE LONG GetWindowLong IN user32 LONG, LONG
        SetWindowLong(this.hWnd, -20, BITOR(GetWindowLong(this.hWnd, -20), 0x80000))
    ENDPROC
    
    PROCEDURE Activate  
        IF EMPTY(this.Tag)
            this.Tag = "1"
            DECLARE LONG SetLayeredWindowAttributes IN User32 LONG, LONG, LONG, LONG
            SetLayeredWindowAttributes(this.HWnd, this.BackColor, 0, 1)
        ENDIF
    ENDPROC
    
    PROCEDURE Command1.Click
        thisform.Shape1.BorderColor = GETCOLOR(thisform.Shape1.BorderColor)
    ENDPROC

    PROCEDURE Command2.Click
        thisform.Release
    ENDPROC
ENDDEFINE


[ 本帖最后由 吹水佬 于 2015-10-7 16:48 编辑 ]
2015-10-07 16:46
antony521
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:170
专家分:175
注 册:2009-8-20
收藏
得分:0 
回复 11楼 吹水佬
只见边框,没见阴影.
2015-10-07 17:22
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
不象阴影
2015-10-07 17:34
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
能用一个Shape,就可以再用一个,所谓的阴影就不难吧?
2015-10-07 18:34
linkhai
Rank: 1
等 级:新手上路
帖 子:23
专家分:5
注 册:2013-2-7
收藏
得分:0 
回复 11楼 吹水佬
改成API后真的只有边框没有阴影了~~

在调整Shape的Curvature值时,同时要调整BackImg(就是用GDI填充的圆角矩形)的pnCurvature值。
2015-10-08 10:20
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用linkhai在2015-10-8 10:20:45的发言:

改成API后真的只有边框没有阴影了~~

在调整Shape的Curvature值时,同时要调整BackImg(就是用GDI填充的圆角矩形)的pnCurvature值。

“改成API后真的只有边框没有阴影了~~”,示例调用的API只是处理窗口的4个角问题,没考虑阴影的问题。
阴影问题也不难,放多几个Shape上去,设置一下各自的边框色和位置,就可得到不同类型的阴影效果,实现的代码也简单。

填充的圆角矩形不太现实,那4个角是窗口的4个角,填什么上去都是存在的。
2015-10-09 09:28
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
要做得漂亮还是用图片
2015-10-09 09:32
zhstudio
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-11-1
收藏
得分:0 
阴影部分需要透明才好,不透明没意思
2021-12-20 14:12
zhstudio
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-11-1
收藏
得分:0 
貌似 showwindow=2时,windowtype=1无效吧
2021-12-20 14:17
快速回复:求教:无边框表单如何做出四周带阴影的效果
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017255 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved