明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2279|回复: 10

[讨论] 操作对话框

[复制链接]
发表于 2017-7-27 12:31 | 显示全部楼层 |阅读模式
有网友问我对话框怎么写,其实我也不太懂。我也是后来掌握的慢慢理解加深的。对话框其实就下面4句
(setq dclid (load_dialog fname))①
(new_dialog "SameEnt" dclid)②
(setq return# (start_dialog))③
(unload_dialog dclid)④
我一直认为最后一句④是必要的,highflybird大师说可有可无,想想也是,现在内存很大,卸不卸载有什么关系。
第一句①当然是必要的,不论是lisp、对话框DCL、或者其它什么程序,总是要选调入内存才能运行的。所以对话框只需要掌握②③这两句。

看下面的程序
1 用户增加的语句基本上在②③之间
2 紧跟②之后,是一个函数(setdata)。给对话框上的控件赋值。
3 (setdata)之后是对话框上控件的操作。一般有action_tile,set_tile,mode_tile
要说明一下的是:A 后面有done_dialog的,会使对话框消失。那么对话框上的数据会消失,所以要写一个函数(getdata)以获取对话框上的数据,如㈡.
B (done_dialog 1)后面这个1,会传递给③句的return#,这相当的奇怪。
C 如果要在屏上交互点取东西,那么对话框必须消失,所以必需要done_dialog,如㈢。这句赋给return#=2,所以对话框能循环出现。
D ③之后是判断,根据return#的值做不同的事。因为"Pick1"和"Pick2"对话框都会消失。
C 对话框中的控件如果是" ok_only;",那么㈡可以不要。默认值return#=1

(setq dclid (load_dialog fname))
(setq return# 3)
(while (> return# 1)
  (new_dialog "SameEnt" dclid);②
  (setdata);㈠
  (action_tile "accept" "(getdata)(done_dialog 1)");㈡
  (action_tile "Pick1" "(getdata)(done_dialog 2)");㈢
  (action_tile "Pick2" "(done_dialog 3)")
  (action_tile "ra1" "(getdata)(doRadio)")
  (action_tile "ra2" "(getdata)(doRadio)")
  (ACTION_TILE "l3" "(setq val $value)(dol3)")
  (setq return# (start_dialog));③
  (cond
    ((= return# 1))
    ((= return# 2) (doPick1))
    ((= return# 3) (doPick2))
  )
)
(unload_dialog dclid)

简而言之,以上框架中,只需要在②③之间,写好那几个函数(setdata)(getdata)(doPick1)...就可以了。
 楼主| 发表于 2017-7-27 12:34 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2017-7-27 17:38 编辑

同时提供给大家一个工具

本帖子中包含更多资源

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

x
发表于 2017-7-27 13:49 | 显示全部楼层
祝贺明经重开,挺黄大师的贴
发表于 2017-7-27 14:59 | 显示全部楼层
顶顶顶
发表于 2017-7-27 15:46 | 显示全部楼层
本帖最后由 yxp 于 2017-7-27 16:06 编辑

关于lisp调用对话框,本人自从学习lisp以来发现有以下三种方式:
1.  LISP 自带的 DCL,优点:代码少,维护方便,可以用 lisp 生成动态窗口,缺点:控件太少,无法实现复杂操作,比如 表格,标签、菜单等等。
2.  其他对话框插件, 比如 OpenDCL,优点:控件多,可迅速上手。缺点:每个CAD版本对应一个 ARX,太累赘,发布一个几十KB的 lisp 代码,得带上几十MB的对话框资源文件。随着CAD版本的增加,情况只会越来越恶化,貌似作者都停止开发了。
3. 用 VS 开发 acitveX 控件,以前明经就有个帖子,论坛崩溃后估计也丢了。百度 C# 开发 AcitveX 也可以找到类似文章,这种方式优于前两种。将对话框做成 DLL,再用 lisp 调用,文件很小,可以和 lisp 一起打包。选择 .net 2.0 即可支持所有CAD版本,32 位 DLL 用 vb6.0 可生成,64 位的就必须上 VS 了 ,vb6.0 不支持 64 位,下面是 VS2015 企业版。

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 很给力!

查看全部评分

发表于 2017-7-28 08:31 | 显示全部楼层
yxp 发表于 2017-7-27 15:46
关于lisp调用对话框,本人自从学习lisp以来发现有以下三种方式:
1.  LISP 自带的 DCL,优点:代码少,维 ...

楼主能详细说说吗?“3. 用 VS 开发 acitveX 控件,以前明经就有个帖子,论坛崩溃后估计也丢了。百度 C# 开发 AcitveX 也可以找到类似文章,这种方式优于前两种。将对话框做成 DLL,再用 lisp 调用,文件很小,可以和 lisp 一起打包。选择 .net 2.0 即可支持所有CAD版本,32 位 DLL 用 vb6.0 可生成,64 位的就必须上 VS 了 ,vb6.0 不支持 64 位,下面是 VS2015 企业版。”
发表于 2017-7-28 12:27 | 显示全部楼层
更新了啊!顶一个!
发表于 2017-7-28 14:41 | 显示全部楼层
好工具,黄大师厉害
发表于 2017-7-28 16:35 | 显示全部楼层
重开就发贴,真心赞
发表于 2017-7-30 21:14 | 显示全部楼层
黄大师,666666
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号  
©2000-2017 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2018-7-18 03:18 , Processed in 0.248601 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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