since i can't help with dynmode,
or try alternative by displaying layer name on the screen?
then use native acad command layiso
- (vl-load-com)(defun SS_ARRAY (/ i j k doc lst x ss vp rc) ;hanhphuc 09/12/14 (setq doc (vlax-get-acad-object)) (vlax-for lay (foreach x '(ActiveDocument Layers) (setq doc (vlax-get doc x))) (setq lst (cons (vla-get-name lay) lst)) ) ;_ end of vlax-for (if (< (length lst) [color="red"]20[/color] ); [color="blue"]min=2, you adjust here , example using lst < 20 [/color] [color="red"][b] (c:tt) [/b][/color] ; [color="blue"] use your code if vla-object (entmakex (vl-list* '(0 . "TEXT") '(1 . "*") '(72 . 4) (cons 40 (* (/ (getvar 'viewsize) (cadr (getvar 'screensize))) 7.)) (mapcar ''((x) (cons x (car vp))) '(10 11)) ) ;_ end of list ) ;_ end of entmakex ) ;_ end of vlax-ename->vla-object (car rc) ;row (cadr rc) ;col 1 (/ (- (cadadr vp) (cadar vp)) (- (car rc) 1.)) (/ (- (caadr vp) (caar vp)) (- (cadr rc) 1.)) 1. ) ;_ end of vla-arrayrectangular (setq ss (ssget "X" (list (cons 0 "TEXT")))) (if (> (setq c (- (setq x (sslength ss)) (length lst))) 0) (repeat c (entdel (setq e (ssname ss (setq x (1- x))))) (ssdel e ss)) ) ;_ end of if (repeat (setq i (sslength ss)) (setq i (1- i)) (mapcar ''((x) (vlax-put (vlax-ename->vla-object (ssname ss i)) x (nth i (acad_strlsort lst)))) '(Layer TextString) ) ;_ end of mapcar ) ;_ end of repeat[color="red"][b] ) ;_end of progn[/b][/color]) (terpri) ss ) ;_ end of defun
[code](defun c:test (/ *error* ss e on) (defun *error* (msg) (if on (command "layerp") ) ;_ end of if (if ss (command "_erase" ss "") ) ;_ end of if (if (> (getvar "cmdactive") 0) (princ) ) ;_ end of if (command "regen") (if (not (wcmatch (strcase msg) "*CANCEL*,*EXIT*")) (princ (strcat "\n*error : " msg)) ) ;_ end of if ) ;_ end of defun (command "_layer" "U" "*" "") (setq on (vl-cmdf "_layer" "on" "*" "")[color="red"] ss (SS_ARRAY)) (if (and [color="red"] ss (setq s (ssget [color="red"] [color="red"]"_+.:S:E:L")) ; |