| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2882 人关注过本帖, 1 人收藏
标题:表单启动时,慢慢从中间往四周变大散开[分享CSDN看到]
只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
结帖率:98.98%
收藏(1)
已结贴  问题点数:20 回复次数:10 
表单启动时,慢慢从中间往四周变大散开[分享CSDN看到]

* 建立1个表单,表单的 ShowWindow = 2,WindowState = 2
* 在表单建立1个定时器 Timer1,Interval=10,Enabled=.f.


* 表单 init 中
DECLARE Long CreateRectRgn IN WIN32API Long, Long, Long, Long
DECLARE Long GetWindowRgn IN WIN32API Long, Long @
DECLARE Long SetWindowRgn IN WIN32API Long, Long, Long

This.AddProperty( 'cw', 0 )
This.AddProperty( 'hRgn', 0 )

m.hRgn = 0
GetWindowRgn( This.hWnd, @ m.hRgn )
This.hRgn = m.hRgn

m.hRgn = CreateRectRgn( 0, 0, 1, 1 )
SetWindowRgn( This.hWnd, m.hRgn, 1 )

* 表单 show 中
This.Timer1.Enabled = .T.

* 定时器 Timer1.Timer 中

WITH Thisform
   IF ( .cw < SYSMETRIC(1)/2 ) OR ( .cw < SYSMETRIC(2)/2 )
     .cw = .cw + 10
     m.hRgn = CreateRectRgn( SYSMETRIC(1)/2-.cw, SYSMETRIC(2)/2-.cw,SYSMETRIC(1)/2+.cw, SYSMETRIC(2)/2+.cw )
     SetWindowRgn( .hWnd, m.hRgn, 1 )
   ELSE
     This.Interval = 0
     This.Enabled = .F.
     SetWindowRgn( .hWnd, .hRgn, 1 )
   ENDIF
ENDWITH
搜索更多相关主题的帖子: 表单 分享 Long This hWnd 
2017-07-18 15:24
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:5 
由CreateRectRgn()返回的区域句柄(hRgn),不用时要用DeleteObject(hRgn)删除。
2017-07-18 17:04
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:5 
这是不是有点麻烦了,直接写在处事的事件里即可以了。
2017-07-19 09:23
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用hyswcyh在2017-7-19 09:23:48的发言:

这是不是有点麻烦了,直接写在处事的事件里即可以了。

你可以写1个看看,效果。
我是看到了,转发给大家看。
2017-07-19 10:16
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2232
专家分:3913
注 册:2007-4-27
收藏
得分:5 
土法上马

建二个表单,第一个表单上二个计时器,一个获取表单最大化下的宽与高,存入变量中,另一个计时器用于退出表单。然后

启动第二个表单(主窗口)实现慢慢变大的效果,代码写在表单的RESIZE中,即可实现

只求每天有一丁点儿的进步就可以了
2017-07-20 09:48
星光悠蓝
Rank: 9Rank: 9Rank: 9
来 自:山水甲天下
等 级:贵宾
威 望:52
帖 子:527
专家分:1281
注 册:2010-1-11
收藏
得分:5 
我更喜欢一点击就直接弹开!
2017-07-20 10:03
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2232
专家分:3913
注 册:2007-4-27
收藏
得分:0 
为了工作一点就打开,是最好的。

这贴,只是个技术讨论

只求每天有一丁点儿的进步就可以了
2017-07-20 10:13
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用wengjl在2017-7-20 09:48:29的发言:

土法上马

建二个表单,第一个表单上二个计时器,一个获取表单最大化下的宽与高,存入变量中,另一个计时器用于退出表单。然后

启动第二个表单(主窗口)实现慢慢变大的效果,代码写在表单的RESIZE中,即可实现

我开始,也大概是这样,慢慢变大,结果,屏幕很难看的,有马赛克
2017-07-20 10:45
星光悠蓝
Rank: 9Rank: 9Rank: 9
来 自:山水甲天下
等 级:贵宾
威 望:52
帖 子:527
专家分:1281
注 册:2010-1-11
收藏
得分:0 
DOS时代流行的画风。
2017-07-20 10:52
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
建立表单,表单的 ShowWindow = 2,
在表单的activate中写如下代码:
Thisform.timer1.Interval = 10
Thisform.timer1.Enabled = .t.

在表单上添加timer1控件,在此控件的timer事件中写如下代码:
程序代码:
IF ( thisform.width < SYSMETRIC(1) ) .or. ( thisform.height < SYSMETRIC(2) )
   thisform.width =  iif(thisform.width > SYSMETRIC(1) , SYSMETRIC(1) ,thisform.width + 10)
   thisform.height =  iif(thisform.height > SYSMETRIC(2) , SYSMETRIC(2) , thisform.height + 10)
ELSE
   Thisform.timer1.Interval = 0
   Thisform.timer1.Enabled = .F.
   thisform.WindowState = 2
ENDIF
thisform.autocenter=.t.
thisform.refresh

这样,虽然看起来效果不如API函数的动画效果,但节约因API函数定义而占的内存,同时也简单易懂。
请版主见谅。
2017-07-22 17:53
快速回复:表单启动时,慢慢从中间往四周变大散开[分享CSDN看到]
数据加载中...
 
   



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

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