乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 15|回复: 15

[编程交流] DCL对话框代码查询

[复制链接]

48

主题

657

帖子

33

银币

限制会员

铜币
-1
发表于 2022-7-5 16:11:27 | 显示全部楼层 |阅读模式
下午好
 
 
是否可以在DCL对话框代码中进行循环?
 
 
例如,假设我想在我的拨号框上有10个单选按钮,我可以在代码中做一个循环来编写它们,并给每个按钮一个唯一的名称(RB1、RB2等)。
 
 
沿着以下路线:
-重复10次
-单选按钮{key“RB”+x}
-x=x+1
-结束重复
 
 
 
 
只是寻找一个是或不是真的,但如果是的话,有人给我指出正确的方向会很好(沿着“看看这个例子,或者#“试试这些命令”)
 
 
 
 
提前感谢
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-5 16:18:46 | 显示全部楼层
当然这是可能的。在加载对话框之前,使用lisp代码编写DCL代码。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:20:11 | 显示全部楼层
如果使用DCL文件格式,则为否;如果将DCL代码写入临时文件,则为是。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:22:52 | 显示全部楼层
嗨,史蒂文,
 
在这里,您可以找到一个示例:http://www.cadtutor.net/forum/showthread.php?100403-Rlx Tokkie amp SmartList只是一些DCL午餐的乐趣
 
正如Tharwat所写,当您动态创建对话框时,将使用此选项
 
  1. (defun DynaToggle_write_header ()
  2. (write-line
  3.    (strcat
  4.      "DynaToggle:dialog{label="DynaToggle";spacer;spacer;:text_part {key="txt1";width=32;fixed_width=true;}"
  5.      ":text_part{key="txt2";width=32;fixed_width=true;}spacer;") fp))
  6. (defun DynaToggle_write_body1 ( %lst / i )
  7. (write-line ":boxed_column{" fp)
  8. (setq i 0)
  9. (mapcar '(lambda (x)
  10.         [b](write-line
  11.           (strcat
  12.         ":row{spacer;:toggle{key="tg" (itoa i) "";width=2;fixed_width=true;}"
  13.         ":text_part{key="tp" (itoa i) "";label="" x "";width=32;fixed_width=true;}}") fp)
  14.         (setq i (1+ i)))[/b]
  15.      %lst
  16. )
  17. (repeat (- 10 i)(write-line ":row{height=1.5;}" fp))
  18. (write-line "}spacer;" fp)
  19. )
  20. (defun DynaToggle_write_body2 ( %lst / i )
  21. (write-line ":boxed_row {:column{" fp)
  22. (setq i 0)
  23. (repeat 10
  24.    (write-line
  25.      (strcat
  26.    ":row { spacer; :toggle { key ="tg" (itoa i) "";width=2;fixed_width=true;}"
  27.    ":text_part{key="tp" (itoa i) "";label="" (nth i %lst) "";width=32;fixed_width=true;}}") fp)
  28.    (setq i (1+ i))
  29. )
  30. (write-line
  31.    (strcat "}:column{:slider{key="sldr";layout=vertical;min_value=0;max_value=" (itoa nof-tog)
  32.        ";small_increment=1;big_increment=10;value=" (itoa nof-tog) ";}}}spacer;") fp)
  33. )
  34. (defun DynaToggle_write_footer1 ()
  35. (write-line
  36.    (strcat
  37.      "spacer;"
  38.      ": row {: button{label="Select All";key="all";}:button{label="Select None";key="none";}}"
  39.      "spacer;ok_cancel;}") fp))
  40. (defun DynaToggle_write_footer2 ()
  41. (write-line
  42.    (strcat
  43.      "spacer;"
  44.      ":row{:button{label="|<";key="home";}:button{label="<";key="back";}"
  45.      ":button{label=">";key="next";}:button{label=">|";key="end";}}"
  46.      ":row{:button{label="Select All";key="all";}:button{label="Select None";key="none";}}"
  47.      "spacer;ok_cancel;}") fp))
