明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2813|回复: 14

[求助]LSP+DCL出问题了.

  [复制链接]
发表于 2005-4-18 20:40:00 | 显示全部楼层 |阅读模式
LSP: (defun c:txt ()
(setq dcl_id (load_dialog "txt.dcl"))
(if(< dcl_id 0) (exit))
(if(not (new_dialog "txt" dcl_id)) (exit))
(end_list)
(setq i 1)
(repeat nn
(action_tile (strcat "c" (itoa i)) "(wr_txt)")
(setq i (1+ i))
(action_tile "what" "(setq i (atoi $value));;;选中片语
(setq txt (nth i txt_tb))(set_tile \"sel_ok\" txt)"
)
(action_tile "sel_ok" "(setq txt $value)")
(action_tile "accept" "(setq ok T)(done_dialog 1)(unload_dialog dcl_id)")
(action_tile "cancel" "(unload_dialog dcl_id)")
(start_dialog)
)
(prompt "\n无法显示对话方块FILETEXT! 请检查对话方块内容!")
)
)
(prompt "\n无法载入对话方块文件TXT.DCL! 请检查文件是否存在及路径是否正确!")
)
)
;;;初始化程式,把第1个分组项中的片语读入表txt_tb中
(defun init( / fname fp txt1)
(setq fname (findfile "txt1.dat"))
(if (not fname)
(progn (princ "\n文件 TXT1.DAT 不存在 !") (exit));;;文件不存在,则退出
(setq fp (open fname "r"))
(setq txt_tb '())
(while (setq txt1 (read_line fp))
(setq txt_tb (cons txt1 txt_tb))
)
(close fp)
(setq txt_tb (reverse txt_tb))
(setq old_nn 1);;;记录索引号
;;;更换列表框内片语显示内容
(defun wr_txt ( / fname fname1 fp txt1 i)
(setq fp (open fname "r"))
(setq i 1)
(while (<= i nn);;;判别哪个片语项被点中
(if (= (get_tile (strcat "c" (itoa i))) "1")
(setq fname1 (strcat "txt" (itoa i) ".dat")
i nn
)
)
(setq i (1+ i))
)
(if (setq fname (findfile fname1));;;查找文件是否存在
(progn
(setq old_nn (atoi (substr fname1 5)));;;记录索引号
(setq txt_tb '())
(while (setq txt1 (read_line fp));;;依次读出各片语
(setq txt_tb (cons txt1 txt_tb))
)
(close fp)
(setq txt_tb (reverse txt_tb))
(start_list "what");;;在列表框内显示片语内容
(mapcar 'add_list txt_tb)
(end_list)
(progn
(alert (strcat "文件" fname1 "不存在!"))
(set_tile (strcat "c" (itoa old_nn)) "1");恢復原记录号
)
)
;;;主程序开始
(setq olderr *error*
*error* txterr
oldcmd (getvar "cmdecho")
)
(setvar "cmdecho" 0);;;命令不回显
(setq nn 9);;;片语分类数
(init) ;;;初始化
(diag) ;;;驱动对话方块
(if (and ok txt)
(progn
(if (or (= (setq sty (tblsearch "STYLE" "HZ")) nil);;;"HZ"字型是否存在
(/= (cdr (assoc 40 sty)) 0) ;;;字高是否为定值
(/=(getvar "TEXTSTYLE") "HZ");;;当前字型是否为"HZ"
(command "STYLE" "HZ" "txt,hztxt" 0 0.7 0 "n" "n");;;设置"HZ"字型
(initget (+ 2 4));;;下面的输入值要求大於0
(setq ht (getreal "\n请输入字高<500>:"))
(if (not ht) (setq ht 500))
(setq pt (getpoint "\n请点取文字起点:"))
(command "text" pt ht 0 txt)
)
)
(princ)) DCL: // #txt.dcl
// 供#txt.lsp调用
txt : dialog { // 对话方块名称
label = "常用片语"; // 对话方块标识
: row {
: boxed_column {
label = " 索 引 ";
: radio_button {
label = "常用术语"; // 多选一按钮
key = "c1";
value = "1"; // 初始值为"1", 表示选中
}
: radio_button {
label = "图纸名称";
key = "c2";
}
: radio_button {
label = "房间名称";
key = "c3";
}
: radio_button {
label = "卫生器具";
key = "c4";
}
: radio_button {
label = "管材配件";
key = "c5";
}
: radio_button {
label = "器材仪錶";
key = "c6";
}
: radio_button {
label = "常用设备";
key = "c7";
}
: radio_button {
label = "构筑物";
key = "c8";
}
: radio_button {
label = "其他";
key = "c9";
}
}
: list_box {
label = "片语内容";
key = "what";
height = 15;
width = 26;
allow_accept = true; // 可双击滑鼠选取
}
}
spacer_1;
: edit_box {// 编辑框
label = "所选片语:";
key = "sel_ok";
}
spacer_1;// 增加间距
ok_cancel;
} 相应的DAT文件已有(很简单),不上传了. 提示:fixnump nil? Why?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2005-4-19 08:29:00 | 显示全部楼层
开始的地方使用(end_list)做什么?


(repeat nn ..


这里的nn怎么来的?


...后面就没看了


不知道程序是不是你写的,如果是,这样的错误自己还找不出来,不应该啊,如果不是自己写的,最好让原作者弄得能用了...自己如果不是很熟悉,建议不要修改原程序
 楼主| 发表于 2005-4-19 21:13:00 | 显示全部楼层
原程序是这样的: 飞哥再帮忙看看.

(defun c:#txt ( / oldcmd olderr ok txt_tb txt dcl_id sty fp nn ht pt txterr diag init wr_txt old_nn)

; 定义错误处理子程序

(defun txterr(s)

(if (and (/= s "console break")

(/= s "Function cancelled")

(/= s "quit / exit abort")

)

(princ (strcat "\nError:" s))

)

(if olderr (setq *error* olderr)); 恢复原系统设置

(if oldcmd (setvar "cmdecho" oldcmd))

(princ)

)

; 对话框显示及驱动程序

(defun diag ( / i)

(if (> (setq dcl_id (load_dialog "#txt")) 0);加载对话框文件

(progn

(if (new_dialog "filetext" dcl [JX*6]id); 显示对话框

(progn start_list "what");将词组显示到列表框内

(mapcar 'add_list txt_tb

)

(end_list)

(setq i 1)

(repeat nn;点取词组分类项后的操作

(action_tile (strcat "c" (itoa i)) "(wr_txt)")

(setq i (1+ i))

)

(action_tile "what" "(setq i (atoi $value));选中词组

(setq txt (nth i txt_tb))(set_tile \"sel_ok\" txt)"

)

(action_tile "sel_ok" "(setq txt $value)")

(action_tile "accept" "(setq ok T)(done_dialog 1)(unload_dialog dcl_id)")

(action_tile "cancel" "(unload_dialog dcl_id)")

(start_dialog)

)

(prompt "\n无法显示对话框FILETEXT! 请检查对话框内容!")

)

)

(prompt "\n无法加载对话框文件#TXT.DCL! 请检查文件是否存在及路径是否正确!")

)

)

; 初始化程序, 把第1个分组项中的词组读入表txt_tb中

(defun init( / fname fp txt1)

(setq fname (findfile "$txt1.dat"))

(if (not fname)

(progn (princ "\n文件 $TXT1.DAT 不存在 !") (exit)) ; 文件不存在, 则退出

)

(setq fp (open fname "r"))

(setq txt_tb '())

(while (setq txt1 (read_line fp))

(setq txt_tb (cons txt1 txt_tb))

)

(close fp)

(setq txt_tb (reverse txt_tb))

(setq old_nn 1);记录索引号

)

; 更换列表框内词组显示内容

(defun wr_txt ( / fname fname1 fp txt1 i)

(setq i 1)

(while (<= i nn); 判别哪个词组项被点中

(if (= (get_tile (strcat "c" (itoa i))) "1")

(setq fname1 (strcat "$txt" (itoa i) ".dat")

i nn

)

)

(setq i (1+ i))

)

(if (setq fname (findfile fname1)); 查找文件是否存在

(progn

(setq old_nn (atoi (substr fname1 5)));记录索引号

(setq fp (open fname "r"))

(setq txt_tb '())

(while (setq txt1 (read_line fp));依次读出各词组

(setq txt_tb (cons txt1 txt_tb))

)

(close fp)

(setq txt_tb (reverse txt_tb))

(start_list "what");在列表框内显示词组内容

(mapcar 'add_list txt_tb)

(end_list)

) ; progn

(progn

(alert (strcat "文件" fname1 "不存在!"))

(set_tile (strcat "c" (itoa old_nn)) "1");恢复原记录号

)

) ; if

)

; 主程序开始

(setq olderr *error*

*error* txterr

oldcmd (getvar "cmdecho")

)

(setvar "cmdecho" 0) ; 命令不回显

(setq nn 9) ; 词组分类数

(init) ; 初始化

(diag) ; 驱动对话框

(if (and ok txt)

(progn

(if (or (= (setq sty (tblsearch "STYLE" "HZ")) nil); "HZ"字型是否存在

(/= (cdr (assoc 40 sty)) 0) ; 字高是否为定值

(/=(getvar "TEXTSTYLE") "HZ"); 当前字型是否为"HZ"

)

(command "STYLE" "HZ" "txt,hztxt" 0 0.7 0 "n" "n") ; 设置"HZ"字型

)

(initget (+ 2 4));下面的输入值要求大于0

(setq ht (getreal "\n请输入字高<500>:"))

(if (not ht) (setq ht 500))

(setq pt (getpoint "\n请点取文字起点:"))

(command "text" pt ht 0 txt)

)

)

(setq *error* olderr);恢复原设置

(setvar "cmdecho" oldcmd)

(princ)

)

// #txt.dcl

// 供#txt.lsp调用

filetext : dialog { // 对话框名称

label = "常用词组"; // 对话框标识

: row {

: boxed_column {

label = " 索 引 ";

: radio_button {

label = "常用术语"; // 多选一按钮

key = "c1";

value = "1"; // 初始值为"1", 表示选中

}

: radio_button {

label = "图纸名称";

key = "c2";

}

: radio_button {

label = "房间名称";

key = "c3";

}

: radio_button {

label = "卫生器具";

key = "c4";

}

: radio_button {

label = "管材配件";

key = "c5";

}

: radio_button {

label = "器材仪表";

key = "c6";

}

: radio_button {

label = "常用设备";

key = "c7";

}

: radio_button {

label = "构筑物";

key = "c8";

}

: radio_button {

label = "其它";

key = "c9";

}

}

: list_box {

label = "词组内容";

key = "what";

height = 15;

width = 26;

allow_accept = true; // 可双击鼠标选取

}

}

spacer_1;

: edit_box {// 编辑框

label = "所选词组:";

key = "sel_ok";

}

spacer_1;// 增加间距

ok_cancel; }

发表于 2005-4-20 08:27:00 | 显示全部楼层
晕,有你这样问的吗?随便在程序中摘一段,然后问程序有什么问题...


还是我2楼的话,如果是你写的,你说说有什么问题吧,如果不是,应该让原作者弄得能用了再给你...再不就把要求说出来,让别人给你重新写过.


你程序中需要读取文件,你没有提供,无法进行调试...
 楼主| 发表于 2005-4-21 20:43:00 | 显示全部楼层
这段程序是我从网上下载的.我尝试的改了下没用.



它的功能是把一些日常工作中的常用词汇插入到图档中,采用对话框的形式.


分三部分.LSP         DCL         DAT ,词汇就放在DAT里面.


如:正面钻穿,反面铣深等常用词语.


飞哥能否将就帮我改一改.谢你了.
发表于 2005-4-22 10:09:00 | 显示全部楼层
真不知道你的程序哪儿来的,,,总的看起来比较有条理,但有些地方的问题实在是非常低级,,,不知道是不是你从别处弄来了程序,然后自己又修改过??? 如果这样,希望以后不要这样做,如果你能看明白,要自己改,就要改好了,有个别的具体问题可以再问,但这样改的乱七八糟的,然后都不知道问题在哪儿,一股脑拿来让别人修改,实在比较费神稍微改了一下,你先试试:
  1. (defun c:#txt ( / oldcmd olderr ok txt_tb txt dcl_id sty fp nn ht pt txterr diag init wr_txt old_nn)
  2. ; 定义错误处理子程序
  3. (defun txterr(s)
  4.    (if (and (/= s "console break")
  5.        (/= s "function cancelled")
  6.        (/= s "quit / exit abort")
  7.        )
  8.        (princ (strcat "\nError:" s))
  9.    )
  10.    (if olderr (setq *error* olderr)); 恢复原系统设置
  11.    (if oldcmd (setvar "cmdecho" oldcmd))
  12.    (princ)
  13. )
  14. ; 对话框显示及驱动程序
  15. (defun diag ( / i)
  16.    (if (> (setq dcl_id (load_dialog "#txt")) 0);加载对话框文件
  17.        (progn
  18.            (if (new_dialog "filetext" dcl_id); 显示对话框
  19.   (progn
  20.      (start_list "what");将词组显示到列表框内
  21.      (mapcar 'add_list txt_tb)
  22.      (end_list)
  23.      (setq i 1)
  24.      (repeat nn;点取词组分类项后的操作
  25.          (action_tile (strcat "c" (itoa i)) "(wr_txt)")
  26.          (setq i (1+ i))
  27.      )
  28.      (action_tile "what" "(setq i (atoi $value)) (setq txt (nth i txt_tb))(set_tile "sel_ok" txt)"
  29.      )
  30.      (action_tile "sel_ok" "(setq txt $value)")
  31.      (action_tile "accept" "(setq ok T)(done_dialog 1)(unload_dialog dcl_id)")
  32.      (action_tile "cancel" "(unload_dialog dcl_id)")
  33.      (start_dialog)
  34.   )  
  35.   (prompt "\n无法显示对话框FILETEXT! 请检查对话框内容!")
  36.            )
  37.        )
  38.        (prompt "\n无法加载对话框文件#TXT.DCL! 请检查文件是否存在及路径是否正确!")
  39.    )
  40. )
  41. ; 初始化程序, 把第1个分组项中的词组读入表txt_tb中
  42. (defun init( / fname fp txt1)
  43.    (setq fname (findfile "$txt1.dat"))
  44.    (if (not fname)
  45.        (progn
  46.            (princ "\n文件 $TXT1.DAT 不存在 !") (exit)
  47.        ) ; 文件不存在, 则退出
  48.    )
  49.    (setq fp (open fname "r"))
  50.    (setq txt_tb '())
  51.    (while (setq txt1 (read-line fp))
  52.        (setq txt_tb (cons txt1 txt_tb))
  53.    )
  54.    (close fp)
  55.    (setq txt_tb (reverse txt_tb))
  56.    (setq old_nn 1);记录索引号
  57. ); 更换列表框内词组显示内容(defun wr_txt ( / fname fname1 fp txt1 i)
  58.    (setq i 1)
  59.    (while (<= i nn); 判别哪个词组项被点中
  60.        (if (= (get_tile (strcat "c" (itoa i))) "1")
  61.            (setq fname1 (strcat "$txt" (itoa i) ".dat")
  62.          i nn)
  63.        )
  64.        (setq i (1+ i))
  65.    )
  66.    (if (setq fname (findfile fname1)); 查找文件是否存在
  67.        (progn
  68.            (setq old_nn (atoi (substr fname1 5)));记录索引号
  69.            (setq fp (open fname "r"))
  70.            (setq txt_tb '())
  71.            (while (setq txt1 (read_line fp));依次读出各词组
  72.   (setq txt_tb (cons txt1 txt_tb))
  73.            )
  74.            (close fp)
  75.            (setq txt_tb (reverse txt_tb))
  76.            (start_list "what");在列表框内显示词组内容
  77.            (mapcar 'add_list txt_tb)
  78.            (end_list)
  79.        ) ; progn
  80.        (progn
  81.            (alert (strcat "文件" fname1 "不存在!"))
  82.            (set_tile (strcat "c" (itoa old_nn)) "1");恢复原记录号
  83.        )
  84.    ) ; if
  85. )
  86. ; 主程序开始
  87.    (setq olderr *error*
  88.   *error* txterr
  89.   oldcmd (getvar "cmdecho")
  90.   )
  91.    (setvar "cmdecho" 0) ; 命令不回显
  92.    (setq nn 9) ; 词组分类数
  93.    (init) ; 初始化
  94.    (diag) ; 驱动对话框
  95.    (if (and ok txt)
  96.        (progn
  97.            (if (or (= (setq sty (tblsearch "STYLE" "HZ")) nil); "HZ"字型是否存在
  98.              (/= (cdr (assoc 40 sty)) 0) ; 字高是否为定值
  99.              (/=(getvar "TEXTSTYLE") "HZ"); 当前字型是否为"HZ"
  100.      )
  101.   (command "STYLE" "HZ" "txt,hztxt" 0 0.7 0 "n" "n") ; 设置"HZ"字型
  102.            )
  103.            (initget (+ 2 4));下面的输入值要求大于0
  104.            (setq ht (getreal "\n请输入字高<500>:"))
  105.            (if (not ht) (setq ht 500))
  106.            (setq pt (getpoint "\n请点取文字起点:"))
  107.            (command "text" pt ht 0 txt)
  108.        )
  109.    )
  110.    (setq *error* olderr);恢复原设置
  111.    (setvar "cmdecho" oldcmd)
  112.    (princ)
  113. )
 楼主| 发表于 2005-4-22 20:34:00 | 显示全部楼层
多谢飞哥!


第二份我一字未改!作者还注明R12版下测试通过.可能是比较古老的程序!


多谢!!!
 楼主| 发表于 2005-4-23 20:26:00 | 显示全部楼层
飞哥,有点小问题. 选索引项的第一项时,没问题,选第二项及以后的会出错:
Error:no function definition: READ_LINE 飞哥请帮忙修修吧!好人做到底,送佛送到西! 谢谢!!!
发表于 2005-4-24 10:44:00 | 显示全部楼层
是read-line(就是把read_line改成read-line,所有的都改掉...我不信你后面的程序一点都没改过,并且能运行通过...至少我觉得这里就通不过
  1. (if (> (setq dcl_id (load_dialog "#txt")) 0);加载对话框文件
  2. (progn
  3. (if (new_dialog "filetext" dcl [JX*6]id); 显示对话框
注意:前面是dcl_id,后面使用时却是dcl...
发表于 2005-4-24 10:47:00 | 显示全部楼层
想到一个可能性...你可能在复制的时候格式变了,其中有些东西变掉了,结果


dcl_id 就成了 dcl [JX*6]id


以后复制程序上来用楼顶的复制方法,不要复制得象3楼那样,我拷回去把代码弄整齐,把手都弄酸了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 12:26 , Processed in 0.197604 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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