jim_archi4 发表于 2022-7-5 20:04:35

Lisp错误无法工作帮助我

几年前我编写了这个例程,它允许使用
3个例程(Login\u name)(Log\u name\u old)最初是Log\u name和(警告2)。基本上,在(login\u name)(log\u name)中键入密码会评估密码,如果密码错误,(警告2)将退出AutoCAD,否则将继续进入AutoCAD。
 
 
我试图通过重写(Log_name)和添加(警告3和4)来修改例程,以允许3次登录。总的来说,我认为它的结构很好,但工作不正常。我无法通过第一次尝试(计数总是1),即使我键入正确的密码,它也会挂起,表明它卡在“While”循环中。在第一次尝试后,我现在得到一个符号1错误。我知道我很接近,但需要帮助。下面是我的代码,下面是子程序。在Acad中。lsp文件中有一个开关,表示运行这些例程是否需要登录。
 
 
如果有人能帮上忙,我会非常感激,我花了很多晚上努力使这项工作顺利进行。
 
 
谢谢Jim
 
 
;;;-------------------------------------------------------------------------
(defun login_name ()
(se)
(setq olderr *error*
*error* clyerr
)
(if (= "DRAWING1.DWG" (strcase (getvar "dwgname")))
   (progn
   (setq num (load_dialog "wpa"))
   (new_dialog "wpa" num)
   (set_tile "tname" "**********")
   (set_tile "msg2" mess_2)
   (mode_tile "tname" 2)
   (logo)
   (action_tile "accept" "(do_txt)(done_dialog)")
   (start_dialog)
   (unload_dialog num)
   )
)
)

(defun do_txt ()
(setq logn (get_tile "tname"))
)
;;;-------------------------------------------------------------------------
(defun Log_name_old ()
(setq olderr *error*
*error* clyerr
)
(setq filename (open "c:/WPA_CAD2014/ser.dat" "r"))
(setq Logn_name (read-line filename))
(setq enable_logon (read-line filename));***REMOVE THIS LINE
(close filename)
(if (= "DRAWING1.DWG" (strcase (getvar "dwgname")))
   (progn
   (IF (/= (strcase LOGN_NAME) (strcase LOGN))
(warning2)
   )
   )
)
)

(defun Log_name ()
(setq olderr *error*
*error* clyerr
)
(setq filename (open "c:/WPA_CAD2014/ser.dat" "r"))
(setq Logn_name (read-line filename))
(setq enable_logon (read-line filename));***REMOVE THIS LINE
(close filename)
(setq count 1);;;Initialize counter
   (While (< count 4)
    (if (= "DRAWING1.DWG" (strcase (getvar "dwgname")))
       (progn
         (IF (/= (strcase LOGN_NAME) (strcase LOGN))
          (progn
         (cond
             (( = count 1)(warning3))
         (( = count 2)(warning4))
      (( = count 3)(warning2))
         );close cond
          );close progn
         );close if
      );close progn
    );close if
    (set count (+ count 1))
   );;;Close While
);end file
;;;-------------------------------------------------------------------------
(defun Warning2 ()
(se)
(setq olderr *error*
*error* clyerr
)
;;;(beep)
(setq num (load_dialog "wpa3.dcl"))
(new_dialog "wpa3" num)
(set_tile "msg2" mess_2)
(action_tile "accept" "(done_dialog)")
(logo)
(start_dialog)
(unload_dialog num)
(command ".quit" "y")
(princ)
)
;;;-------------------------------------------------------------------------
(defun Warning3 ()
(se)
(setq olderr *error*
*error* clyerr
)
;;;(beep)
(setq num (load_dialog "wpa31.dcl"))
(new_dialog "wpa31" num)
(set_tile "msg2" mess_2)
(action_tile "accept" "(done_dialog)")
(logo)
(start_dialog)
(unload_dialog num)
(login_name)
;;;(command ".quit" "y")
(princ)
)
;;;-------------------------------------------------------------------------
(defun Warning4 ()
(se)
(setq olderr *error*
*error* clyerr
)
;;;(beep)
(setq num (load_dialog "wpa32.dcl"))
(new_dialog "wpa32" num)
(set_tile "msg2" mess_2)
(action_tile "accept" "(done_dialog)")
(logo)
(start_dialog)
(unload_dialog num)
(login_name)
;;;(command ".quit" "y")
(princ)
)
;;;-------------------------------------------------------------------------

SLW210 发表于 2022-7-5 20:11:21

请阅读代码发布指南并编辑您的帖子,将代码包含在代码标签中。

jim_archi4 发表于 2022-7-5 20:18:46

