标题:动手做一个公用进度条类,并让它可以随时中止操作
只看楼主
倦猫1973
Rank: 2
等 级:论坛游民
威 望:1
帖 子:68
专家分:28
注 册:2022-11-17
结帖率:85.71%
 问题点数:0 回复次数:15 
动手做一个公用进度条类,并让它可以随时中止操作
先看效果,在一个长耗时的操作中按下 ESC 是可以中止操作的。




其实办法实现很简单的啦,进度条类随你喜欢怎么做都行,大概前端程序也就这样子了,基本通用。
甚至加不加 loProgress.IsCancel 也是无所谓的,If loProgress.Step() = .F. Exit 也是可以的。

程序代码:
Local loProgress As frm_progress1 Of CAT_forms.vcx
Local lcOutPath As String
lcOutPath = "D:\OutPut\"

*-- 创建一个单进度对象
loProgress = NewObject("frm_progress1", "CAT_forms.vcx")     
*-- 设置进度条 Titile, Min, Max
loProgress.Caption = "正在导出 PDF 文件,请稍候..."
loProgress.Inits(1, RecCount("pdftmp"))
Select pdftmp
Scan
    lnBill_Id = Bill_Id 

    *-- 在此方法中刷新进度条进度,且增加一个 DoEvents,由于 DoEvents 很耗时,可以根据 Max 的大小选择每几行触发一次 DoDevents
    loProgress.Step() 
    ThisForm.grfStore2.grfExportFilename = Addbs(m.lcOutPath) + Alltrim(Bill_RefNo) + "_" + Alltrim(Bill_Kh) + "_" + Alltrim(Bill_Ys)
    Select * from pdftmp Where Bill_Id = m.lnBill_Id Into Cursor Bill 
    Select * from pdftmp1 Where Bill_Id = m.lnBill_Id Into Cursor Bill1 Order By Sub_Order
    ThisForm.grfStore2.OnPrint("PrintToPdf")

    *-- 是否中断导出
    If loProgress.IsCancel 
        Exit
    EndIf
EndScan

If 6 = Sy_MsgBox("文件己成功导出,是否打开文件夹查看导出结果?", 4+32+256, ThisForm)
    ShellExecute(0, "Open", JustPath(m.lcOutPath), "", "", 1)
EndIf

搜索更多相关主题的帖子: 导出 进度条 操作 Select If 
2023-04-12 11:59
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
向楼主学习

坚守VFP最后的阵地
2023-04-12 12:34
chenjf
Rank: 1
来 自:四川成都
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-10-18
得分:0 
学习!
2023-04-12 12:58
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
楼主威武,谢谢!
2023-04-12 16:39
sostemp
Rank: 4
等 级:业余侠客
威 望:8
帖 子:162
专家分:221
注 册:2009-6-2
得分:0 
楼主的这界面很好看,很简洁,搭配合理,大气。
2023-04-12 17:09
倦猫1973
Rank: 2
等 级:论坛游民
威 望:1
帖 子:68
专家分:28
注 册:2022-11-17
得分:0 
双进度条我个人推荐如下,简洁明了。
超过双度条的,还是不要搞了吧,实际体验还不如把双进度条任一搞成跑马灯。



[此贴子已经被作者于2023-4-12 17:37编辑过]

2023-04-12 17:33
sam_jiang
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:542
专家分:781
注 册:2021-10-13
得分:0 
曾兄,这foxpro玩得是出神入化了。。。
2023-04-12 20:30
iswith
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:154
专家分:101
注 册:2013-5-14
得分:0 
是有这样的设计按“Esc”不过它不会马上响应,在长耗时它需要按下一段时间才响应,很早就有啦。。。。。
2023-04-13 09:14
倦猫1973
Rank: 2
等 级:论坛游民
威 望:1
帖 子:68
专家分:28
注 册:2022-11-17
得分:0 
以下是引用iswith在2023-4-13 09:14:23的发言:

是有这样的设计按“Esc”不过它不会马上响应,在长耗时它需要按下一段时间才响应,很早就有啦。。。。。



我是不是需要说,用鼠标点击【取消(ESC)】按钮也可以中止呢?你不会是以为,我在进度表单上放这么一个按钮,纯是为了好看?

[此贴子已经被作者于2023-4-13 13:31编辑过]

2023-04-13 13:05
倦猫1973
Rank: 2
等 级:论坛游民
威 望:1
帖 子:68
专家分:28
注 册:2022-11-17
得分:0 
不能被中止的任务,就这么搞。

*-- 创建一个单进度对象
loProgress = NewObject("frm_progress1", "CAT_forms.vcx")     
loProgress.Caption = "正在导出 PDF 文件,请稍候..."
loProgress.Inits(1, RecCount("pdftmp"))
loProgress.btnCancel.Enabled = .F.
2023-04-13 13:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511884-1-1.html




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

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