Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > установка начальных параметров в диалоговом окне (.dcl)

установка начальных параметров в диалоговом окне (.dcl)

Ответ
Поиск в этой теме
Непрочитано 03.08.2009, 00:57 #1
установка начальных параметров в диалоговом окне (.dcl)
paradoxvaha
 
проектирование противооползневых сооружений
 
Yalta
Регистрация: 06.04.2007
Сообщений: 50

Доброй ночи! Подскажите пожалуйста что нужно прописать lisp-файле чтобы диалоговое окно, загружаемое этим файлом выглядело так как показано на рисунке (это касается только вкладки ВЫРАВНИВАНИЕ). То есть проблема в том, что при загрузке диалогового окна галочки напротив ВЫРАВНИВАНИЕ я не ставлю, но всё равно радио-кнопки ЛЕВЫЙ КРАЙ ЦЕНТР ПРАВЫЙ КРАЙ остаются активными. После того как я ставлю галочку ВЫРАВНИВАНИЕ (уже в саомом диалоговом окне, при работе программы) а потом её снова убираю, радио-кнопки ЛЕВЫЙ КРАЙ ЦЕНТР ПРАВЫЙ КРАЙ становятся неактиными... Что можно сделать чтобы они и при начальной загрузке были неактивными?

вот что у меня в lisp-файле написано

