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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Запрос у пользователя списком

Запрос у пользователя списком

Ответ
Поиск в этой теме
Непрочитано 20.12.2015, 22:29
Запрос у пользователя списком
granit201z
 
Проектировщик
 
Камышин
Регистрация: 17.08.2014
Сообщений: 118

Здравствуйте. Подскажите пожалуйста как организовать запрос данных от пользователя целым списком. То есть не какого-то 1-го ключевого слова, а сразу десятка таких слов. То есть для примера такой запрос: "Выберите группы с которыми будем работать дальше: ". И должен выпасть список наподобие:

Гр.1
Гр.2
Гр.3
...
Гр.47
Гр.48

Пользователь за раз должен выбрать из этого списка столько групп - сколько ему захочется (от одной до всех сорока восьми), причем необязательно подряд. Например он хочет выбрать с 3 по 16 и с 32 по 39, или вообще через одну

Какими средствами это осуществляется?

P.S. Если есть какие нибудь готовые куски кода, позволяющие приблизиться к выполнению этой задачи - буду весьма благодарен
Просмотров: 6766
 
Автор темы   Непрочитано 21.12.2015, 15:48
#21
granit201z

Проектировщик
 
Регистрация: 17.08.2014
Камышин
Сообщений: 118


Цитата:
granit201z, глянь тут еще http://web2.iadfw.net/terrycad/Tutor...m#MyMultiLists
там есть такие строки:

(set_tile "Title" " My Multi Lists")
(set_tile_list "List1" List1@ Value1$);*Included
(set_tile_list "List2" List2@ Value2$);*Included

у меня лисп вылетает и пишет:

Цитата:
Команда: MYMULTILISTS

MyMultiLists; ошибка: no function definition: SET_TILE_LIST
то есть насколько я понимаю (set_tile) он глотает, а на (set_tile_list) давится. А что это за функции такие? Насколько я понимаю это какие-то пользовательские функции? или нет?

----- добавлено через ~25 мин. -----
хотя нет не пользовательские. в учебнике Полищука нашел описание функции set_tile. А вот с функцией set_tile_list по прежнему неясно что за функция и почему на ней lisp выдает ошибку
granit201z вне форума  
 
Непрочитано 21.12.2015, 19:10
#22
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,040


Вы на dwg.ru - где все разжевывают и в ротик кладут - совсем разучились информацию искать) Если это неопределенная функция, то забиваем в поисковик "(defun set_tile_list" - чтобы получить описание функции, а не ссылку на нее в коде
Сергей812 вне форума  
 
Автор темы   Непрочитано 21.12.2015, 19:21
#23
granit201z

Проектировщик
 
Регистрация: 17.08.2014
Камышин
Сообщений: 118


все разобрался. Это действительно пользовательская функция.

На стороне LISP код будет выглядеть следующим образом


Код:
[Выделить все]
 ;----------------------------------------------------------------------------------------------------------
