DCL: динамическое изменение цвета элемета image
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > DCL: динамическое изменение цвета элемета image

DCL: динамическое изменение цвета элемета image

Ответ
Поиск в этой теме
Непрочитано 02.02.2011, 10:41 #1
DCL: динамическое изменение цвета элемета image
Nitrogenium
 
инженер
 
Санкт-Петербург
Регистрация: 02.03.2010
Сообщений: 69

Подскажите, как можно сделать диалоговое окно, в котором цвет image менялся бы в зависимости от выбранного значения в выпадающем списке popup_list (этот список представляет собой результат выполнения предварительной LISP-программы - содержит только целые неповторяющиеся числа от 1 до 255) То есть выбираем например 2 в списке, image становится желтым, выбираем 15 - цвет меняется на 15.
Просмотров: 3417
 
Непрочитано 02.02.2011, 11:13
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Можно. Смотри функцию fill_image
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 02.02.2011, 11:26
#3
Nitrogenium

инженер
 
Регистрация: 02.03.2010
Санкт-Петербург
Сообщений: 69
<phrase 1=


Код:
[Выделить все]
(defun ch_cl (/ nc)
	(setq nc (get_tile "pl_numcol"))
	(start_image "im_obr")
	(fill_image 0 0 200 100 (atoi nc))
	(end_image)
)
Это часть LISP-кода
Код:
[Выделить все]
dial:dialog
{label="Настройка названий";
	:column
	{label="";
		:popup_list{label="Номер цвета"; key="pl_numcol";}
		:edit_box{label="Название"; key="ebx_name";}
		:edit_box{label="Сокращение"; key="ebx_abbr";}
		:button{label="Сохранить"; key="bt_save";}
	}
	spacer_1;
	:column
	{label="Образец цвета"; height=4; width=5;
		:image{key="im_obr"; width=3; height=2;}
	}
	ok_cancel;
}
А это DCL.
в чем тут ошибка? вроде никаких наворотов нет
Nitrogenium вне форума  
 
Непрочитано 02.02.2011, 12:11
#4
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


В чем ошибка не видя полного lisp кода сказать трудно. Вот так вроде все работает

Код:
[Выделить все]
 
(action_tile "pl_numcol"
      (strcat "(start_image \"im_obr\")"
	      "(fill_image 0 0 200 100 (1+ (atoi $value)))"
	      "(end_image)"
	      )
      )
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 02.02.2011, 12:55
#5
Nitrogenium

инженер
 
Регистрация: 02.03.2010
Санкт-Петербург
Сообщений: 69
<phrase 1=


спасибо!
Правда работает не совсем верно. Например, такой список (1 2 5 87 182 199)
Когда выбираем какой-нибудь 182 цвет результат получается не тот
Код:
[Выделить все]
;;;(load "C:\\LSP\\Dialog") полилинии должны быть в слое Layer001
(vl-load-com)
(setq actdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq obj1 (vla-get-ModelSpace actdoc))
(defun C:dialog (/ allpoly lennab j obj ncolor)
	;||;
	(setq allpoly (ssget "_X" (list (cons 0 "LWPOLYLINE") (cons 8 "Layer001"))));набор полилиний (всех)
	(setq lennab (sslength allpoly))
	(setq j -1 spis nil)
	(repeat lennab
		(setq j (1+ j))
		(setq obj (vlax-ename->vla-object (ssname allpoly j)))
		(setq spis (cons (vla-get-Color obj) spis))
	)
	(setq ncolor (length (vl-sort spis '<)));общее число цветов
	(setq spiscolor (vl-sort spis '<));список цветов сортированый
	(setq k -1 spisstrcolor nil)
	(repeat ncolor
		(setq k (1+ k))
		(setq str (itoa (nth k spiscolor)))
		(setq spisstrcolor (cons str spisstrcolor))
	)
	(setq spisstrcolor (reverse spisstrcolor)); Вот этот список
	
	
	;||;
	(if (< (setq dcl_id (load_dialog "C:\\LSP\\dial.dcl")) 0)
		(exit)
	)
	(if (not (new_dialog "dial" dcl_id))
		(exit)
	)
	(start_list "pl_numcol")
	(mapcar 'add_list spisstrcolor)
	(end_list)
	;||;
	(action_tile "pl_numcol"
	    (strcat "(start_image \"im_obr\")"
	          "(fill_image 0 0 200 100 (1+ (atoi $value)))"
	          "(end_image)"
	    )
	)
	
	;||;
	(start_dialog)
	(unload_dialog dcl_id)
	(princ)
)
Nitrogenium вне форума  
 
Непрочитано 02.02.2011, 13:29
1 | #6
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Код:
[Выделить все]
(action_tile
  "pl_numcol"
  (strcat
    "(start_image \"im_obr\")"
    "(fill_image
      0
      0
      200
      100
      (atoi (nth (atoi $value) spisstrcolor))
    )"
    "(end_image)"
  )
)
__________________
Почему все вдруг становятся умными, когда уже не надо?

Последний раз редактировалось Disney, 02.02.2011 в 13:34.
Disney вне форума  
 
Автор темы   Непрочитано 02.02.2011, 14:32
#7
Nitrogenium

инженер
 
Регистрация: 02.03.2010
Санкт-Петербург
Сообщений: 69
<phrase 1=


Спасибо! Вот этот код работает верно!
Nitrogenium вне форума  
 
Непрочитано 02.02.2011, 15:35
2 | #8
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Хотелось бы добавить, в dcl есть недокументированный элемент :swatch, пример использования:
Код:
[Выделить все]
:swatch{key="s0";color=-15;height=1;}
он отображает маленький квадратик с заливкой цветом. Размер квадрата - примерно на один символ текста, достаточно для отображения цвета. Элемент поддерживает клик по нему и его удобно переопределять по цвету из программы.

Осталось сказать, что элемент поддерживается всеми версиями акада, по крайней мере, мной используется с 2002 версии...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 02.02.2011, 16:25
#9
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от Nitrogenium Посмотреть сообщение
спасибо!
Правда работает не совсем верно. Например, такой список (1 2 5 87 182 199)
Когда выбираем какой-нибудь 182 цвет результат получается не тот
Так оно и должно быть, потому что функция get_tile или переменная действия $value для списка возвращает не текст выбранного элемента, а возвращается строка с номером выбранного элемента, поэтому необходимо хранить список всех значений по и номеру, полученному get_tile или $value извлекать нужное значение из списка.
Я писал код на скоро, для примера как при выборе из списка менять цвет элемента окна dcl
Disney, в своём коды как раз извлекает из списка spisstrcolor нужный цвет по номеру полученному (atoi $value)
__________________
cadtools
TararykovDG вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > DCL: динамическое изменение цвета элемета image



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение цвета слоя при переходе из модели в лист milamu AutoCAD 32 09.07.2022 00:20
Изменение цвета блока непосредственно на чертеже Zinjvi AutoCAD 5 02.05.2009 20:33
Изменение цвета M-Text заданного "напрямую". Mihailovich AutoCAD 1 23.08.2006 18:10
Как бы сделать динамическое изменение значения площади? Grinzaid Динамические блоки 8 02.08.2004 18:02