找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2338|回复: 6

[研讨] 请大师看看我的进度条,看看可否用时间的方法来实现

[复制链接]

已领礼包: 146个

财富等级: 日进斗金

发表于 2014-8-8 21:10:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 lgx9612 于 2014-8-8 21:18 编辑

我自己做了一个进度条,附上我的代码,请教高手可不可用时间来控制。请指教!我现在是拖动鼠标来实现的,鼠标右键结束。
  1. (defun progress_lgx(current_pcs tatoal current1_pcs tatoal1 / lgx_screenmin_point lgx_screenmax_point width-x_lgx
  2.         height-y_lgx half-y_lgx grve_lgx min-x_lgx max-x_lgx y_zl_lgx x_zl_lgx)
  3. ;;;by:  刘国新
  4. (redraw)
  5. (setq lgx_screenmin_point(list (- (car (getvar "viewctr")) (/ (*(/ (getvar "viewsize") (cadr (getvar "screensize"))) (car (getvar "screensize"))) 2))
  6.          (- (cadr (getvar "viewctr")) (/ (getvar "viewsize") 2))))
  7. (setq lgx_screenmax_point(list (+ (car (getvar "viewctr")) (/ (*(/ (getvar "viewsize") (cadr (getvar "screensize"))) (car (getvar "screensize"))) 2))
  8.          (+ (cadr (getvar "viewctr")) (/ (getvar "viewsize") 2))))
  9. (setq width-x_lgx (- (car lgx_screenmax_point)(car lgx_screenmin_point)))
  10. (setq height-y_lgx (- (cadr lgx_screenmax_point)(cadr lgx_screenmin_point)))
  11. (setq half-y_lgx (+ (cadr lgx_screenmin_point)(* height-y_lgx 0.5)))
  12. (if (and (/= tatoal nil)(> tatoal 0))
  13. (progn
  14. (setq grve_lgx nil)
  15. (setq min-x_lgx (+ (car lgx_screenmin_point)(* width-x_lgx 0.25)))
  16. (setq max-x_lgx (- (car lgx_screenmax_point)(* width-x_lgx 0.25)))
  17. (if (and (/= tatoal1 nil)(> tatoal1 0))
  18. (progn
  19. (setq min-y_lgx (+ half-y_lgx (* height-y_lgx 0.005)))
  20. (setq max-y_lgx (+ half-y_lgx (* height-y_lgx 0.025)))
  21. )
  22. (progn
  23. (setq min-y_lgx (- half-y_lgx (* height-y_lgx 0.01)))
  24. (setq max-y_lgx (+ half-y_lgx (* height-y_lgx 0.01)))
  25. )
  26. )
  27. (setq grve_lgx (list (list min-x_lgx min-y_lgx)(list min-x_lgx max-y_lgx)
  28.          (list min-x_lgx min-y_lgx)(list max-x_lgx min-y_lgx)
  29.          (list min-x_lgx max-y_lgx)(list max-x_lgx max-y_lgx)
  30.          (list max-x_lgx max-y_lgx)(list max-x_lgx min-y_lgx)))
  31. (grvecs (cons 98 grve_lgx))
  32. (setq grve_lgx nil)
  33. (setq y_zl_lgx (/(* height-y_lgx 0.02) 11.0))
  34. (if (/= current_pcs 0)
  35. (setq x_zl_lgx (* width-x_lgx 0.5 (/ (float current_pcs) (float tatoal))))
  36. (setq x_zl_lgx 0)
  37. )
  38. (setq max-x_lgx (+ min-x_lgx x_zl_lgx))
  39. (repeat 10
  40. (setq min-y_lgx (+ min-y_lgx y_zl_lgx))
  41. (setq max-y_lgx min-y_lgx)
  42. (setq grve_lgx (list (list min-x_lgx min-y_lgx)(list min-x_lgx max-y_lgx)
  43.        (list min-x_lgx min-y_lgx)(list max-x_lgx min-y_lgx)
  44.        (list min-x_lgx max-y_lgx)(list max-x_lgx max-y_lgx)
  45.        (list max-x_lgx max-y_lgx)(list max-x_lgx min-y_lgx)))
  46. (grvecs (cons 1 grve_lgx))
  47. )
  48. )
  49. )
  50. (if (and (/= tatoal1 nil)(> tatoal1 0))
  51. (progn
  52. (setq grve_lgx nil)
  53. (setq min-x_lgx (+ (car lgx_screenmin_point)(* width-x_lgx 0.25)))
  54. (setq max-x_lgx (- (car lgx_screenmax_point)(* width-x_lgx 0.25)))
  55. (setq min-y_lgx (- half-y_lgx (* height-y_lgx 0.025)))
  56. (setq max-y_lgx (- half-y_lgx (* height-y_lgx 0.005)))
  57. (setq grve_lgx (list (list min-x_lgx min-y_lgx)(list min-x_lgx max-y_lgx)
  58.          (list min-x_lgx min-y_lgx)(list max-x_lgx min-y_lgx)
  59.          (list min-x_lgx max-y_lgx)(list max-x_lgx max-y_lgx)
  60.          (list max-x_lgx max-y_lgx)(list max-x_lgx min-y_lgx)))
  61. (grvecs (cons 98 grve_lgx))
  62. (setq grve_lgx nil)
  63. (setq y_zl_lgx (/(* height-y_lgx 0.02) 11.0))
  64. (if (/= current1_pcs 0)
  65. (setq x_zl_lgx (* width-x_lgx 0.5 (/ (float current1_pcs) (float tatoal1))))
  66. (setq x_zl_lgx 0)  
  67. )
  68. (setq max-x_lgx (+ min-x_lgx x_zl_lgx))
  69. (repeat 10
  70. (setq min-y_lgx (+ min-y_lgx y_zl_lgx))
  71. (setq max-y_lgx min-y_lgx)
  72. (setq grve_lgx (list (list min-x_lgx min-y_lgx)(list min-x_lgx max-y_lgx)
  73.        (list min-x_lgx min-y_lgx)(list max-x_lgx min-y_lgx)
  74.        (list min-x_lgx max-y_lgx)(list max-x_lgx max-y_lgx)
  75.        (list max-x_lgx max-y_lgx)(list max-x_lgx min-y_lgx)))
  76. (grvecs (cons 1 grve_lgx))
  77. )
  78. )
  79. )
  80. )

  81. (defun c:test()
  82. (setq current 1)
  83. (setq current1 1)
  84. (while (/= (car (apply 'GRREAD '(t 7 0))) 11)
  85. (progress_lgx current 1000 current1 100)
  86. (setq current (+ current 1))
  87. (setq current1 (+ current1 1))
  88. (if (= current 1000) (setq current 1))
  89. (if (= current1 100) (setq current1 1))
  90. )
  91. )

  92. ;;;如何可以用时间来控制显示进度条,例如我想用下面的方法但显示的过程不能显示出来
  93. ;;;(progn
  94. ;;;(setq current 1)
  95. ;;;(repeat 51
  96. ;;;(setq time_start (getvar "cdate"))
  97. ;;;(while (< (* 1000000 (- (setq time_end (getvar "cdate")) time_start)) 0.03))
  98. ;;;(progress_lgx current 100 current 150)
  99. ;;;(setq current (+ current 2))
  100. ;;;)
  101. ;;;)



lgx.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-9 06:41:36 来自手机 | 显示全部楼层
为什么写这么麻烦的,一般在状态栏用grtext
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-8-9 13:06:47 | 显示全部楼层
支持创新!   不过为什么通过 右键 或 时间来控制呢?

一般不都是通过 循环次数的百分比 来控制吗? 这样才能与程序步调一致啊!

点评

都可以,我只是想程序在计算运行过程中可以把进度的显示出来。现在的情况是在运算的过程显示不出来等运算完成后显示了最终的结果,所以我用移动鼠标能够将进度条可以显示出来,最终目的不是用鼠标来控制进度。所  详情 回复 发表于 2014-8-9 19:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

 楼主| 发表于 2014-8-9 19:41:05 | 显示全部楼层
wowan1314 发表于 2014-8-9 13:06
支持创新!   不过为什么通过 右键 或 时间来控制呢?

一般不都是通过 循环次数的百分比 来控制吗? 这 ...

    都可以,我只是想程序在计算运行过程中可以把进度的显示出来。现在的情况是在运算的过程显示不出来等运算完成后显示了最终的结果,所以我用移动鼠标能够将进度条可以显示出来,最终目的不是用鼠标来控制进度。所以来请求帮忙!

点评

延迟和误差是正常的,不管什么进度条和处理都不可能完全同步,就是一个提示参考而已  详情 回复 发表于 2014-8-9 20:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2014-8-9 20:01:11 来自手机 | 显示全部楼层
lgx9612 发表于 2014-8-9 19:41
都可以,我只是想程序在计算运行过程中可以把进度的显示出来。现在的情况是在运算的过程显示不出来等 ...

延迟和误差是正常的,不管什么进度条和处理都不可能完全同步,就是一个提示参考而已
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

 楼主| 发表于 2014-8-11 12:26:40 | 显示全部楼层
     冥思苦想,终于找到解决的方法了,完全可以用时间或循环的方法来实现,并且进度过程可以显于出来,只要在
progress_lgx函数前加(princ)即可,为显示屏争取一点时间将进度显示出了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-8-27 11:40:24 | 显示全部楼层
我不是高手,但我崇拜你。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-4 07:16 , Processed in 0.201038 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表