Код:
[Выделить все]
(action_tile "uchet_pdop" "(setq uchetpdop (get_tile \"uchet_pdop\"))
                       (if (= uchetpdop \"1\")
                           (mode_tile \"choice1\" 0)
                           (mode_tile \"choice1\" 1))")
Заранее благодарен.

Миниатюры
Нажмите на изображение для увеличения
Название: D091.gif
Просмотров: 246
Размер:	10.4 Кб
ID:	24294  

Просмотров: 7536
 
Непрочитано 03.08.2009, 09:30
#2
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Тут достаточно правильно написать сам dcl файл, но его надо для начала увидеть.
Евгений А. вне форума  
 
Автор темы   Непрочитано 03.08.2009, 20:17 а вот и часть кода
#3
paradoxvaha

проектирование противооползневых сооружений
 
Регистрация: 06.04.2007
Yalta
Сообщений: 50
<phrase 1=


Код:
[Выделить все]
        : toggle {
            key = "uchet_pdop" ;
            value="1";
            label = "дополнительной нагрузки" ;
         }
      : row {
         :spacer{width=2;}
         : radio_column {
            fixed_width = true ;
            key = "choice1" ;
            : radio_button {
               label = "по ранее указанной линии" ;
               key = "star_pdop" ;
               value="1";
            }
            : radio_button {
               label = "указать новую линию" ;
               key = "new_pdop" ;
            }

         }
         :spacer{width=4;}
      }//row
paradoxvaha вне форума  
 
Непрочитано 04.08.2009, 10:16
#4
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


А нельзя ли было хоть какое-то соответствие с картинкой выложить и целиком, а то груз какой-то лишний....

Если хочешь лиспом, то добавь так
Код:
[Выделить все]
(set_tile "uchet_pdop" 0)
(mode_tile "choice1" 1)

(action_tile "uchet_pdop" "(setq uchetpdop (get_tile \"uchet_pdop\"))
                       (if (= uchetpdop \"1\")
                           (mode_tile \"choice1\" 0)
                           (mode_tile \"choice1\" 1))")
хотя если "choice1" - radio_column, то вроде не должно работать, а вот для radio_button - пожалуйста.

Но правильнее на мой взгляд здесь править DCL, а не lisp:

1) Для toggle значение value равно "0" (по умолчанию, галочки нет) или "1" (галочка стоит);
2)для radio_button есть свойство is_enabled = true (активно) или false (неактивно)
вот и всё:

Код:
[Выделить все]
: toggle {
            key = "uchet_pdop" ;
            value="0";
            label = "дополнительной нагрузки" ;
         }
      : row {
         :spacer{width=2;}
         : radio_column {
            fixed_width = true ;
            key = "choice1" ;
            : radio_button {
               label = "по ранее указанной линии" ;
               key = "star_pdop" ;
               value="1";
               is_enabled = false;
            }
            : radio_button {
               label = "указать новую линию" ;
               key = "new_pdop" ;
               is_enabled = false;
            }

         }
         :spacer{width=4;}
      }//row
Евгений А. вне форума  
 
Автор темы   Непрочитано 05.08.2009, 00:08
#5
paradoxvaha

проектирование противооползневых сооружений
 
Регистрация: 06.04.2007
Yalta
Сообщений: 50
<phrase 1=


Извините за несоответствие с картинкой, dcl на работе забыл, пришлось хоть какую то для описания проблемы вставить...


спасибо большое за код, всё заработало как надо, (правил dcl)!
paradoxvaha вне форума  
 
Непрочитано 22.10.2009, 17:47
#6
acyxou


 
Регистрация: 12.07.2008
Сообщений: 211


Мужики помогите с кодом...
Не могу разобраться почему не выставляются начальные настройки в DCL окне. И вообще понять бы где их надо выставлять: в *.lsp или в *.dcl?
Мне нужно чтоб в появившемся диалоговом окне по умолчанию был установлен формат "А3" с ориентацией "Альбомная". У меня никак не получается это сделать... я уже совсем запутался...что-то намудрил так что прога вообще перестала работать... голова уже квадратная

DCL:

Код:
[Выделить все]
ImportLayout : dialog {
  label = "Создание листа";
  : column {
      : list_box {key = "mylist";	label ="Формат";	multiple_select = false;	fixed_width_font = false;	//value = "3";
      }
      : radio_row 	{label = "Ориетация";	key = "orientation";
  
    	: radio_button {label = "Альбомная";	key = "landscape";	value = "1";
    	}
  	: radio_button {label = "Книжная";  	key = "portrait";	value = "0";
  	}
       			}
  	}
: row {
  : button {key = "ok";		label = "Создать";	is_tab_stop = true;	is_cancel = false;	is_default = true; 
  }
  : button {key = "cancel";	label = "Отмена";	is_tab_stop = true;	is_cancel = true;	is_default = false; 
  }
  }
  }
LSP:
Код:
[Выделить все]
;;;ImportLayout.LSP  by  Alex Cyxou
;;;
;;;
;;;Imports layout from template file (common DWG with configured layouts)
;;;
;;;
;;;CASE.LSP (Copyright  1991  Tony Tanzillo) was used to emulate the Common Lisp (case) function
;;;
;;;
(defun C:ImportLayout (/
		       intCmdEcho	; Integer of CMDEcho System Variable
		       intFiledia	; Integer of Filedia System Variable)
		       ImportLayout_dcl	; Dialog Definition
		       mylist		; List of paper formats
		       ddiag		; Dialog "OK" or "Cancel" result
		       paperOrientation	; Paper orientation: 1 for "album", 2 for "portrait"
		       lst_index	; Seq number of chosen item in "mylist"
		      )
;;;--- Prepare function to start
  (setq intCmdEcho (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (setq intFiledia (getvar "FILEDIA"))
  (setvar "FILEDIA" 0)
;;;--- Build a list of data
  (setq	mylist
	 '("А0"		      "А1"		 "А2"
	   "А3"		      "А4"		 "Нестандартный (914мм)"
	   "Нестандартный (610мм)"
	  )
  )
  (setq lst_index nil)
  (while (= lst_index nil)
;;;--- Load the dcl file  
    (setq ImportLayout_dcl (load_dialog "ImportLayout.dcl"))

;;;--- If no dialog definition was loaded - pop up alert 
    (if	(not (new_dialog "ImportLayout" ImportLayout_dcl))
      (progn
	(alert
	  "ImportLayout.dcl не найден или поврежден!\n\nПоместите файл в одну из папок, находящуюся\nв путях поиска (Support Files Search Path),\nи перезапустите программу."
	)
	(exit)
      )
    ) ;_ end of if

;;;--- Add the data to the list_box control
    (start_list "mylist" 3)
    (mapcar 'add_list mylist)
    (end_list)

;;;--- Set default choises
    ;(set_tile "mylist" "3")
    ;(set_tile "landscape" "1")

;;;--- If an action event occurs, do these functions
    (action_tile "mylist" "(setq lst_index (atoi $value)") ; List selection converted to seq number
					
    (action_tile "landscape" "(setq paperOrientation 1)") ; radio button
    (action_tile "portrait" "(setq paperOrientation 2)") ; radio button

    (action_tile "cancel" "(setq ddiag 1)(done_dialog)") ; Cancel button
					
    (action_tile "ok" "(setq ddiag 2)(done_dialog)") ; OK button

;;;--- Display the dialog box
    (start_dialog)

;;;--- If the cancel button was pressed - wtite message
    (if	(= ddiag 1)
      (progn
	(princ "\n \n ...Cоздание листа было отменено. \n ")
	(exit)
	)
    ) ;_ end of if

;;;--- If nothing was selected and pressed OK - pop up alert
    (if	(= lst_index nil)
      (alert "Ничего не выбрано!")
    ) ;_ end of if
  )

;;;--- If the "Ok" button was pressed load "ImportChosenLayout" function
  (if (= ddiag 2)
    (ImportChosenLayout paperOrientation lst_index)
  )

  (unload_dialog ImportLayout_dcl)

  (setvar "FILEDIA" intFiledia)
  (Setvar "CMDECHO" intCmdEcho)
  (princ)
) ;_ end of defun

;;; ------------ PROGRAM SUB-ROUTINES ------------
;;;-----------------------------------------------
;;; --------- SUB TO IMPORT CHOSEN LAYOUT --------

(defun ImportChosenLayout (paperOrientation
			    lst_index	      /
			    fileTemplate	; Teplate file for importing layouts from
			    layoutName_part1	; First part of layout name
			    layoutName_part2	; Second part of layout name
			    layoutName		; Layout name
			   )

;;; Define layoutName_part1 using Case function 
  (setq	layoutName_part1
	 (case lst_index
	       '((0 "А0 914мм HP500")
		 (1 "А1 610мм HP500")
		 (2 "А2 610мм HP500")
		 (3 "А3 HP5100")
		 (4 "А4 HP5100")
		 (5 "Нестандартный 914мм HP500")
		 (6 "Нестандартный 610мм HP500")
		)
	 )
  )
  
  ;;; Define layoutName_part2 using Case function 
  (setq	layoutName_part2
	 (case paperOrientation
	       '((1 "альбом")
		 (2 "книж")
		)
	 )
  )
    
;;; Merge layoutName_part1 and layoutName_part2 into layoutName
  (setq layoutName (strcat layoutName_part1 " " layoutName_part2))

;;; Find temlate and import layout
  (if (setq FileTemplate
	     (findfile
	       "Sheet (millimeters).dwt"
	     ) ;_ end of findfile
      ) ;_ end of setq
    (progn
      (command "_-layout"
	       "_template"
	       fileTemplate
	       layoutName
      ) ;_ end of command
    ) ;_ end of progn
    (alert
      "Не удалось создать лист т.к. файл шаблона 'Sheet (millimeters).dwt' не найден.
	\nУбедитесь что данный файл находится в папке C:\\AmcCAD\\AutoCAD2009\\Standards"
    ) ;_ end of alert
  ) ;_ end of if
)

;;; --------- CASE SUBS  ----------

(DEFUN case (value cases / clause)
  (COND	((SETQ clause (ASSOC value cases)) (do-clause clause))
	(T (case-aux cases))
  )
)


(DEFUN case-aux	(cases)
  (COND	((NOT cases) nil)
	((OR (AND (LISTP (CAAR cases)) (MEMBER value (CAAR cases)))
	     (AND (NOT (CDR cases)) (EQUAL T (CAAR cases)))
	 )
	 (do-clause (CAR cases))
	)
	(T (case-aux (CDR cases)))
  )
)


(DEFUN do-clause (clause)
  (let nil
       (COND ((CDR clause))
	     (T (LIST (QUOTE (CAR clause))))
       )
  )
)


(DEFUN let (bindings body)
  (EVAL
    (CONS (APPEND (LIST 'LAMBDA (MAPCAR 'CAR bindings)) body)
	  (MAPCAR 'CADR bindings)
    )
  )
)
З.Ы. Поторопился выкладывать прогу в соседней ветке... хотя иногда это помогает
__________________
Users are not stupid, they are busy.
acyxou вне форума  
 
Непрочитано 22.10.2009, 21:32
#7
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Подправил в части диалога "только чтобы работало", то есть без обработчиков, проверок и пр.
DCL (убрал параметры, которые по умолчанию какие надо, подправил малость):
Код:
[Выделить все]
ImportLayout :dialog {label="Создание листа";
  :column {
      :list_box {key="mylist"; label="Формат"; fixed_width_font=false;}
      :radio_row {label="Ориентация";
    	: radio_button {label="Альбомная"; key ="landscape"; value="1";}
  	: radio_button {label="Книжная"; key ="portrait"; value="0";}
      }//end of radio_row
  }//end of column
  :row {
  :ok_button {label="Создать";}
  :cancel_button {label="Отмена";}
  }//end of row
}//end of dialog importlayout
Лисп (выделил красным где "покопался"):
Код:
[Выделить все]
;;;ImportLayout.LSP  by  Alex Cyxou
;;;
;;;
;;;Imports layout from template file (common DWG with configured layouts)
;;;
;;;
;;;CASE.LSP (Copyright  1991  Tony Tanzillo) was used to emulate the Common Lisp (case) function
;;;
;;;
(defun C:ImportLayout (/
		       intCmdEcho	; Integer of CMDEcho System Variable
		       intFiledia	; Integer of Filedia System Variable)
		       ImportLayout_dcl	; Dialog Definition
		       mylist		; List of paper formats
		       ddiag		; Dialog "OK" or "Cancel" result
		       paperOrientation	; Paper orientation: 1 for "album", 2 for "portrait"
		       lst_index	; Seq number of chosen item in "mylist"
		      )
;;;--- Prepare function to start
  (setq intCmdEcho (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (setq intFiledia (getvar "FILEDIA"))
  (setvar "FILEDIA" 0)
;;;--- Build a list of data
  (setq	mylist
	 '("А0"		      "А1"		 "А2"
	   "А3"		      "А4"		 "Нестандартный (914мм)"
	   "Нестандартный (610мм)"
	  )
  )
(setq lst_index nil)
(while (not lst_index)
;;;--- Load the dcl file

  (if (< (setq ImportLayout_dcl (load_dialog "ImportLayout.dcl")) 0)
    (progn
      (alert
	(strcat
	  "Файл \"ImportLayout.dcl\" не найден! Поместите файл\n"
	  "в одну из папок, находящуюся в путях поиска\n"
	  "(Support Files Search Path), и перезапустите\n"
	  "программу."
	) ;_ end of strcat
      ) ;_ end of alert
      (exit)
    ) ;_ end of progn
  ) ;_ end of if

;;;--- If no dialog definition was loaded - pop up alert 
  (if (not (new_dialog "ImportLayout" ImportLayout_dcl))
    (progn
      (alert
	"Файл \"ImportLayout.dcl\" поврежден!\n"
      ) ;_ end of alert
      (exit)
    ) ;_ end of progn
  ) ;_ end of if

;;;--- Add the data to the list_box control
  (start_list "mylist")
  (mapcar 'add_list mylist)
  (end_list)

;;;--- Set default choises
  (set_tile "mylist" "3")
  (setq	lst_index 3
	paperOrientation 1
  ) ;_ end of setq

;;;--- If an action event occurs, do these functions
  (action_tile "mylist" "(setq lst_index (atoi $value))") ;_ List selection converted to seq number
  (action_tile "landscape" "(setq paperOrientation 1)") ;_ radio button
  (action_tile "portrait" "(setq paperOrientation 2)") ;_ radio button
  (action_tile
    "accept"
    "(setq ddiag 2)(done_dialog ImportLayout_dcl)"
  ) ;_ OK button
  (action_tile "cancel" "(setq ddiag 1)") ;_ Cancel button
;;;--- Display the dialog box
  (start_dialog)
  (unload_dialog ImportLayout_dcl)
;;;--- If the cancel button was pressed - wtite message
  (if (= ddiag 1)
    (progn
      (princ "\n \n ...Cоздание листа было отменено. \n ")
      (exit)
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of while


;;;--- If the "Ok" button was pressed load "ImportChosenLayout" function
  (if (= ddiag 2)
    (ImportChosenLayout paperOrientation lst_index)
  )

  

  (setvar "FILEDIA" intFiledia)
  (Setvar "CMDECHO" intCmdEcho)
  (princ)
) ;_ end of defun

;;; ------------ PROGRAM SUB-ROUTINES ------------
;;;-----------------------------------------------
;;; --------- SUB TO IMPORT CHOSEN LAYOUT --------

(defun ImportChosenLayout (paperOrientation
			    lst_index	      /
			    fileTemplate	; Teplate file for importing layouts from
			    layoutName_part1	; First part of layout name
			    layoutName_part2	; Second part of layout name
			    layoutName		; Layout name
			   )

;;; Define layoutName_part1 using Case function 
  (setq	layoutName_part1
	 (case lst_index
	       '((0 "А0 914мм HP500")
		 (1 "А1 610мм HP500")
		 (2 "А2 610мм HP500")
		 (3 "А3 HP5100")
		 (4 "А4 HP5100")
		 (5 "Нестандартный 914мм HP500")
		 (6 "Нестандартный 610мм HP500")
		)
	 )
  )
  
  ;;; Define layoutName_part2 using Case function 
  (setq	layoutName_part2
	 (case paperOrientation
	       '((1 "альбом")
		 (2 "книж")
		)
	 )
  )
    
;;; Merge layoutName_part1 and layoutName_part2 into layoutName
  (setq layoutName (strcat layoutName_part1 " " layoutName_part2))

;;; Find temlate and import layout
  (if (setq FileTemplate
	     (findfile
	       "Sheet (millimeters).dwt"
	     ) ;_ end of findfile
      ) ;_ end of setq
    (progn
      (command "_-layout"
	       "_template"
	       fileTemplate
	       layoutName
      ) ;_ end of command
    ) ;_ end of progn
    (alert
      "Не удалось создать лист т.к. файл шаблона 'Sheet (millimeters).dwt' не найден.
	\nУбедитесь что данный файл находится в папке C:\\AmcCAD\\AutoCAD2009\\Standards"
    ) ;_ end of alert
  ) ;_ end of if
)

;;; --------- CASE SUBS  ----------

(DEFUN case (value cases / clause)
  (COND	((SETQ clause (ASSOC value cases)) (do-clause clause))
	(T (case-aux cases))
  )
)


(DEFUN case-aux	(cases)
  (COND	((NOT cases) nil)
	((OR (AND (LISTP (CAAR cases)) (MEMBER value (CAAR cases)))
	     (AND (NOT (CDR cases)) (EQUAL T (CAAR cases)))
	 )
	 (do-clause (CAR cases))
	)
	(T (case-aux (CDR cases)))
  )
)


(DEFUN do-clause (clause)
  (let nil
       (COND ((CDR clause))
	     (T (LIST (QUOTE (CAR clause))))
       )
  )
)


(DEFUN let (bindings body)
  (EVAL
    (CONS (APPEND (LIST 'LAMBDA (MAPCAR 'CAR bindings)) body)
	  (MAPCAR 'CADR bindings)
    )
  )
)

Последний раз редактировалось Do$, 23.10.2009 в 08:41. Причина: "ориетация"
Do$ вне форума  
 
Непрочитано 23.10.2009, 09:38
#8
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Лисп не трогал, только DCL, этого тут достаточно:

Код:
[Выделить все]
ImportLayout
:dialog{label="Созданиелиста"; 
:column{
	:list_box{key="mylist"; label="Формат"; multiple_select=false; 
		list = "А0\nА1\nА2\nА3\nА4\nНестандартный (914мм)\nНестандартный (610мм)"; value="3"; }
:radio_row{label="Ориентация"; key="orientation"; value="landscape"; 
	:radio_button{label="Альбомная"; key="landscape"; }
	:radio_button{label="Книжная"; key="portrait"; }
	}
	}
:row{
	:button{key="ok"; label="Создать"; is_tab_stop=true; is_default=true; }
	:button{key="cancel"; label="Отмена"; is_tab_stop=true; is_cancel=true; }
	}
}
Евгений А. вне форума  
 
Непрочитано 23.10.2009, 09:49
#9
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Евгений А. Посмотреть сообщение
Лисп не трогал, только DCL, этого тут достаточно
Как минимум, одно исправление в лиспе надо сделать, строка:
Код:
[Выделить все]
(action_tile "mylist" "(setq lst_index (atoi $value)") ; List selection converted to seq number
скобки не хватает закрывающей в строке.
И еще, как же, не трогая лисп, присвоить начальные значения переменным:
lst_index=3 и paperOrientation=1?
Do$ вне форума  
 
Непрочитано 23.10.2009, 10:03
#10
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


я в смысле, что неохото лезть в код проги, а на вопрос "Не могу разобраться почему не выставляются начальные настройки в DCL окне. И вообще понять бы где их надо выставлять: в *.lsp или в *.dcl?" вроде и этого хватит.
а action можно тоже всудуть в dcl, тут как говорится - дело вкуса!
Код:
[Выделить все]
ImportLayout
:dialog{label="Созданиелиста"; 
:column{
	:list_box{key="mylist"; label="Формат"; multiple_select=false; 
		list = "А0\nА1\nА2\nА3\nА4\nНестандартный (914мм)\nНестандартный (610мм)"; value="3";
		action = "(setq lst_index $value)";}
:radio_row{label="Ориентация"; key="orientation"; value="landscape"; 
	:radio_button{label="Альбомная"; key="landscape"; }
	:radio_button{label="Книжная"; key="portrait"; }
	}
	}
:row{
	:button{key="ok"; label="Создать"; is_tab_stop=true; is_cancel=false; is_default=true; }
	:button{key="cancel"; label="Отмена"; is_tab_stop=true; is_cancel=true; is_default=false; }
	}
}
Евгений А. вне форума  
 
Непрочитано 23.10.2009, 10:44
#11
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Евгений А. Посмотреть сообщение
я в смысле, что неохото лезть в код проги, а на вопрос "Не могу разобраться почему не выставляются начальные настройки в DCL окне. И вообще понять бы где их надо выставлять: в *.lsp или в *.dcl?" вроде и этого хватит.
а action можно тоже всудуть в dcl, тут как говорится - дело вкуса!
Я не про action, я про setq. В исправленном лиспе я добавил вот что:
Код:
[Выделить все]
  (setq	lst_index 3
	paperOrientation 1
  ) ;_ end of setq
action - это конечно здорово, а если меня устраивают начальные параметры в диалоговом окне? Загружается диалог, я жму "Создать", а диалоговое окно не закрывается - в коде цикл на перезапуск диалога, если не присвоено значение переменной lst_index. И так я буду жать на эту кнопку, пока не поменяю значение в диалоговом списке - только тогда сработает action и присвоит значение lst_index. Я нажму "создать" и диалог закроется - Ура! Но не тут то было... Радиокнопки диалога я тоже не трогал - значит action на них тоже не запускал, значение переменной paperOrientation будет какое? Правильно, nil. В итоге в каком то месте программа выдаст ошибку, а точнее вот тут:
Код:
[Выделить все]
(setq layoutName (strcat layoutName_part1 " " layoutName_part2))
Дословно (для английской версии):
Код:
[Выделить все]
; error: bad argument type: stringp nil
Так что это не "дело вкуса" совсем!
Кстати... цикл на перезапуск диалога там не нужен. Ну да и ладно, не мешает

Последний раз редактировалось Do$, 23.10.2009 в 11:08.
Do$ вне форума  
 
Непрочитано 23.10.2009, 12:16
#12
acyxou


 
Регистрация: 12.07.2008
Сообщений: 211


Ребята, спасибо, что откликнулись...
Do$, код работает! Спасибо большое! В вашем подходе значения по умолчанию назначаются в лиспе.... Всегда ли нужно придерживаться этого подхода? или только в данном случае?
Евгений А., спасибо за dcl. В учебном материале по которому я начал его осваивать не было информации о дефолтовых значениях контролсов (хотя, возможно, эта уже выходит за рамки начального уровня знаний о dcl ) В любом случае, программа ни с моим первоначальным лиспом, ни с модифицированным Do$овским в купе с вашим dcl не работает должным образом...
__________________
Users are not stupid, they are busy.
acyxou вне форума  
 
Непрочитано 23.10.2009, 13:06
#13
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от acyxou Посмотреть сообщение
В вашем подходе значения по умолчанию назначаются в лиспе.... Всегда ли нужно придерживаться этого подхода?
Кому как нравится. Мне удобнее в .lsp файле. Часто бывает, что одной и той же формой диалога пользуешься для разных программ, и чтобы не переписывать каждый раз, все начальные параметры прописываю в *.lsp. Стоп... Не все же параметры заданы в lsp! Радиокнопка "по умолчанию" в .dcl указана.
И еще, насколько я помню, если сделать описание и там и там, то приоритет будет за тем, что написано в .lsp файле

Последний раз редактировалось Do$, 23.10.2009 в 13:12.
Do$ вне форума  
 
Непрочитано 23.10.2009, 14:43
#14
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Do$, заклевал ты меня совсем! Я же не говорю, что лисп с обработчиком писать не надо, просто начальные(!) параметры можно задать и в dcl (тут дело вкуса!).
acyxou - лучше и удобнее всё прописывать в лиспе, но саму конструкцию программы я бы посоветовал такую: (только диалог и оработчик)

Код:
[Выделить все]
;;     (C:ImportLayout)
(defun C:ImportLayout (/	       restore_var     old_var
		       msg	       mylist	       ImportLayout_dcl
		       paperOrientation		       lst_index
		       )
  (setq	mylist	    '("А0"		 "А1"		    "А2"
		      "А3"		 "А4"
		      "Нестандартный (914мм)"
		      "Нестандартный (610мм)"
		      )
	restore_var '("FILEDIA" "CMDECHO")
	old_var	    (mapcar 'getvar restore_var)
	)
  (and (setq msg "ImportLayout.dcl не найден или поврежден!")
       (not
	 (MINUSP	   
	   (setq ImportLayout_dcl (load_dialog "ImportLayout.dcl"))
	   )
	 )
       (new_dialog "ImportLayout"
		   ImportLayout_dcl
		   "(action-ImportLayout_dcl $key $Value)"
		   )
       (progn (start_list "mylist" 3)
	      (mapcar 'add_list mylist)
	      (end_list)
	      (SET_TILE "mylist" "3")
	      )
       (if (= 1 (start_dialog))
	 (progn	(setq msg nil)
		(test_ImportChosenLayout paperOrientation lst_index)
		)
	 (setq msg "\n \n ...Cоздание листа было отменено. \n ")
	 )
       )
  (unload_dialog ImportLayout_dcl)
  (if msg
    (alert msg)
    )
  (mapcar 'setvar restore_var old_var)
  (princ)
  )

(defun action-ImportLayout_dcl (key Value /)
  (cond	((= key "cancel") (DONE_DIALOG 0))
	((= key "ok")
	 (progn	(setq lst_index	       (nth (atoi (GET_TILE "mylist")) mylist)
		      paperOrientation (GET_TILE "orientation")
		      )
		(DONE_DIALOG 1)
		)
	 )
	)
  )
(defun test_ImportChosenLayout (paperOrientation lst_index /)
  (alert (strcat "запущена ImportChosenLayout\n"
		 lst_index
		 "\n"
		 paperOrientation
		 )
	 )
  )
Евгений А. вне форума  
 
Непрочитано 23.10.2009, 15:21
#15
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Красиво! У меня аж мозг маленько завернулся
Если я правильно понял, то при любом действии в диалоге функции action-ImportLayout_dcl передаются $key и $value того элемента, над которым действие выполнили и функция выполняется.
Удобно с той точки зрения, что в action и action_tile LISP-выражения надо писать в виде строки - следить, чтобы везде стояли \ где надо и пр.
Возмем на вооружение!
Do$ вне форума  
 
Непрочитано 23.10.2009, 15:40
#16
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


я создаю обычно такую функцию-обработчик:
Код:
[Выделить все]
"(action-fun  $key $value $data $reason $x $y)"
Вот её на вооружение и бери!
Евгений А. вне форума  
 
Непрочитано 23.10.2009, 16:18
#17
acyxou


 
Регистрация: 12.07.2008
Сообщений: 211


2 Евгений А.
Спасибо, я ни хрена не понял!!!
__________________
Users are not stupid, they are busy.
acyxou вне форума  
 
Непрочитано 23.10.2009, 18:23
#18
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


читайте справкутам все есть...
gomer вне форума  
 
Непрочитано 29.03.2012, 13:03
#19
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Здравствуйте.
Подскажите плз по лисп коду.
Пример:
Код:
[Выделить все]
 test: dialog {label="test v1.5";
 :radio_row {label="pop";
 :radio_button {label="tor";key="tor";value="1";}
 :radio_button {label="rot";key="rot";value="0";}
 }
......
}
Что необходимо прописать в Lisp-коде ( не самого начало), когда происходит выбор по radio (Пример: если выбрано tor, то строится одно, если выбрано rot, то строится другое)

спс.
Pavel_GP вне форума  
 
Непрочитано 30.03.2012, 08:18
#20
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
( не самого начало)
Не понял смысла этого пояснения.
Нужен весь код обработки диалога? Или уже есть какие-то наработки?
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > установка начальных параметров в диалоговом окне (.dcl)

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема со шрифтом в диалоговом окне Autocad 2009 ait AutoCAD 1 25.12.2008 14:51
вопросики в диалоговом окне snk AutoCAD 3 15.03.2007 09:54
большие отступы в диалоговом окне Александер Программирование 12 05.06.2006 14:58