DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: ZMskyuza
今日帖子: 25
在线用户: 12
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2024/5/9 8:43:24
标题:
有VCL下的TOAST实现么。 浏览:946
加入我的收藏
楼主: 目前只看到Firemonkey有这个,有VCL下的没?
没有只能自己造个了。。。
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 bighawk (Hawk) ★☆☆☆☆ -
盒子活跃会员
2024/5/9 10:07:05
1楼: 显示消息的东西一大堆,而且自己做个窗口也不难。
----------------------------------------------
-
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2024/5/9 13:11:37
2楼: 楼上细看哟,类移动上的TOAST效果的还真不多见,当然自己弄也简单,也就是想找找现有轮子、
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2024/5/11 15:17:37
3楼: https://github.com/desenvolvimentojd3/DelphiToastMessage
----------------------------------------------
-把学习当信仰
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/11 17:19:30
4楼: 3 楼的这个有意思,很不错。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/11 18:18:28
5楼: 下载了 3 楼说的看了一下,它就是因为是最后创建,所以在顶层不会被遮住。

但万一程序复杂了,有一些东西是后期代码创建的,就有问题。解决办法是在 Toast 方法里面加上 BringToFront

这个挺好用的。我会用它。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/11 19:37:21
6楼: 我做了一些修改:
https://github.com/pcplayer/DelphiToastMessage
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/12 0:57:19
7楼: 又修改了一下,提交了一个新版本。

修改是增加了类方法。使用的时候不用去管创建和释放,直接调用类方法就显示提示界面。
----------------------------------------------
-
作者:
男 szlbz (秋风) ★☆☆☆☆ -
盒子活跃会员
2024/5/12 6:33:13
8楼: 在pcplayer基础上移植到lazarus,并可以跨平台使用。
lazarus版根据显示内容调整Toast的宽度和位置,防止显示内容不完整。
https://github.com/szlbz/LazarusToastMessage.git
此帖子包含附件:
GIF 图像
大小:154.3K
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/12 10:39:44
9楼: 8楼,我打开你的链接,发现你用的是我第一次提交的版本。

后来我又做了两次修改,提交了2次。我的修改主要是把对象声明在单元的公开位置,改为声明在类里面作为类变量。然后使用它只需要调用一个类方法,这样更安全,不用考虑全局变量万一被某个代码释放掉或者修改掉的情况。
----------------------------------------------
-
作者:
男 inbreak (入侵) ★☆☆☆☆ -
盒子活跃会员
2024/5/12 16:41:44
10楼: to 9楼

还是有大BUG的,在一个提示消失前,不能再点击显示。
不铂第3次开始,必定 AV
----------------------------------------------
我是菜鸟,己经搞了十多年了,但是我仍然很菜。
作者:
男 szlbz (秋风) ★☆☆☆☆ -
盒子活跃会员
2024/5/12 16:53:21
11楼: lazarus版本暂时没发现10楼的问题
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/12 21:12:24
12楼: 10楼,你说的问题确实存在。

消息消失前如果点击显示消息,比如点了第一个按钮是 Success,消息显示,然后没等消息隐藏,就点第二个按钮 Info,则显示的消息马上变成 Info,然后才缩回去。

导致问题的原因是,这个过程中,需要来回切换 Form 的 OnResize 以保证消息显示的位置居中,还要保证 Form 里面原来的 OnResize 事件代码能够被执行。如果中途打断,这个切换会出问题导致。

这个地方,我再考虑一下使用什么策略。比如:
策略一:不允许中途打断。也就是消息没有缩回去之前,不能再次调用。
策略二:允许中途打断,一旦打断就重新初始化;
策略三:使用多个消息实例,上一个消息没隐藏之前,那就弹出另外一个实例。表现为多个面板重叠显示。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/12 21:19:34
13楼: 才有策略一的代码改好了。增加两行判断就好了。反复测试,肯定没问题。

但采用这个策略,使用它的程序就要注意,不能连续调用,第二次调用是不会被执行的。

看起来,要想对应各种场景,还是需要允许多个弹窗连续弹出,也就是多实例。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/12 21:51:46
14楼: 还有一个策略:

不搞多实例多弹窗,搞消息队列。每次只弹一个窗。如果需要的消息太多,排队,上一个消息显示完成,下一个再弹。

究竟用哪个策略更好呢?