gr.Rlx
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:29:04 | 显示全部楼层
我有另一个Alan Thompson的例子,你可以写一个列表,有多个标题,输入框大小等等,只要写一个列表,调用一个defun,使dcl,就会试图找到。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:33:41 | 显示全部楼层
从列表生成DCL图块并不难(创建这样的子功能),
但是,如果您必须编写一个不断操纵对话框的自定义程序,则必须处理整个代码,而不要依赖生成这些代码的子函数。。实例
 
在学习和练习DCL之后,请记住这样的线程,我已经编写了几个生成切换/单选按钮/按钮/图像按钮的子函数-但是当您使用包含20多个项目的列表调用子函数时,对话框变得又丑又大。
 
因此,如果可能的话,解决方案是坚持使用list_box,或者练习rlx在他的tokkie(智能列表午餐乐趣)中使用的技术。
我花了几天时间剖析他的代码,并做了一些修改,但留下了未完成的工作:
该死,我的爱好越来越可怕了!
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:36:00 | 显示全部楼层
你越来越擅长这个Grrr!
 
 
p、 很抱歉,这么长时间才解码,我的错误,应该写得更好。下次会做得更好。
 
 
这里有一个我忘记放在我的smartlist例程中,但在我的RlxBlk(主对话框中的设置按钮)中使用了它
 
 
  1. ; lst list of strings , def default (int) to set
  2. (defun RlxBLK_ChooseFromColumn (lst def / fn fp dcl-id inp drv)
  3. (if (and (setq fn (vl-filename-mktemp ".dcl")) (setq fp (open  fn "w")))
  4.    (progn
  5.      (write-line "cfrc : dialog { label = "Choose From Column"; : boxed_radio_column {" fp)
  6.      (mapcar '(lambda (x) (write-line (strcat " : radio_button { key = "" x ""; label = "" x "";}") fp)) lst)
  7.      (write-line "} spacer;ok_cancel;}" fp)(close fp)(gc)
  8.      (if (and (setq dcl-id (load_dialog fn)) (new_dialog "cfrc" dcl-id))
  9. (progn
  10.   (mapcar '(lambda (x)(action_tile x "(setq inp $key)")) lst)
  11.   (if (not (null (nth def lst)))(set_tile (nth def lst) "1"))
  12.   (action_tile "accept" "(done_dialog 1)")
  13.   (setq drv (start_dialog))(unload_dialog dcl-id)))))
  14. (cond ((not (null inp)) inp) ((not (null (nth def lst))) (nth def lst)) (t nil))
  15. )
  16. ; * * testing * *
  17. (defun c:cfc () (RlxBLK_ChooseFromColumn '("1 2" "a b" "3 4" "c d" "5 6" "e f" "7 8" "g h" "9 10" "i j") 5 ))

该例程使用单选按钮而不是tokkies(切换),并且(显然)仅在按钮数量有限的情况下工作
 
 
gr.Rlx
回复

使用道具 举报

48

主题

657

帖子

33

银币

限制会员

铜币
-1
发表于 2022-7-5 16:38:36 | 显示全部楼层
谢谢你。
 
 
我不得不道歉,我今天还没有机会看看这一切是如何运作的,但希望明天
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:43:06 | 显示全部楼层
嘿,Rlx,卸载或加载对话框失败后,您需要删除临时文件,否则您的临时文件夹将充满*。dcl文件。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:46:03 | 显示全部楼层
 
哎呀,你说得很对。刚刚从我的一个应用程序中复制了代码,但现在你提到了它,我想知道我是否在那个应用程序中删除了它。但是autocad不会自动删除临时文件吗?
 
https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-F417A5EF-95BB-47EE-B60E-7C017635580D-htm.html
 
 
尽管如此,我还是会在事后努力清理,所以谢谢你的叫醒电话https://www.cadtutor.net/forum/images/editor/smilie.png[/img]
 
gr.Rlx
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 21:04 , Processed in 5.095564 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表