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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > DCL: связывание выпадающих списков

DCL: связывание выпадающих списков

Ответ
Поиск в этой теме
Непрочитано 22.02.2011, 00:34 #1
DCL: связывание выпадающих списков
Nitrogenium
 
инженер
 
Санкт-Петербург
Регистрация: 02.03.2010
Сообщений: 69

В диалоговом окне имеются два выпадающих списка. Вот такие скажем:
A B C D E и B C D E F
надо сделать, чтобы пользователь выбрал значение из первого списка, а во втором списке изменилось содержимое таким образом:
Выбираем в 1ом, например, C, 2ой список становится D E F.
Потом во втором выбираем D - 1ый список становится A B C и так далее.
Другими словами, чтобы нельзя было выбрать перекрывающиеся значения. Написал вот, а как сделать, чтобы при выборе из 1го списка 2ой не слетал и наоборот - не знаю

Вложения
Тип файла: rar LSP.rar (1.8 Кб, 51 просмотров)

Просмотров: 3150
 
Непрочитано 22.02.2011, 18:46
1 | #2
gomer

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


Даю только идею... за работоспособность не ручаюсь!!! суть в фильтрации с помощью функции member
Код:
[Выделить все]
(setq spisok1 (reverse (cdr (reverse spisok))))
(setq spisok2 (cdr spisok))

(member (car (member (atoi $value) spisok1)) spisok2)
(reverse (member (car (member (atoi $value) spisok2)) (reverse spisok1)))
gomer вне форума  
 
Автор темы   Непрочитано 22.02.2011, 22:53
#3
Nitrogenium

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


Мда, что-то негусто
Nitrogenium вне форума  
 
Непрочитано 22.02.2011, 23:42
1 | #4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Можно и так...
Код:
[Выделить все]
 (defun test (/ fun_change-value file handle lst1 lst2 dcl_id dcl_res)

  (defun fun_change-value (key value / pos lst)
    (setq lst (if (= key "lst1")
                lst2
                lst1
                ) ;_ end of if
          ) ;_ end of setq
    (start_list (if (= key "lst1")
                  "lst2"
                  "lst1"
                  ) ;_ end of if
                3
                ) ;_ end of start_list
    (mapcar 'add_list
            (vl-remove-if
              (function
                (lambda (x)
                  (= (strcase x)
                     (strcase (nth (atoi value)
                                   (if (= key "lst1")
                                     lst1
                                     lst2
                                     ) ;_ end of if
                                   ) ;_ end of nth
                              ) ;_ end of strcase
                     ) ;_ end of =
                  ) ;_ end of lambda
                ) ;_ end of function
              lst
              ) ;_ end of vl-remove-if
            ) ;_ end of mapcar
    (end_list)
    ) ;_ end of defun

  (setq file   (strcat (vl-string-right-trim "\\" (getenv "TEMP")) "\\dlg.dcl")
        lst1   '("A" "B" "C" "D" "E" "F")
        lst2   '("1" "C" "E" "G" "H")
        handle (open file "w")
        ) ;_ end of setq
  (foreach item '("dlg:dialog {label=\"test\";"                 ":popup_list{label=\"list 1\";key=\"lst1\";}"
                  ":popup_list{label=\"list 2\";key=\"lst2\";}" "ok_cancel;"
                  "}"
                  )
    (write-line item handle)
    ) ;_ end of foreach
  (close handle)
  (setq dcl_id (load_dialog file))
  (new_dialog "dlg" dcl_id)
  (start_list "lst1" 3)
  (mapcar 'add_list lst1)
  (end_list)
  (start_list "lst2" 3)
  (mapcar 'add_list lst2)
  (end_list)
  (action_tile "lst1" "(fun_change-value $key $value)")
  (action_tile "lst2" "(fun_change-value $key $value)")
  (action_tile "accept" "(done_dialog 1)")
  (action_tile "cancel" "(done_dialog 0)")
  (setq dcl_res (start_dialog))
  (unload_dialog dcl_id)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.02.2011, 06:45
1 | #5
Disney

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


За основу взят код Алексея + идея gomer
Код:
[Выделить все]
 (defun test (/	     file    handle  lst1
	     lst2    dcl_id  dcl_res end
	     start
	    )
  (setq	file   (strcat (vl-string-right-trim
			 "\\"
			 (getenv "TEMP")
		       )
		       "\\dlg.dcl"
	       )
	lst    '("A" "B" "C" "D" "E" "F")
	lst1   (reverse (cdr (reverse lst)))
	lst2   (cdr lst)
	start  0
	end    (1- (length lst2))
	handle (open file "w")
  ) ;_ end of setq
  (foreach item
	   '("dlg:dialog {label=\"test\";"
	     ":popup_list{label=\"list 1\";key=\"lst1\";}"
	     ":popup_list{label=\"list 2\";key=\"lst2\";}"
	     "ok_cancel;"
	     "}"
	    )
    (write-line item handle)
  ) ;_ end of foreach
  (close handle)
  (setq dcl_id (load_dialog file))
  (new_dialog "dlg" dcl_id)
  (start_list "lst1" 3)
  (mapcar 'add_list lst1)
  (end_list)
  (set_tile "list1" (itoa start))
  (start_list "lst2" 3)
  (mapcar 'add_list lst2)
  (end_list)
  (set_tile "lst2" (itoa end))
  (action_tile
    "lst1"
    (vl-prin1-to-string
      (quote
	(progn
	  (setq value (atoi $value))
	  (setq	lst2
		 (cdr (member (nth value lst1) lst)
		 )
	  )
	  (start_list "lst2" 3)
	  (mapcar 'add_list lst2)
	  (end_list)
	  (setq	end   (- end (- value start))
		start value
	  )
	  (set_tile "lst2" (itoa end))
	)
      )
    )
  )
  (action_tile
    "lst2"
    (vl-prin1-to-string
      (quote
	(progn
	  (setq value (atoi $value))
	  (setq
	    lst1 (reverse
		   (cdr	(member	(nth value lst2)
				(reverse lst)
			)
		   )
		 )
	  )
	  (start_list "lst1" 3)
	  (mapcar 'add_list lst1)
	  (end_list)
	  (setq	end value
	  )
	  (set_tile "lst1" (itoa start))
	)
      )
    )

  )
  (action_tile "accept" "(done_dialog 1)")
  (action_tile "cancel" "(done_dialog 0)")
  (setq dcl_res (start_dialog))
  (unload_dialog dcl_id)
) ;_ end of defun
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 23.02.2011, 13:06
#6
Nitrogenium

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


Спасибо! Теперь попробую разобраться
Nitrogenium вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > DCL: связывание выпадающих списков



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод содержимого списков вместе с сылками [N.S] Программирование 1 19.12.2007 14:49