搞多实例代码比较麻烦。搞消息队列代码简单一些。实际应用场景下,并排的几个窗口需要同时弹消息的情况很少见。同一个窗口需要弹消息,几条消息同时显示出来,用户也来不及看。看起来搞消息队列是个折衷也能应付实际使用场景的一个办法。
----------------------------------------------
-
作者:
男 inbreak (入侵) ★☆☆☆☆ -
盒子活跃会员
2024/5/12 23:34:08
15楼: 策略一不好。
其它都行。
但策略三最好。最好是第一个没有隐藏的话,第二个消息在其下方出现。
也就是说,如果上一个没有完成它就在上一个的下方显示,
多少消息的话。一直往下排,
这样,既能都显示出来,又还不遮挡。
如果可以的话可以自定义消息的显示时间。
----------------------------------------------
我是菜鸟,己经搞了十多年了,但是我仍然很菜。
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/12 23:38:16
16楼: 如果很多实例,同时出现,往下排,只来3个还行,如果太多,屏幕都占完了,也不好处理。

而且这种连续要弹几个提示的时候也不多。所以我决定还是做消息队列,显示完一个再显示第二个。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/13 0:17:39
17楼: 消息队列已经搞好,并且已经 push 到 github 上面了。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/13 1:16:21
18楼: 把秋风的计算宽度的代码抄过来,增加了宽度计算。如果消息文字多,则变成多行显示。总宽度最多是 Form 宽度的一半。

已经提交 github。

问题:
1. Label 自动这行显示的行间距太小不好看,不知道怎么调整行间距。(自己写代码在文字中间加回车换行的办法不算)有好办法的请告诉我。

2. 文字多了,移动时, Label 会闪烁。我已经把所有的 TPanel 的 doubleBuffer 设置为 True 了,没有解决问题。TLabel 没有 DoubleBuffer 这个属性。

有知道办法的请告诉我。谢谢!
----------------------------------------------
-
作者:
男 laotiesh (铁铁) ★☆☆☆☆ -
普通会员
2024/5/13 21:23:36
19楼: 能不能再加个参数 能设置 消息出现的位置从顶部中间往下 从form中间弹出  从底部往上
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/13 23:06:46
20楼: 底部往上,就要重新计算。这个代码里面写的就是如何呈现那个 Panel,把它摆到哪个位置。里面涉及到摆位置的代码也不难,你自己就可以改。

---------
我对原来的代码的改动主要是:
1. 增加类方法,使得用它简单,不需要考虑创建对象后再来使用;
2. 因此可以在每个 Form 上都直接调用类方法,传入 Form 作为它的 Parent,它就呈现在该 Form 上面;
3. 原来的代码里面它为了位置居中,直接把计算位置居中的函数替代了 Form 的 OnResize 事件,这样一来,Form 如果原本有 OnResize 事件方法就不能被执行了。这里我增加了恢复 Form 原来的事件方法。
4. 增加了消息队列。这样消息显示还没结束时也可以调用它。
5. 根据秋风的代码,增加了宽度计算,避免宽度超过 Form 宽度。
----------------------------------------------
-
作者:
男 szlbz (秋风) ★☆☆☆☆ -
盒子活跃会员
2024/5/14 15:12:13
21楼: lazarus版本2024-05-14更新:
1、将System.NetEncoding改用Base64
2、增加从form底向上移动
----------------------------------------------
-
作者:
男 szlbz (秋风) ★☆☆☆☆ -
盒子活跃会员
2024/5/15 14:21:18
22楼:
此帖子包含附件:
GIF 图像
大小:1.52M
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2024/5/15 17:04:43
23楼: 能用在fmx环境吗?
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/15 19:37:23
24楼: 我做的那个是 VCL 版本。改为 FMX 可能只需要改几个引用.....你引用的是 VCL 的 TPanel 还是 FMX 的 TPanel..........
----------------------------------------------
-
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2024/5/17 10:13:44
25楼: 真的是抛砖引玉了,谢谢各位兄台了
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 inbreak (入侵) ★☆☆☆☆ -
盒子活跃会员
2024/5/22 11:42:02
26楼: to 25楼,,

你对 抛砖引玉 这个成语,是不是有些误解呀。

你抛的是问题,不是砖。
----------------------------------------------
我是菜鸟,己经搞了十多年了,但是我仍然很菜。
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS