明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2396|回复: 5

[求助]急:在事件程序不能调用lsp程序?

[复制链接]
发表于 2009-12-12 11:20:00 | 显示全部楼层 |阅读模式

 ;;双击选择的类型按钮,进入相应的对话框程序或lisp程序
 (defun c:tdycadjcd00_tdycadjcdForm00_PicB01_OnDblClicked (/)
    (dcl_Form_Close tdycadjcd00_tdycadjcdForm00) ;;退出对话框
    (dcl_project_unload "tdycadjcd00")  ;;关闭对话框文件
    ;;(LoadODCLProj "T:/tdycad/tdycadjcd/jcd01/tdycadjcd01.odcl") ;;加载对话框dcl文件----能够正常运行
      ;;(dcl_FORM_SHOW tdycadjcd01_tdycadjcdForm01)  ;;显示对话框---能够正常运行
    (Load "T:/tdycad/tdyhd/hdduanmian/dm_gong/dmgongodcl.lsp") ;;加载对话框dcl文件
      (c:dmgongodcl)  ;;显示对话框

   )

---------------------------------

当加载lsp程序时不能调入和运行。

我没有查到在事件程序中调用lsp文件的例子

发表于 2010-12-25 21:56:18 | 显示全部楼层
从倒数第三行就不对了,应该显示完对话框后,本defun就结束,在这个对话框上定义一些按钮或者其他标签等,用其事件来调用你要加载的LSp程序
发表于 2011-1-3 10:44:19 | 显示全部楼层
我也一直为此烦恼,还请楼上的兄弟贡献个源码
发表于 2011-1-4 22:45:44 | 显示全部楼层
1楼的代码是不是这个意思——双击一个选项,关闭本对话框,加载另一个lsp程序和对话框?把列表框内要双击的内容当做象菜单那样应用?在版本5上,双击的动作事件好像不多,列表有双击事件选项。好像6版本上多加了一些双击事件,如Grid中。一楼所说的类型按钮是指哪种按钮?
发表于 2011-1-5 17:53:31 | 显示全部楼层
ODCL文件包

;;;做了个简单的双击调用LSP源码贴如下
;;;J.lsp代码
;;根据AutoCAD版本加载相应版本的OpenDCl arx; or函数按顺序测试,一旦为T,则返回T,不再继续求值
(or
  (member(strcase(strcat "OpenDCL."(substr(getvar "ACADVER") 1 2)".arx")t)(arx));;测试相应的opendcl是否已加载,nil继续下一条
  (and(setq fn(findfile(strcat "OpenDCL."(substr(getvar "ACADVER") 1 2)".arx")))(arxload fn));;测试opendcl.x.odcl是否存在,如存在继续加载是否成功
    (t(alert (strcat "\n路径中无" fn "文件或者有文件加载不成功!")(exit))))  ;加载OpenDCL.X.arx
;;;加载对话框文件
(defun LoadODCLProj (proj / fn)
  (or
    (and(setq fn (findfile proj))(dcl_PROJECT_LOAD fn))
    (alert (strcat "\"" proj "\" 加载失败,确定文件在搜索路径中!"))(EXIT)))
  
(defun LspLoader(lspFileName / fn)
  (or
    (and(setq fn (findfile lspFileName))(LOAD fn))
    (alert (strcat "\"" lspFileName "\" 加载失败,确定文件在搜索路径中!"))(EXIT)))

(defun c:J(/ i)
  (LoadODCLProj "J0.odcl")
  (if (not (dcl_FORM_ISACTIVE J0_Main))(dcl_FORM_SHOW J0_Main)))
;;;双击列表动作
(defun c:J0_Main_ListBox1_OnDblClicked (/)
  (setq i (dcl_ListBox_GetCurSel J0_Main_ListBox1))
  (cond
    ((= i 0)
     (loadODCLProj "J1.odcl")
     (LspLoader "J1.lsp")
     (if(not (dcl_FORM_ISACTIVE J1_Base))(dcl_FORM_SHOW J1_Base)))
    (t)))

;;;L1.lsp
(defun c:J1()
  (dcl_Control_SetText J1_Base_WorksName "工程名称123456"))
;;工程名称动作
(defun c:J1_Base_WorksName_OnEditChanged (NewValue /)
  (setq BASE (dcl_Control_GetText J1_Base_WorksName))
)
;;确定动作
(defun c:J1_Base_BaseOK_OnClicked (/)
  (if(dcl_FORM_ISACTIVE J1_Base)(dcl_FORM_CLOSE J1_Base))
  (if (not (dcl_FORM_ISACTIVE J0_Main))(dcl_FORM_SHOW J0_Main))  
)

;;;取消动作
(defun c:J1_Base_BaseCancle_OnClicked (/)
  (if(dcl_FORM_ISACTIVE J1_Base)(dcl_FORM_CLOSE J1_Base))
  (if (not (dcl_FORM_ISACTIVE J0_Main))(dcl_FORM_SHOW J0_Main))
)
效果如下:双击列表项内容,调用相应的lsp和对话框,实际上也可以可以把两个lsp文件合并,编辑起来比较方便。

本帖子中包含更多资源

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

x
发表于 2011-1-17 16:01:44 | 显示全部楼层
不错,学习谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 18:20 , Processed in 0.154615 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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