lizhu 发表于 2011-12-15 18:35:33

请求一个简单DCL对话框的lisp代码

本帖最后由 lizhu 于 2012-3-26 10:50 编辑

挂了一个CAD外挂,但图标太多,想用一个image_button对话框集中调用一些功能,每个image_button对应外挂的一个命令。我是菜鸟,写不了lisp代码调用命令,恳请高手编一个。


已知DCL的fil1至fil6 对应 fil1_sld至fil6_sld,相对应的外挂命令是yx_yt、yx_roo、yx_dfx、yx_dad、yx_sg、yx_4mi。
外挂安装在d:\cad下

DCL对话框:
dcl_settings : default_dcl_settings{audit_level = 0;}
ima_but:image_button{width=16;aspect_ratio=0.6;color=152;}
fil:dialog{label="常用功能";
:row{
:ima_but{key="fil1";}
:ima_but{key="fil2";}
:ima_but{key="fil3";}
}
:row{
:ima_but{key="fil4";}
:ima_but{key="fil5";}
:ima_but{key="fil6";}
}
:row{fixed_width=true; alignment=centered;
cancel_button;
}
}
==============








ZZXXQQ 发表于 2011-12-17 09:09:39

本帖最后由 ZZXXQQ 于 2023-9-12 00:04 编辑


(defun c:tt ()
(if (> (setq dcl_id (load_dialog (findfile "fil.dcl"))) 0) (progn
(if (new_dialog "fil" dcl_id "") (progn
   (showsld)
   (action_tile "fil1" "(done_dialog 1)")
   (action_tile "fil2" "(done_dialog 2)")
   (action_tile "fil3" "(done_dialog 3)")
   (action_tile "fil4" "(done_dialog 4)")
   (action_tile "fil5" "(done_dialog 5)")
   (action_tile "fil6" "(done_dialog 6)")
   (action_tile "cancel" "(done_dialog 0)")
   (setq re (start_dialog))
)
   (princ "\n无法显示对话框!")
)
(unload_dialog dcl_id)
)
(princ "\n无法加载对话框!")
)
(cond
((= re 1) (load "d:/cad/yx_yt") (c:yx_yt))
((= re 2) (load "d:/cad/yx_roo") (c:yx_roo))
((= re 3) (load "d:/cad/yx_dfx") (c:yx_dfx))
((= re 4) (load "d:/cad/yx_dad") (c:yx_dad))
((= re 5) (load "d:/cad/yx_sg") (c:yx_sg))
((= re 6) (load "d:/cad/yx_4mi") (c:yx_4mi))
)
(princ)
)
;已知DCL的fil1至fil6 对应 fil1_sld至fil6_sld
(defun showsld ()
(setq sldname "fil" i 1)
(repeat 6
(setq sldnm (strcat sldname (itoa i))
      x (dimx_tile sldnm)
      y (dimy_tile sldnm))
(if (setq sld (findfile (strcat sldnm "_sld.sld"))) (progn
   (start_image sldnm)
   (fill_image 0 0 x y -2)
   (slide_image 0 0 x y sld)
   (end_image)
)
   (set_tile sldnm (strcat sldnm "_sld.sld"))
)
(setq i (1+ i))
)
)

lee50310 发表于 2022-8-2 11:31:43

本帖最后由 lee50310 于 2022-8-2 18:45 编辑

提供一個完整的範例(含幻燈片) 可參考看看

檔案存放路徑 d槽 temp 目錄下
若放在其他地方 則需修改 程式中的 路徑(setq path "D:\\TEMP\\")
執行指令:tt2

效果如動態圖


lizhu 发表于 2011-12-17 10:18:17

感谢大大!
可是为什么我加载输入tt命令对话框一闪就不见了呢???
还有我需要加载sld幻灯片的代码,就是 fil1对 fil1_sld,fil2对 fil2_sld.............

lizhu 发表于 2011-12-17 14:28:39

找到问题了,老大的(defun sowsld ()漏了一个字母,应是(defun showsld ()。
可问题是点幻灯片调用不了外挂命令呀。

ZZXXQQ 发表于 2012-2-17 21:24:26

shousld函数重名了。所以只能有一个程序能正常执行。

长风(尚品) 发表于 2013-1-29 14:44:19

lizhu 发表于 2011-12-17 14:28 static/image/common/back.gif
找到问题了,老大的(defun sowsld ()漏了一个字母,应是(defun showsld ()。
可问题是点幻灯片调用不了外挂 ...

为什么不显示名字?只有白色底子
(defun c:tt ()
(if (> (setq dcl_id (load_dialog (findfile "fil.dcl"))) 0) (progn
(if (new_dialog "fil" dcl_id "") (progn
   (showsld)
   (action_tile "画箭头" "(done_dialog 1)")
   (action_tile "fil2" "(done_dialog 2)")
   (action_tile "fil3" "(done_dialog 3)")
   (action_tile "fil4" "(done_dialog 4)")
   (action_tile "fil5" "(done_dialog 5)")
   (action_tile "fil6" "(done_dialog 6)")
   (action_tile "cancel" "(done_dialog 0)")
   (setq re (start_dialog))
)
   (princ "\n无法显示对话框!")
)
(unload_dialog dcl_id)
)
(princ "\n无法加载对话框!")
)
(cond
((= re 1) (load "D:/soft/工具/画箭头.lsp") (c:hjt))
((= re 2) (load "d:/cad/yx_roo") (c:yx_roo))
((= re 3) (load "d:/cad/yx_dfx") (c:yx_dfx))
((= re 4) (load "d:/cad/yx_dad") (c:yx_dad))
((= re 5) (load "d:/cad/yx_sg") (c:yx_sg))
((= re 6) (load "d:/cad/yx_4mi") (c:yx_4mi))
)
(princ)
)
;已知DCL的fil1至fil6 对应 fil1_sld至fil6_sld
(defun showsld ()
(setq sldname "fil" i 1)
(repeat 6
(setq sldnm (strcat sldname (itoa i))
      x (dimx_tile sldnm)
      y (dimy_tile sldnm))
(if (setq sld (findfile (strcat sldnm "_sld.sld"))) (progn
   (start_image sldnm)
   (fill_image 0 0 x y -2)
   (slide_image 0 0 x y sld)
   (end_image)
)
   (set_tile sldnm (strcat sldnm "_sld.sld"))
)
(setq i (1+ i))
)
)

dcl_settings : default_dcl_settings{audit_level = 0;}
ima_but:image_button{width=8;aspect_ratio=0.6;color=255;}
fil:dialog{label="常用功能";
:row{
   :boxed_column{
   fixed_width=true;
   label="图层类";
:ima_but{key="画箭头";}
:ima_but{key="fil2";}
:ima_but{key="fil3";}
}
}
:row{
:ima_but{key="fil4";}
:ima_but{key="fil5";}
:ima_but{key="fil6";}
}
:row{fixed_width=true; alignment=centered;
cancel_button;
}
}

shcvip 发表于 2023-9-11 22:17:40

ZZXXQQ 发表于 2011-12-17 09:09


这里就执行不了

shcvip 发表于 2023-9-12 12:15:01

shcvip 发表于 2023-9-11 22:17
这里就执行不了

(load_dialog (findfile "fil.dcl"))
程序停在这里了。

xyp1964 发表于 2023-9-12 14:14:35




页: [1] 2
查看完整版本: 请求一个简单DCL对话框的lisp代码