Toggle的值从“0”到“1”不等,这些是字符串整数:
“0”是未选中时的值
“1”是选中时的值
或者在LISP中,单词“0”->nil;“1”->T。
如果可以在回调中获得label属性,那就太好了,但通常可用的属性是:$key$value$data$reason$x$y。
但是,您仍然可以通过一些列表操作(assoc list)或两个列表来获得所需内容:一个是在用户单击“确定”时收集切换值(结果),另一个是保存所有管道直径。
或者类似的东西:
- (defun C:test ( / *error* dcl des dch dcf togglekeys t1 t2 t3 t4 t5 t6 t7 t8 )
-
- (defun *error* ( msg )
- (and (< 0 dch) (unload_dialog dch))
- (and (eq 'FILE (type des)) (close des))
- (and (eq 'STR (type dcl)) (findfile dcl) (vl-file-delete dcl))
- (and msg (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\nError: " msg)) ))
- (princ)
- ); defun *error*
-
- (cond
- (
- (and (setq dcl (vl-filename-mktemp nil nil ".dcl")) (setq des (open dcl "w"))
- (mapcar (function (lambda (x) (princ (strcat "\n" x) des)))
- '("samp8 : dialog "
- "{ label = "Pipe Lines";"
- " : row "
- " { : boxed_column "
- " { label = "Pipe diameters used (mm)"; "
- " : toggle { key = "tog1"; label = "150"; }"
- " : toggle { key = "tog2"; label = "200"; }"
- " : toggle { key = "tog3"; label = "225"; }"
- " : toggle { key = "tog4"; label = "250"; }"
- " : toggle { key = "tog5"; label = "300"; }"
- " : toggle { key = "tog6"; label = "375"; }"
- " : toggle { key = "tog7"; label = "450"; }"
- " : toggle { key = "tog8"; label = "600"; }"
- " }"
- " : boxed_column"
- " { label = "Variables";"
- " : edit_box { key = "eb1"; label = "Manning 'n'"; edit_width = 6 ; value = "0.013"; }"
- " : edit_box { key = "eb2"; label = "% part full"; edit_width = 6 ; value = "50"; }"
- " }"
- " }"
- " ok_cancel;"
- "}"
- ); list
- ); mapcar
- (not (setq des (close des))) (< 0 (setq dch (load_dialog dcl))) (new_dialog "samp8" dch)
- ); and
- (setq togglekeys '("tog1" "tog2" "tog3" "tog4" "tog5" "tog6" "tog7" "tog8"))
- ; (client_data_tile "mykey" "mydata")
- ; (mapcar 'client_data_tile togglekeys '("150" "200" "225" "250" "300" "375" "450" "600")) ; this won't work in my plan here
- (client_data_tile "accept" (vl-prin1-to-string '("150" "200" "225" "250" "300" "375" "450" "600")))
- (action_tile "accept"
- (vl-prin1-to-string
- '(progn (mapcar 'set '(t1 t2 t3 t4 t5 t6 t7 t8) (read $data))
- (mapcar '(lambda (a b) (if (= a "0") (set b nil))) (mapcar 'get_tile togglekeys) '(t1 t2 t3 t4 t5 t6 t7 t8) )
- (done_dialog 1)
- ); progn
- ); vl-prin1-to-string
- ); action_tile
- (if (= 1 (setq dcf (start_dialog)))
- (alert (strcat "\nUser has chosen toggles:\n" (vl-prin1-to-string (vl-remove-if 'null (list t1 t2 t3 t4 t5 t6 t7 t8)))))
- (princ "\nUser cancelled the dialog.")
- )
- )
- ); cond
- (*error* nil) (princ)
- ); defun C:test
还要尽量压缩代码(DCL语言易于阅读)。 |