您好,SLW210,
 
 
我试图通过阅读你的链接将代码放入其中,但编辑并不能做到这一点,所以我写了一篇新帖子,复制并粘贴了文本,选择代码并按下“#”,但正如你在我的新帖子中看到的一样。。。。。。太令人沮丧了!!!!你能帮助我吗

BIGAL 发表于 2022-7-5 20:19:49

只需在开头键入,在结尾键入,不带空格

SLW210 发表于 2022-7-5 20:25:06

正如BIGAL所示,您只需手动添加它们,这次我为您修复了它。我删除了你的另一个帖子,不需要重复帖子。

jim_archi4 发表于 2022-7-5 20:30:22

非常感谢你这次的帮助

pBe 发表于 2022-7-5 20:35:35

这是首次启动autocad会话吗?

jim_archi4 发表于 2022-7-5 20:42:22

是的,它只适用于第一次启动时绘图是drawing1。图纸

pBe 发表于 2022-7-5 20:48:23

如果我们可以尝试你现在拥有的,我们可以进一步帮助你,如果你不介意发布其余的代码,请这样做,节省了我们试图找出最终结果的时间。
 
我认为这个问题很容易,而且可能比你现在的问题要短。

jim_archi4 发表于 2022-7-5 20:51:42

好的,在Acad lisp文件中,代码的平衡如下,它是通过读取外部文件“1”来触发的。运行例程“0”不运行
请不要,我已经手动添加了“[”括号来正确放置代码,希望它能工作!!!
 
 
[(如果(=启用登录“1”)
(程序
(登录名)
(log_名称)
)
)]
所有的基本代码如上所述,(SE)代码是无关的,因为它是在我所有的LISP到,如果删除将stll的工作OK。
 
 
以下是DCL代码
 
 
[WPA.DCL
图标:图像
{
固定宽度=true;
颜色=0;
宽度=20;
高度=7;
key=“图标”;
}
wpa:对话框{
布局=水平;
label=“wpa\U cad授权”;
初始焦点=“tname”;
:群集{
布局=垂直;
:boxed_列{
label=“登录密码:”;
:编辑框{
label=“输入登录密码:”;
宽度=40;
key=“tname”;
}
:文本{
标签=“”;
对齐=居中;
}
}//闭合装箱列
//:列{
//图标;
用于警告的WPA3.DCL 2
图标:图像
{
固定宽度=true;
颜色=0;
宽度=20;
高度=7;
key=“图标”;
}
wpa3:对话框{
布局=水平;
label=“wpa\U cad警报!”;
:群集{
布局=垂直;
:boxed_列{
label=“未经授权使用:”;
:文本{
label=“您的密码不被接受”;
对齐=居中;
}
 
:文本{
label=“未经授权的用户…wpa\U cad已禁用”;
对齐=居中;
}
}
:行{
固定宽度=true;
对齐=居中;
:按钮{
键=“接受”;
标签=“OK”;
宽度=8;
助记符=“O”;
is_default=true;
is_cancel=true;
}
}
:文本{
key=“msg2”;
对齐=居中;
}
}
:列{
偶像
垫片;
//垫片;
}
 
}
警告3的WPA31.DCL
图标:图像
{
固定宽度=true;
颜色=0;
宽度=20;
高度=7;
key=“图标”;
}
wpa31:对话框{
布局=水平;
label=“wpa\U cad警报!”;
:群集{
布局=垂直;
:boxed_列{
label=“拒绝访问:”;
:文本{
label=“您的密码不正确”;
对齐=居中;
}
 
:文本{
label=“还剩2次尝试”;
对齐=居中;
}
}
:行{
固定宽度=true;
对齐=居中;
:按钮{
键=“接受”;
标签=“OK”;
宽度=8;
助记符=“O”;
is_default=true;
is_cancel=true;
}
}
:文本{
key=“msg2”;
对齐=居中;
}
}
:列{
偶像
垫片;
//垫片;
}
 
}
WPA。DCL32用于警告4
图标:图像
{
固定宽度=true;
颜色=0;
宽度=20;
高度=7;
key=“图标”;
}
wpa32:对话框{
布局=水平;
label=“wpa\U cad警报!”;
:群集{
布局=垂直;
:boxed_列{
label=“拒绝访问:”;
:文本{
label=“您的密码不正确”;
对齐=居中;
}
 
:文本{
label=“上次尝试”;
对齐=居中;
}
}
:行{
固定宽度=true;
对齐=居中;
:按钮{
键=“接受”;
标签=“OK”;
宽度=8;
助记符=“O”;
is_default=true;
is_cancel=true;
}
}
:文本{
key=“msg2”;
对齐=居中;
}
}
:列{
偶像
垫片;
//垫片;
}
 
}]
 
 
提前谢谢你
页: [1] 2
查看完整版本: Lisp错误无法工作帮助我