alwtyp 发表于 2013-6-16 20:04:04

请教toggle获得返回值的问题

各位,请教一下以下LSP中,为什么toggle的取值(get_tile "com")会是NIL。(Defun C:test (/ Fn Lsdcl X Dcl_Id Re Vlxpath Inpath)
   (Setq Fn (Open (Setq Lsdcl (Vl-Filename-Mktemp "Tmp" "" ".Dcl")) "W"))
   (Foreach X
   (List
       "path:dialog {label=\"程序 ay编制\";" "spacer;"
         ":row {label=\"路径\";" "alignment=centered;"
             ":button {label=\"浏览\";key=\"vlxPath\";}"
             ":edit_box {key=\"Pathtxt\";edit_width=24;} }"" spacer_1;"
         ":row {label=\"加载命令\";"
             ":toggle {label=\"第一次提示\";key=\"com\";}"
             ":toggle {label=\"第二次提示\";key=\"info\";} }"" spacer_1;"
       "ok_cancel_help;} ")
    (Write-Line X Fn))
   (Close Fn)
   (Setq Dcl_Id (Load_Dialog Lsdcl))
   (Vl-File-Delete Lsdcl)
   (Setq Re 11)
   (While (> Re 10)
   (If (New_Dialog "path" Dcl_Id)
       (Progn
         (Action_Tile "vlxPath" "(Done_Dialog 11)")
   (If (/= Vlxpath NIL) (Setq Inpath (Set_tile "Pathtxt" (Vl-Filename-Directory Vlxpath)) ) )
   (set_tile "com" "1") (set_tile "info" "1")
   (Action_Tile "Accept" "(Setup_Ok) (Done_Dialog 1)")
         (Action_Tile "Cancel" "(Done_Dialog 0)")
         (Action_Tile "Help" "(Help \"aylisp.Chm\")")
   (Setq re (Start_Dialog)) ) )
   (If (= Re 11) (Setq Vlxpath (Getfiled "选择程序文件" "12.lsp" "lsp" 0))) )
   (IF (= Re 1)(Setup_Ok) )
   (setq com (get_tile "com"))
   (Unload_Dialog Dcl_Id)
   (Princ)
)


(defun Setup_Ok()
(progn (If (= (get_tile "com") "1") (alert "第一次提示!"))
         (If (= (get_tile "info") "1") (alert "第二次提示!")) ) )

Gu_xl 发表于 2013-6-16 21:48:18

(setq com (get_tile "com"))
放在了(Start_Dialog)之后了,意味着已经跳出了对话框,(get_tile "com")当然为nil了!这句代码要放在前面:
(action_tile "com" "(setq com $value)")

alwtyp 发表于 2013-6-16 22:12:13

这样子吗?也不行啊(Defun C:test (/ Fn Lsdcl X Dcl_Id Re Vlxpath Inpath Com Info)
   (Setq Fn (Open (Setq Lsdcl (Vl-Filename-Mktemp "Tmp" "" ".Dcl")) "W"))
   (Foreach X
   (List
       "path:dialog {label=\"程序 ay编制\";" "spacer;"
         ":row {label=\"路径\";" "alignment=centered;"
             ":button {label=\"浏览\";key=\"vlxPath\";}"
             ":edit_box {key=\"Pathtxt\";edit_width=24;} }"" spacer_1;"
         ":row {label=\"加载命令\";"
             ":toggle {label=\"第一次提示\";key=\"com\";value=1;}"
             ":toggle {label=\"第二次提示\";key=\"info\";value=1;} }"" spacer_1;"
       "ok_cancel_help;} ")
    (Write-Line X Fn))
   (Close Fn)
   (Setq Dcl_Id (Load_Dialog Lsdcl))
   (Vl-File-Delete Lsdcl)
   (Setq Re 11)
   (While (> Re 10)
   (If (New_Dialog "path" Dcl_Id)
       (Progn
         (Action_Tile "vlxPath" "(Done_Dialog 11)")
       (If (/= Vlxpath NIL) (Setq Inpath (Set_tile "Pathtxt" (Vl-Filename-Directory Vlxpath)) ) )
;;;       (set_tile "com" "1") (set_tile "info" "1")
       (action_tile "com" "(setq com $value)")
       (action_tile "info" "(setq info $value)")
       (Action_Tile "Accept" "(Setup_Ok) (Done_Dialog 1)")
         (Action_Tile "Cancel" "(Done_Dialog 0)")
         (Action_Tile "Help" "(Help \"aylisp.Chm\")")
       (Setq re (Start_Dialog)) ) )
   (If (= Re 11) (Setq Vlxpath (Getfiled "选择程序文件" "12.lsp" "lsp" 0))) )
   (IF (= Re 1)(Setup_Ok) )
   (setq com (get_tile "com"))
   (Unload_Dialog Dcl_Id)
   (Princ)
)


(defun Setup_Ok(/ Com Info)
(progn (If (= Com "1") (alert "第一次提示!"))
         (If (= Info "1") (alert "第二次提示!")) ) )
页: [1]
查看完整版本: 请教toggle获得返回值的问题