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,
我试图通过阅读你的链接将代码放入其中,但编辑并不能做到这一点,所以我写了一篇新帖子,复制并粘贴了文本,选择代码并按下“#”,但正如你在我的新帖子中看到的一样。。。。。。太令人沮丧了!!!!你能帮助我吗 只需在开头键入,在结尾键入,不带空格 正如BIGAL所示,您只需手动添加它们,这次我为您修复了它。我删除了你的另一个帖子,不需要重复帖子。 非常感谢你这次的帮助 这是首次启动autocad会话吗? 是的,它只适用于第一次启动时绘图是drawing1。图纸 如果我们可以尝试你现在拥有的,我们可以进一步帮助你,如果你不介意发布其余的代码,请这样做,节省了我们试图找出最终结果的时间。
我认为这个问题很容易,而且可能比你现在的问题要短。 好的,在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