Foxtable(狐表)用户栏目专家坐堂 → [杰哥的分享]狐表实现“加载中”效果的遮罩层/等待窗口方案。2行代码简单控制,支持圆角、无锯齿、透明窗体、自定义Logo、无内存泄露,样式简约,代码一抄即用 ,长时间执行的代码强烈推荐配合使用


  共有35474人关注过本帖树形打印复制链接

主题:[杰哥的分享]狐表实现“加载中”效果的遮罩层/等待窗口方案。2行代码简单控制,支持圆角、无锯齿、透明窗体、自定义Logo、无内存泄露,样式简约,代码一抄即用 ,长时间执行的代码强烈推荐配合使用

帅哥哟,离线,有人找我吗?
chen37280600
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7959 威望:0 精华:4 注册:2017/12/31 14:53:00
[杰哥的分享]狐表实现“加载中”效果的遮罩层/等待窗口方案。2行代码简单控制,支持圆角、无锯齿、透明窗体、自定义Logo、无内存泄露,样式简约,代码一抄即用 ,长时间执行的代码强烈推荐配合使用  发帖心情 Post By:2022/11/29 17:11:00 [显示全部帖子]

(快速浏览杰哥分享过的所有经验汇总,点击跳转


1简介
1.1效果图
长时间执行的代码,加个等待窗口,让用户等待,增加友好度,一般这在web领域叫遮罩层。不过狐表Exe的UI框架里并没有集成这个,只能自己变通实现试下。

此主题相关图片如下:1.png
按此在新窗口浏览图片

这个Loading不是挺优雅的吗?(我提供这个简约通用的样式,就是希望你们拿走就用。论坛里分享的总是奇形怪状的加载动画,我怎么拿去见客户啊...

此主题相关图片如下:loading.gif
按此在新窗口浏览图片

我还提供PSD素材,让你能自己增加个logo呢

此主题相关图片如下:1-221129163z6164.gif
按此在新窗口浏览图片


1.2遮罩层特色
  1. 代码简单,控制开关也简单。
  2. 支持圆角和透明窗体效果。
  3. 可以自定义加载中的gif动画,添加你的自己的logo,(需要你有PS功底)。
  4. 提供通用简约的GIF图,能用于任何项目场合,不搞怪异化。
  5. 弹出位置在屏幕中间+向上偏移150像素,这就不会挡住业务代码出错时的MessageBox窗口
  6. 无内存泄露【重要】。试过连续打开关闭500次,内存在10M内波动,不会无限增加,程序不崩。


此主题相关图片如下:3.png
按此在新窗口浏览图片


1.3感谢前人分享

我综合比较了一下,最终选了第三个帖子去二次改造,感觉这个代码最少,好理解维护。不过它的方法存在一个严重缺陷
内存泄露严重,开循环200次打开直接程序崩了

此主题相关图片如下:4.png
按此在新窗口浏览图片

此主题相关图片如下:5.png
按此在新窗口浏览图片

其他是小问题:
  • 没有圆角
  • 没有半透明
  • 标题好丑
  • 代码有点乱
  • 等待窗口结束后,焦点会跳到其他程序(很烦人)

2教程
2.1放好图片素材
图片素材放到Images文件夹里,与待会全局代码的路径相匹配

此主题相关图片如下:1.png
按此在新窗口浏览图片

2.2添加全局代码

此主题相关图片如下:6.png
按此在新窗口浏览图片

代码如下:

以下内容只有回复后才可以浏览

2.3使用方法

此主题相关图片如下:7.png
按此在新窗口浏览图片

Try
    WaitShow() '显示等待窗口

    '模拟长耗时代码
    For i As Integer = 0 To 3000
        e.Form.Controls("TextBox1").Text = i
    Next    
Catch ex As Exception
    MessageBox.show(ex.Message)
Finally 
    WaitClose() '关闭等待窗口
End Try


2.4注意事项
  • 推荐配合Try使用,Finally里放WaitClose(),防止因为业务代码异常而导致遮罩层不关闭。
  • 当然如果你有把握,中间过程代码不会出错的,不用Try,直接使用也没问题。如果真的出现异常,你可以告诉客户在底部菜单栏右键强制关闭。它的关闭,并不会影响原来主线程在做的事情。

3自定义加载GIF动画
这个需要你有PS基础,我已经提供了我这次使用的gif图的原PSD文件。需要在PS里打开,并且启动PS的`时间轴`功能。你要去百度学习一下PS的时间轴玩法和GIF保存方法
3.1添加自定义logo和背景
例如我加一个迈宝伦科技官网的logo去中间

此主题相关图片如下:8.png
按此在新窗口浏览图片


此主题相关图片如下:1.png
按此在新窗口浏览图片


成品效果:

此主题相关图片如下:1-221129163z6164.gif
按此在新窗口浏览图片

3.2透明背景和圆角
gif是支持透明背景的,圆角也支持,在PS做好即可。唯一要注意就是生成GIF图时,圆角要设置相应的`杂边`颜色,不然会有难看的`白色锯齿`


此主题相关图片如下:2.png
按此在新窗口浏览图片

以下是正确保存方法

此主题相关图片如下:3.png
按此在新窗口浏览图片


此主题相关图片如下:4.png
按此在新窗口浏览图片


3.3注意不要用某个绿色
在刚才的全局代码里有一个

...
waitForm.BackColor = Color.Green '绿色背景框
waitForm.TransparencyKey = Color.Green '针对绿色进行透明化,配合上面的绿色使用。因此也要求GIF图片不能有纯绿色RGB(0,128,0)
...

这个是狐表窗口实现边框透明的关键,设置绿色边框,并对绿色进行透明化。所以你如果GIF里刚好包含了RGB(0,128,0)的绿色,也会被抠图走,穿孔很丑了。
如果你的Gif图一定要用这种绿色,我推荐你可以换别的颜色组合,例如Color.Red。就跟好莱坞拍戏用绿幕,演员就别穿颜色相近的绿衣服一个道理。

4.案例源码下载


以下内容只有回复后才可以浏览
版本说明:程序需要20220818或以上的加密狗打开。如果你没有这个版本也没关系,可以下载源码,只要里面的GIF素材PS素材,配合上面分享的代码,复制就能用,不一定非得开源码看。

=====================================================================
杰哥免费分享的Exe系统


杰哥免费分享的web系统






===============================================================
顺便总结以前分享过的帖子,方便大家学习

联系QQ:2385350359


经验分享:
























[此贴子已经被作者于2024/6/5 18:12:41编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7959 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2022/11/30 10:08:00 [显示全部帖子]

以下是引用浙江仔在2022/11/30 9:47:00的发言:
不考虑异形窗体,用模式窗口实现,会有内存泄露问题么?

不知道你说的模式窗口是怎么样?
主线程里直接弹出个狐表自带的模式窗口?会堵塞住东西,真遇到长耗时运算,而且里面的GIF好像也会出现卡顿住,这个我没试过,但是我好像哪里帖子见过,就是堵塞着,那些UI都不渲染,卡顿卡顿的。你看之前关于这个等待窗口的,都在说多线程、多线程,肯定是主线程直接弹模式窗口堵塞住代码执行

内存泄露很容易测试的,你就开个500次循环,频繁打开和关闭窗口。看下内存是否无休止上升,不回收,最后狐表是否崩掉
[此贴子已经被作者于2022/11/30 10:13:04编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7959 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2022/12/26 9:52:00 [显示全部帖子]

以下是引用monkey0923在2022/12/22 9:12:00的发言:
 能不能把灰色边缘去掉上传一个,师兄。。。

不建议纯白色做边缘,因为你会发现很多ui控件,都是白色的,包括弹窗提醒都是白色的,你这样很容易把加载元素与背景混合,不好看

 回到顶部