社区
Delphi
帖子详情
button 的执行问题
Wozhiyonglangqi
2008-10-23 02:06:55
当我在极快的时候点击2下 btutton的执行情况 如下
button_onclick(){
do1,
do2,
do3,
do4,
}
当点击第一下的时候 代码开始执行到do2,这时事件还没处理完 。
后第2次的点击事件也开始了 这怎么避免
...全文
158
21
打赏
收藏
button 的执行问题
当我在极快的时候点击2下 btutton的执行情况 如下 button_onclick(){ do1, do2, do3, do4, } 当点击第一下的时候 代码开始执行到do2,这时事件还没处理完 。 后第2次的点击事件也开始了 这怎么避免
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luntanwujianhua
2008-10-24
打赏
举报
回复
幫頂
progigy
2008-10-23
打赏
举报
回复
procedure TForm1.Button1Click(Sender: TObject);
begin
Self.OnClick := nil;
do1;
do2;
do3;
do4;
Self.OnClick := Button1Click;
end;
天鸽
2008-10-23
打赏
举报
回复
写线程,让电脑自己慢慢执行,反正不会出现卡在那里的现象!!
zhaoxiaohao
2008-10-23
打赏
举报
回复
可以再把光標的形狀修改一下,讓用戶相信已點完,執行后再恢復光標形狀
screen.cursor:=crhourglass;
screen.cursor:=crdefault;
gzmhero
2008-10-23
打赏
举报
回复
头尾各加一句不就好用了么?
其他办法也一样,无论怎样,都要改代码,至少要加这么类似的2句话。
Wozhiyonglangqi
2008-10-23
打赏
举报
回复
[Quote=引用 15 楼 gzmhero 的回复:]
引用 14 楼 Wozhiyonglangqi 的回复:
确实有重入的问题 如何是好
enabled:=false;
....
enabled:=true;
这样不行么?
[/Quote]改死人了 =。=
哎 苦命的娃
gzmhero
2008-10-23
打赏
举报
回复
[Quote=引用 14 楼 Wozhiyonglangqi 的回复:]
确实有重入的问题 如何是好
[/Quote]
enabled:=false;
....
enabled:=true;
这样不行么?
Wozhiyonglangqi
2008-10-23
打赏
举报
回复
确实有重入的问题 如何是好
gzmhero
2008-10-23
打赏
举报
回复
[Quote=引用 11 楼 lake_cx 的回复:]
引用楼主 Wozhiyonglangqi 的帖子:
当我在极快的时候点击2下 btutton的执行情况 如下
button_onclick(){
do1,
do2,
do3,
do4,
}
当点击第一下的时候 代码开始执行到do2,这时事件还没处理完 。
后第2次的点击事件也开始了 这怎么避免
只要button_onclick()中没有处理消息循环的代码,它会一直等到do4完成的时候才会再次响应的,所以一般你不用担心重入的问题。但是给用户的感觉不友好,如果处理的时…
[/Quote]
谁说会等到do4完成才会再次响应?
如果do1,do2,do3,do4里面的操作有能够响应系统消息的代码,那就会重入。
并且,按照楼主的代码,do1,do2,do3,do4似乎执行时间比较长,否则也不会考虑重入问题,那么执行时间长的代码,一定要加入响应系统事件的代码,
否则界面停顿,程序很不友好。所以,这里一定会重入的问题。
scutLiu
2008-10-23
打赏
举报
回复
button.enabled := false;
try
do1;
do2;
do3;
do4;
except
button.enabled := true;
end;
button.enabled := true;
lake_cx
2008-10-23
打赏
举报
回复
[Quote=引用楼主 Wozhiyonglangqi 的帖子:]
当我在极快的时候点击2下 btutton的执行情况 如下
button_onclick(){
do1,
do2,
do3,
do4,
}
当点击第一下的时候 代码开始执行到do2,这时事件还没处理完 。
后第2次的点击事件也开始了 这怎么避免
[/Quote]
只要button_onclick()中没有处理消息循环的代码,它会一直等到do4完成的时候才会再次响应的,所以一般你不用担心重入的问题。但是给用户的感觉不友好,如果处理的时间较长就会出现用户点了按钮之后看起来没什么反应,然后他以为没点中,再次点,结果就执行了两遍。所以建议在前面把Enabled置False,在后面把Enabled置True。当然你可以继承TButton,重写Click方法,在其中加上那两句,然后你都使用你重写过的Button
fangsp
2008-10-23
打赏
举报
回复
这是最好的办法 也是最有效的办法
在做B/S的时候 为了防止重复提交
也是这么实现的
utton.enabled := false;
try
do1;
do2;
do3;
do4;
finally
button.enabled := true;
end;
Corn1
2008-10-23
打赏
举报
回复
因为你这个button始终是enable的啊,所以任何时候都能去点。
所以,在点了以后,应该让它先disable掉,然后等执行结束了再enable
Wozhiyonglangqi
2008-10-23
打赏
举报
回复
[Quote=引用 5 楼 Corn1 的回复:]
不管用哪种方法,都是要改代码的
[/Quote]是的 代码是要改的 ^_^
大侠有没相关这方面的经验 为什么一个事件还没完成他还能在触发下次的事件呢
zhouyu5241
2008-10-23
打赏
举报
回复
帮顶!
zhouyu5241
2008-10-23
打赏
举报
回复
帮顶!
Corn1
2008-10-23
打赏
举报
回复
不管用哪种方法,都是要改代码的
Wozhiyonglangqi
2008-10-23
打赏
举报
回复
[Quote=引用 2 楼 Corn1 的回复:]
button.enabled := false;
try
do1;
do2;
do3;
do4;
finally
button.enabled := true;
end;
[/Quote]同上
Wozhiyonglangqi
2008-10-23
打赏
举报
回复
[Quote=引用 1 楼 gzmhero 的回复:]
button_onclick(){
button.enabled:=false;
do1,
do2,
do3,
do4,
button.enabled:=true;
}
[/Quote]这虽然可行 但是修改量太大了 。大家是否在开发中有遇到同样的问题
Corn1
2008-10-23
打赏
举报
回复
button.enabled := false;
try
do1;
do2;
do3;
do4;
finally
button.enabled := true;
end;
加载更多回复(1)
全球各国汇率、短长期、政策利率数据(1914-2024.3)
根据国际货币基金组织(IMF)等平台的数据,整理了全球各国的兑美元汇率,短期利率、长期利率、政策利率数据,时间范围最新至2024年3月,希望对大家有所帮助 一、数据介绍 数据名称:全球各国汇率、短长期、政策利率数据 数据范围:全球国家 样本数量:76403条 数据年份:1914-2024.3 数据说明:包含兑美元汇率、短期利率、长期利率、政策利率 更新时间:2024年3月 二、指标范围 单位 国家 年份 兑美元汇率-月度均值 兑美元汇率-年度均值 短期利率 长期利率 政策利率
YOLO算法实验室电子仪器电源状态目标检测数据集-60张-标注类别为关机状态-开机状态.zip
YOLOv11目标检测实战项目
样本--2026-2032中国舆情监控系统市场现状研究分析与发展前景预测报告--Wangliu.pdf
样本--2026-2032中国舆情监控系统市场现状研究分析与发展前景预测报告--Wangliu.pdf
pip-matplotlib-3.6.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.zip
pip-matplotlib-3.6.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.zip
【显示驱动技术】SSD2828QN4 MIPI主桥接芯片数据手册:支持高速串行接口与传统RGB并行接口转换,适用于移动显示设备中的图像数据传输应用
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。
Delphi
5,943
社区成员
262,942
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章