Тема: Как создать окошко с выводом построчных данных?

Создал вот такую команду:

(defun c:qw (/ in n q1)
        (setvar "cmdecho" 0)
        (if (= nil (setq q1 (entsel "Pick to entity")))
                (progn (print "Entity none found") (print));progn
                (progn (textpage)
                        (setq q3 (entget (car q1)) n (length q3) in 0)
                        (repeat n
                        (print (nth in q3)) (setq in (+ in 1)));repeat
                )) ;progn if
                (print)
                (Terpri)
                (setvar "cmdecho" 1)
   (prin1)
        );end

Она в текстовом окне построчно печатает данные элементов.
Хотелось бы для наглядности оформить DCL, что ты появлялось окошко с построчными данными.
Проблема в том, что я совершенно не знаю DCL
Прошу знатоков помочь в написании DCL части.

Re: Как создать окошко с выводом построчных данных?

> Michael
А попробуйте вот так:

(defun c:qw (/ in n q1 q3 sp ssp f1)
(setvar "cmdecho" 0)
  (if (vl-directory-files "" "f1.txt")(vl-file-delete "f1.txt"))
(if (= nil (setq q1 (entsel "Pick to entity")))
  (progn (print "Entity none found") (print));progn
  (progn
    (setq q3 (entget (car q1)) n (length q3) in 0 ssp "")
    (setq f1 (open "f1.txt" "a"))
    (repeat n
      (print (nth in q3) f1)
      (setq in (+ in 1)));repeat
    (close f1)
    (setq f1 (open "f1.txt" "r"))
    (repeat (1+ n)
      (setq sp (read-line f1))
      (setq ssp (strcat ssp sp "\n")));repeat
    (close f1)
    (alert ssp)
    )) ;progn if
(setvar "cmdecho" 1)
(prin1)
);end

Правда без DCL, зато попроще, как мне кажется.

Re: Как создать окошко с выводом построчных данных?

Зачем париться с DCL? Если Вам нужно только показать информацию в "удобоваримом" виде, сформируйте окно примерно таким образом:

(alert "String1\nString2\nString3")

Re: Как создать окошко с выводом построчных данных?

(= nil ...) ??? Интересно, для чего придумали функции null и not ? Не говоря о том, что если поменять местами 3-й и 2-й аргументы функции if, то от нее можно вобще избавиться.

Re: Как создать окошко с выводом построчных данных?

Без записи во вспомогательный файл:

(defun c:qw (/ q1 srt)
  (vl-load-com)
  (setq str "")
  (if (setq q1 (entsel "Pick to entity >"))
    (progn
      (setq q1 (entget (car q1)))
      (while q1
        (setq str (strcat str (vl-princ-to-string (car q1)) "\n"))
        (setq q1 (cdr q1))
      ) ;_  while
      (alert str)
    ) ;_  progn
    (princ "\nEntity none found")
  ) ;_  if
  (princ)
) ;_  defun

Re: Как создать окошко с выводом построчных данных?

Или еще проще

(defun c:qw (/ q1 qw1)
  (vl-load-com)
  (defun qw1 (q)
    (strcat (vl-princ-to-string (car q)) (if (cdr q) (strcat "\n" (qw1 (cdr q))) ""))
  ) ;_  defun
  (if (setq q1 (entsel "Pick to entity >"))
    (alert (qw1 (entget (car q1))))
    (princ "\nEntity none found")
  ) ;_  if
  (princ)
) ;_  defun

Re: Как создать окошко с выводом построчных данных?

> VK
"Нет программы, которую нельзя улучшить..."
                                  Из законов Мэрфи
С функцией vl-princ-to-string - промашечка вышла, каюсь.
Ну, а следить за развитием мысли - это здорово!
--------------------
Спасибо за школу!

Re: Как создать окошко с выводом построчных данных?

Огромное спасибо всем, кто откликнулся!
Но дело в том, что у меня в 14 акаде функция (vl-load-com) не работает  - не полной акад!!!
Может есть еще какие решения?