<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>Комментарии на: Возвращаясь к dcl &#8211; написание, обработка, отладка</title>
	<atom:link href="https://autolisp.ru/2015/02/05/dcl-develop/feed/" rel="self" type="application/rss+xml" />
	<link>https://autolisp.ru/2015/02/05/dcl-develop/</link>
	<description>LISP для AutoCAD</description>
	<lastBuildDate>Tue, 24 Feb 2026 16:11:05 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0</generator>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2015/02/05/dcl-develop/comment-page-1/#comment-57076</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Tue, 11 Aug 2015 11:43:14 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2604#comment-57076</guid>
		<description><![CDATA[Ок. Фактически мы с тобой спорим ни о чем. У тебя в callback-функции используется &quot;почти глобальные&quot; переменные $key, $value и dcl_lst. Если от них попытатся избавиться, то получится примерно мое творчество. Да, action для accept и cancel я прописываю в функции вызова диалога - извини, привычка. А в остальном - что в лоб, что по лбу. ИМХО абсолютно одинаковые коды.]]></description>
		<content:encoded><![CDATA[<p>Ок. Фактически мы с тобой спорим ни о чем. У тебя в callback-функции используется "почти глобальные" переменные $key, $value и dcl_lst. Если от них попытатся избавиться, то получится примерно мое творчество. Да, action для accept и cancel я прописываю в функции вызова диалога - извини, привычка. А в остальном - что в лоб, что по лбу. ИМХО абсолютно одинаковые коды.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: gomer</title>
		<link>https://autolisp.ru/2015/02/05/dcl-develop/comment-page-1/#comment-57075</link>
		<dc:creator><![CDATA[gomer]]></dc:creator>
		<pubDate>Tue, 11 Aug 2015 10:23:32 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2604#comment-57075</guid>
		<description><![CDATA[kpblc, то,что твой код работает,  не делает его оптимальным. Смотри ниже то, о чем я написал, и сравнивай. Если убрать функцию создания файла, то станется кода с гулькин хвост.

(defun fun_dlg-execute
       (/ dcl_file dcl_id dcl_lst dcl_res dcl_proc)

  (defun dcl_proc ()
    (cond
      ((null $key)
       (set_tile &quot;opt&quot; &quot;opt1&quot;)
       (set_tile &quot;msg&quot; &quot;Выбери опцию&quot;)
      )

      ((= $key &quot;cancel&quot;)
       (done_dialog 0)
      )

      ((= $key &quot;accept&quot;)
       (setq dcl_lst (list (get_tile &quot;opt&quot;)))
       (done_dialog 1)
      )

    ) ;_ end of cond
  ) ;_ end of defun


  (setq	dcl_file (fun_create-dcl-file)
	dcl_id	 (load_dialog dcl_file)
  ) ;_ end of setq

  (new_dialog &quot;dlg&quot; dcl_id &quot;(dcl_proc)&quot;)
  (dcl_proc)
  (setq dcl_res (start_dialog))
  (unload_dialog dcl_id)

  (if (= dcl_res 1)
    (alert &quot;Была нажата OK&quot;)
    (alert &quot;Была нажата Отмена (Cancel)&quot;)
  ) ;_ end of if
  
  dcl_lst

) ;_ end of defun

(defun fun_create-dcl-file (/ file handle)
  ;; Возвращает имя файла dcl
  (setq	file   (strcat (vl-string-right-trim &quot;\\&quot; (getenv &quot;tmp&quot;))
		       &quot;\\dlg.dcl&quot;
	       )
	handle (open file &quot;w&quot;)
  ) ;_ end of setq
  (foreach item	&#039;(&quot;dlg:dialog{label=\&quot;Диалог\&quot;;&quot;
		  &quot; :text{key=\&quot;msg\&quot;;}&quot;
		  &quot; :boxed_radio_column{key =\&quot;opt\&quot;;&quot;
		  &quot; :radio_button{key=\&quot;opt1\&quot;;label=\&quot;Radio 1\&quot;;}&quot;
		  &quot; :radio_button{key=\&quot;opt2\&quot;;label=\&quot;Radio 2\&quot;;}&quot;
		  &quot; :radio_button{key=\&quot;opt3\&quot;;label=\&quot;Radio 3\&quot;;}&quot;
		  &quot; :radio_button{key=\&quot;opt4\&quot;;label=\&quot;Radio 4\&quot;;}}&quot;
		  &quot; ok_cancel;&quot;
		  &quot;}&quot;
		 )
    (write-line item handle)
  ) ;_ end of foreach
  (close handle)
  file
) ;_ end of defun]]></description>
		<content:encoded><![CDATA[<p>kpblc, то,что твой код работает,  не делает его оптимальным. Смотри ниже то, о чем я написал, и сравнивай. Если убрать функцию создания файла, то станется кода с гулькин хвост.</p>
<p>(defun fun_dlg-execute<br />
       (/ dcl_file dcl_id dcl_lst dcl_res dcl_proc)</p>
<p>  (defun dcl_proc ()<br />
    (cond<br />
      ((null $key)<br />
       (set_tile "opt" "opt1")<br />
       (set_tile "msg" "Выбери опцию")<br />
      )</p>
<p>      ((= $key "cancel")<br />
       (done_dialog 0)<br />
      )</p>
<p>      ((= $key "accept")<br />
       (setq dcl_lst (list (get_tile "opt")))<br />
       (done_dialog 1)<br />
      )</p>
<p>    ) ;_ end of cond<br />
  ) ;_ end of defun</p>
<p>  (setq	dcl_file (fun_create-dcl-file)<br />
	dcl_id	 (load_dialog dcl_file)<br />
  ) ;_ end of setq</p>
<p>  (new_dialog "dlg" dcl_id "(dcl_proc)")<br />
  (dcl_proc)<br />
  (setq dcl_res (start_dialog))<br />
  (unload_dialog dcl_id)</p>
<p>  (if (= dcl_res 1)<br />
    (alert "Была нажата OK")<br />
    (alert "Была нажата Отмена (Cancel)")<br />
  ) ;_ end of if</p>
<p>  dcl_lst</p>
<p>) ;_ end of defun</p>
<p>(defun fun_create-dcl-file (/ file handle)<br />
  ;; Возвращает имя файла dcl<br />
  (setq	file   (strcat (vl-string-right-trim "\\" (getenv "tmp"))<br />
		       "\\dlg.dcl"<br />
	       )<br />
	handle (open file "w")<br />
  ) ;_ end of setq<br />
  (foreach item	'("dlg:dialog{label=\"Диалог\";"<br />
		  " :text{key=\"msg\";}"<br />
		  " :boxed_radio_column{key =\"opt\";"<br />
		  " :radio_button{key=\"opt1\";label=\"Radio 1\";}"<br />
		  " :radio_button{key=\"opt2\";label=\"Radio 2\";}"<br />
		  " :radio_button{key=\"opt3\";label=\"Radio 3\";}"<br />
		  " :radio_button{key=\"opt4\";label=\"Radio 4\";}}"<br />
		  " ok_cancel;"<br />
		  "}"<br />
		 )<br />
    (write-line item handle)<br />
  ) ;_ end of foreach<br />
  (close handle)<br />
  file<br />
) ;_ end of defun</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2015/02/05/dcl-develop/comment-page-1/#comment-57034</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Fri, 07 Aug 2015 17:49:04 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2604#comment-57034</guid>
		<description><![CDATA[О, в качестве иллюстрации: &lt;a href=&quot;http://forum.dwg.ru/showpost.php?p=1435329&amp;postcount=66&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://forum.dwg.ru/showpost.php?p=1435329&amp;postcount=66&lt;/a&gt; (код не смотрел, не до того). Если бы построение диалога шло &quot;на лету&quot;, вопросов бы вообще не возникло никаких.
P.S. Я в принципе не доверяю vlx / fas кодам, предоставляемым без исходников. А если есть исходники - тут же перекомпилирую.]]></description>
		<content:encoded><![CDATA[<p>О, в качестве иллюстрации: <a href="http://forum.dwg.ru/showpost.php?p=1435329&#038;postcount=66" target="_blank" rel="nofollow">http://forum.dwg.ru/showpost.php?p=1435329&#038;postcount=66</a> (код не смотрел, не до того). Если бы построение диалога шло "на лету", вопросов бы вообще не возникло никаких.<br />
P.S. Я в принципе не доверяю vlx / fas кодам, предоставляемым без исходников. А если есть исходники - тут же перекомпилирую.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2015/02/05/dcl-develop/comment-page-1/#comment-57026</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Thu, 06 Aug 2015 17:42:58 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2604#comment-57026</guid>
		<description><![CDATA[Прежде всего - предоставляется один lsp. Кроме того, при совместной компиляции нескольких сотен lsp, некоторые из которых используют диалоги, делать vlx нерентабельно. Сейчас dcl у меня создаются именно &quot;на лету&quot;, в некоторых случаях они формируются на основе внешних данных. Очень удобно.
&lt;blockquote&gt; call-back функция вызывается всего один раз перед стартом диалога!&lt;/blockquote&gt;
Кто сказал? Она вызывается ровно так же, как и любая другая функция.
&lt;blockquote&gt; call-back- функция не нуждается ни в каких параметрах.&lt;/blockquote&gt;
Опять же, кто сказал? И если это так, то почему мой подход работает уже не первый год?
&lt;blockquote&gt; в call-back функции должны быть описаны только управляющие элементы: всегда кнопки, в отдельных случаях списки, радиокнопки и чекбоксы. А не все подряд…&lt;/blockquote&gt;
И снова - кто это сказал? С чего бы вдруг мне не описать в функции, которую &lt;strong&gt;я разрабатываю&lt;/strong&gt; то, что лично мне нужно? Странный подход - &quot;нельзя потому что нельзя&quot;. Можно! :)
&lt;blockquote&gt; Все это описано в справке, поэтому я не вижу причин для подобного велосипедостроения.&lt;/blockquote&gt;
Ок, бога ради. Тот принцип, который я описал и который использую, на данный момент оправдывает все вложения.]]></description>
		<content:encoded><![CDATA[<p>Прежде всего - предоставляется один lsp. Кроме того, при совместной компиляции нескольких сотен lsp, некоторые из которых используют диалоги, делать vlx нерентабельно. Сейчас dcl у меня создаются именно "на лету", в некоторых случаях они формируются на основе внешних данных. Очень удобно.</p>
<blockquote><p> call-back функция вызывается всего один раз перед стартом диалога!</p></blockquote>
<p>Кто сказал? Она вызывается ровно так же, как и любая другая функция.</p>
<blockquote><p> call-back- функция не нуждается ни в каких параметрах.</p></blockquote>
<p>Опять же, кто сказал? И если это так, то почему мой подход работает уже не первый год?</p>
<blockquote><p> в call-back функции должны быть описаны только управляющие элементы: всегда кнопки, в отдельных случаях списки, радиокнопки и чекбоксы. А не все подряд…</p></blockquote>
<p>И снова - кто это сказал? С чего бы вдруг мне не описать в функции, которую <strong>я разрабатываю</strong> то, что лично мне нужно? Странный подход - "нельзя потому что нельзя". Можно! <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<blockquote><p> Все это описано в справке, поэтому я не вижу причин для подобного велосипедостроения.</p></blockquote>
<p>Ок, бога ради. Тот принцип, который я описал и который использую, на данный момент оправдывает все вложения.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: gomer</title>
		<link>https://autolisp.ru/2015/02/05/dcl-develop/comment-page-1/#comment-57010</link>
		<dc:creator><![CDATA[gomer]]></dc:creator>
		<pubDate>Tue, 04 Aug 2015 21:08:52 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2604#comment-57010</guid>
		<description><![CDATA[При всем уважении, но статья - бред от начала до конца.
Во-первых, создание диалога налету - параноидальный мусор. Достаточно скомпилировать код в vlx-модуль и диалог никуда не потеряется.
Во-вторых, call-back функция заменяет, чуть более, чем полностью, action_tile, которая становится абсолютно не нужна...
В-третьих,
(foreach item dcl_lst
    (set_tile (car item) (cdr item))
    (fun_dlg-callback (car item) (cdr item) &#039;dcl_lst)
    ) ;_ end of foreach
Этот бред я вообще не понял... call-back функция вызывается всего один раз перед стартом диалога!
В-четвертых, call-back- функция не нуждается ни в каких параметрах. Есть встроенные переменные $key и т.д. Причем при открытии диалога  $key всегда равен nil. Достаточно в call-back функцию добавить проверку (null $key), чтоб заполнять диалог прямо в call-back функции.
В-пятых, в call-back функции должны быть описаны только управляющие элементы: всегда кнопки, в отдельных случаях списки, радиокнопки и чекбоксы. А не все подряд...
В итоге весь код диалога сосредоточен в call-back функции, а для вызова ее достаточно 5 строчек, которые можно оформить в виде библиотечной функции в 1 строчку.

Все это описано в справке, поэтому я не вижу причин для подобного велосипедостроения.]]></description>
		<content:encoded><![CDATA[<p>При всем уважении, но статья - бред от начала до конца.<br />
Во-первых, создание диалога налету - параноидальный мусор. Достаточно скомпилировать код в vlx-модуль и диалог никуда не потеряется.<br />
Во-вторых, call-back функция заменяет, чуть более, чем полностью, action_tile, которая становится абсолютно не нужна...<br />
В-третьих,<br />
(foreach item dcl_lst<br />
    (set_tile (car item) (cdr item))<br />
    (fun_dlg-callback (car item) (cdr item) 'dcl_lst)<br />
    ) ;_ end of foreach<br />
Этот бред я вообще не понял... call-back функция вызывается всего один раз перед стартом диалога!<br />
В-четвертых, call-back- функция не нуждается ни в каких параметрах. Есть встроенные переменные $key и т.д. Причем при открытии диалога  $key всегда равен nil. Достаточно в call-back функцию добавить проверку (null $key), чтоб заполнять диалог прямо в call-back функции.<br />
В-пятых, в call-back функции должны быть описаны только управляющие элементы: всегда кнопки, в отдельных случаях списки, радиокнопки и чекбоксы. А не все подряд...<br />
В итоге весь код диалога сосредоточен в call-back функции, а для вызова ее достаточно 5 строчек, которые можно оформить в виде библиотечной функции в 1 строчку.</p>
<p>Все это описано в справке, поэтому я не вижу причин для подобного велосипедостроения.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Vladimir_Sergeevich</title>
		<link>https://autolisp.ru/2015/02/05/dcl-develop/comment-page-1/#comment-55957</link>
		<dc:creator><![CDATA[Vladimir_Sergeevich]]></dc:creator>
		<pubDate>Tue, 14 Apr 2015 03:56:49 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2604#comment-55957</guid>
		<description><![CDATA[Алексей, спасибо за наводку. Как надо будет - поищу. Пока что такой необходимости не было. Я между делом читал &quot;САПР на базе...&quot; там тоже был раздел посвящен, представление имею что искать надо.]]></description>
		<content:encoded><![CDATA[<p>Алексей, спасибо за наводку. Как надо будет - поищу. Пока что такой необходимости не было. Я между делом читал "САПР на базе..." там тоже был раздел посвящен, представление имею что искать надо.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2015/02/05/dcl-develop/comment-page-1/#comment-55942</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Mon, 13 Apr 2015 14:09:04 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2604#comment-55942</guid>
		<description><![CDATA[Во, пока вспомнил: я здесь где-то расписывал варианты хранения данных между функциями, файлами и сессиями AutoCAD. Может быть, будет полезным.]]></description>
		<content:encoded><![CDATA[<p>Во, пока вспомнил: я здесь где-то расписывал варианты хранения данных между функциями, файлами и сессиями AutoCAD. Может быть, будет полезным.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2015/02/05/dcl-develop/comment-page-1/#comment-55880</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Thu, 09 Apr 2015 06:09:34 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2604#comment-55880</guid>
		<description><![CDATA[Ну, &quot;мы все учились понемногу&quot; :) Я тоже не сразу до такого дошел ))]]></description>
		<content:encoded><![CDATA[<p>Ну, "мы все учились понемногу" <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> Я тоже не сразу до такого дошел ))</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Vladimir_Sergeevich</title>
		<link>https://autolisp.ru/2015/02/05/dcl-develop/comment-page-1/#comment-55878</link>
		<dc:creator><![CDATA[Vladimir_Sergeevich]]></dc:creator>
		<pubDate>Thu, 09 Apr 2015 03:28:30 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2604#comment-55878</guid>
		<description><![CDATA[Что еще раз доказывает, что не дорос я еще до серьезного программирования. До идеи запоминать значения сам как то не допер. :-)]]></description>
		<content:encoded><![CDATA[<p>Что еще раз доказывает, что не дорос я еще до серьезного программирования. До идеи запоминать значения сам как то не допер. <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2015/02/05/dcl-develop/comment-page-1/#comment-55868</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Wed, 08 Apr 2015 14:08:51 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2604#comment-55868</guid>
		<description><![CDATA[ИМХО самое неудачное решение. Стартовые значения могут быть прочитаны из реестра, из стороннего файла, могут задаваться вообще на основе каких-то параметров - ну не править же каждый раз текст диалога?]]></description>
		<content:encoded><![CDATA[<p>ИМХО самое неудачное решение. Стартовые значения могут быть прочитаны из реестра, из стороннего файла, могут задаваться вообще на основе каких-то параметров - ну не править же каждый раз текст диалога?</p>
]]></content:encoded>
	</item>
</channel>
</rss>