; c:MyMultiLists - Dialog for list_boxes with single and multi select examples
; Syntax: MyMultiLists
;----------------------------------------------------------------------------------------------------------
(defun c:MyMultiLists (/ Dcl_Id% List1@ List2@ Return# Value1$ Value2$)

;-------------------------------------------------------------------------------
; set_tile_list - Sets a dialog popup_list or list_box tile to a list
; Arguments: 3
;   KeyName$ = Key name of tile
;   ListName@ = The list to set in tile
;   Selected = An item in the ListNames@ or a list of items selected
; Syntax: (set_tile_list "TileName" '("A" "B" "C") "B")
;         (set_tile_list "TileName" '("A" "B" "C") '("A" "C"))
; Returns: Sets Selected items in dialog popup_list or list_box tiles.
;-------------------------------------------------------------------------------
(defun set_tile_list (KeyName$ ListName@ Selected / Item)
  (start_list KeyName$ 3)
  (mapcar 'add_list ListName@)
  (end_list)
  (foreach Item (if (listp Selected) Selected (list Selected))
   (if (member Item ListName@)
     (set_tile KeyName$ (itoa (- (length ListName@) (length (member Item ListName@)))))
   );if
  );foreach
);defun set_tile_list
;-------------------------------------------------------------------------------

;-------------------------------------------------------------------------------
; set_multilist_value - Sets SentVar$ to list of the items selected in SentList$
; Arguments: 2
;   SentList$ = String of the list variable name
;   SentVar$ = String of the variable name
; Syntax: (set_multilist_value "ListName" "Variable")
;-------------------------------------------------------------------------------
(defun set_multilist_value (SentList$ SentVar$ / SubList@)
  (setq SubList@ (eval (read SentList$)))
  (set (read SentVar$) (list (nth (atoi $value) SubList@)))
  (setq $value (substr $value (+ (strlen (itoa (atoi $value))) 2)))
  (while (/= $value "")
    (set (read SentVar$) (append (eval (read SentVar$))
      (list (nth (atoi $value) SubList@)))
    );set
    (setq $value (substr $value (+ (strlen (itoa (atoi $value))) 2)))
  );while
);defun set_multilist_value
;-------------------------------------------------------------------------------

;-------------------------------------------------------------------------------
; set_list_value - Sets SentVar$ to the item selected in SentList$
; Arguments: 2
;   SentList$ = String of the list variable name
;   SentVar$ = String of the variable name
; Syntax: (set_list_value "ListName" "Variable")
;-------------------------------------------------------------------------------
(defun set_list_value (SentList$ SentVar$ / SaveVar$ SubList@)
  (setq SubList@ (eval (read SentList$)))
  (setq SaveVar$ (eval (read SentVar$)))
  (set (read SentVar$) (nth (atoi $value) SubList@))
  (if (= (eval (read SentVar$)) "")
    (progn
      (set (read SentVar$) SaveVar$)
      (set_tile_list $key SubList@ SaveVar$)
    );progn
  );if
  (princ)
);defun set_list_value
;-------------------------------------------------------------------------------

  (princ "\nMyMultiLists")(princ)

  ; Set Default Variables

  (if (not *MyMultiLists@);Unique global variable name to store dialog info
    (setq *MyMultiLists@ (list nil "" ""))
  );if

  (setq Value1$ (nth 1 *MyMultiLists@)
        Value2$ (nth 2 *MyMultiLists@)
        List1@ (list "Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday")
        List2@ (list "January" "February" "March" "April" "May" "June" "July" "August" 
                     "September" "October" "November" "December")
  );setq


  ; Load Dialog

  (setq Dcl_Id% (load_dialog "D:/For_AutoCAD/My_LISP/Эксперименты с прогой/СИНХРОНИЗАЦИЯ/ДЕКАБРЬ/MLL.dcl"))
  (new_dialog "MyMultiLists" Dcl_Id%)


  ; Set Dialog Initial Settings

  (set_tile "Title" " My Multi Lists")
  (set_tile_list "List1" List1@ Value1$);*Included
  (set_tile_list "List2" List2@ Value2$);*Included


  ; Dialog Actions

  (action_tile "List1" "(set_list_value \"List1@\" \"Value1$\")");*Included
  (action_tile "List2" "(set_multilist_value \"List2@\" \"Value2$\")");*Included
  (setq Return# (start_dialog))


  ; Unload Dialog

  (unload_dialog Dcl_Id%)
  (setq *MyMultiLists@ (list nil Value1$ Value2$))

  (princ *MyMultiLists@)
);defun c:MyMultiLists

а на стороне DCL


Код:
[Выделить все]
//---------------------------------------------------------------------------------------------------------
// MyMultiLists
//---------------------------------------------------------------------------------------------------------
MyMultiLists : dialog {
  key = "Title";
  label = "";
  : boxed_column {
    label = "Select an Item";
    : list_box {
      key = "List1";//Value1$ from lsp file
      height = 6.27;
      fixed_height = true;
      width = 32.92;
      fixed_width = true;
    }
    spacer;
  }
  : boxed_column {
    label = "Multi Select Items";
    : list_box {
      multiple_select = true;
      key = "List2";//Value2$ from lsp file
      height = 6.27;
      fixed_height = true;
      width = 32.92;
      fixed_width = true;
    }
    spacer;
  }
  spacer;
  ok_only;
}//MyMultiLists

Протестировал. Работает как мне и хотелось. Дальше можно ковыряться уже в этом коде, затачивая под свои задачи. Всем большое спасибо за оказанную помощь
granit201z вне форума  
 
Непрочитано 22.12.2015, 08:38
#24
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Тема 2013 года. Как создать свой выпадающий список? Там есть готовая функция. Строит диалог динамически.
__________________
Как использовать код на Лиспе читаем здесь
VVA на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Запрос у пользователя списком

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос имени редактировавшего при закрытии dwg файла Raznouh AutoCAD 16 02.11.2015 05:02
Не работают модули под правами ограниченного пользователя ich-frau Программирование 6 28.09.2012 10:13
Запрос об изученности геологических условий земельного участка janita Основания и фундаменты 8 08.08.2010 22:06
Пропал запрос на сохранение чертежа Nikolay 2 AutoCAD 25 07.03.2009 21:19
Сообщение об ошибке... или анимация для пользователя. KAI Программирование 13 17.03.2008 11:58