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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как передать функции (getkword) Список ключевых слов из списка?

Как передать функции (getkword) Список ключевых слов из списка?

Ответ
Поиск в этой теме
Непрочитано 17.09.2008, 15:53 #1
Как передать функции (getkword) Список ключевых слов из списка?
Kostinok
 
Инженер-электрик
 
Калининград
Регистрация: 13.10.2007
Сообщений: 151

Здравствуйте,
Прошу проконсультировать в следующем вопросе:
Совершенно коряво переделав содранную у VVA функцию GetDynamicBlockPropertyList, которая возвращает список всех свойст динамического блока в виде списка, я получаю список фозможных свойств видимости динамического блока по метке.

Код:
[Выделить все]
; Возвращает список свойства "vis" динамического блока в виде списка
; Сорвано с программы VVA GetDynamicBlockPropertyList
(defun GetDynamicBlockPropertyList (obj / lstProperties PrName)
 (if (and (vlax-property-available-p obj "IsDynamicBlock")
          (= (vla-get-IsDynamicBlock obj) :vlax-true)
          (setq lstProperties (vlax-safearray->list 
                                           (variant-value 
                                            (vla-GetDynamicBlockProperties obj)))))
   (progn
     (setq PrName (mapcar '(lambda (x) (vla-get-propertyname X)) lstProperties))
     (mapcar
       'vlax-variant-value
       (vlax-safearray->list
	 (nth
	   (vl-position "vis" PrName)
	   (mapcar '(lambda (x) (variant-value (vla-get-allowedvalues X))) lstProperties)
	   )
	 )
       );; Значения параметра "vis" списком
     )))
Так как я собираюсь работать только с динамическими блоками у которых Visibility Label "vis", то после выполнения, функция выдает мне список всех возможных значений, к примеру:

Код:
[Выделить все]
("ARS/R - 2x18" "ARS/R - 2x36" "ARS/R - 4x18" "ARS/R - 4x36" "PAC - 1x36" "PAC - 2x36" "RTX - 1x36" "RTX - 2x36" "BAT - 1x18" "BAT - 2x18" "BAT - 2x36")
Поскольку конечная цель это вставить динамический блок с указанием параметра, причем, что бы перед тем как вставить вылетело окошечко и спросило, "Какой тип светильника будем вставлять:", надо теперь передать полученный список - функции (getkword), да еще и задействовать функцию (initget).

А вот как это сделать ума не приложу...

Ну а потом благодоря функции _kpblc-change-dyn-block-prop от kpblcа поменять параметр на выбранный ранее (из окошечка).
__________________
Можно сопротивляться вторжению армий, вторжению идей сопротивляться невозможно. /В. Гюго/
Просмотров: 11335
 
Непрочитано 17.09.2008, 18:46
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Я когда-то (не очень давно) своял следующию функцию:
Код:
[Выделить все]
(defun menu (name lvar); Выводит запрос name и выбор вариантов lvar, возвращает выбранный
(initget (apply 'strcat (mapcar '(lambda (x) (strcat x " ")) lvar)))
(getkword (strcat "\n " name "[" (apply 'strcat (mapcar '(lambda (x) (strcat x "/")) lvar)) "]"))
);end of menu
То есть в твоем варианте вызов выглядеть будет так:
(menu "Выберите тип светильников" (list "СВ1" "СВ2" "СВ3"))
Из названий надо убрать пробелы - об них getkword спотыкаеться будет - выбирать по первому слову.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 17.09.2008, 23:24
#3
Кулик Алексей aka kpblc
Moderator

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


Если бы не пробелы и слеши... Если сделаешь автозамену, то добиться результата не сложно:
Код:
[Выделить все]
(defun _dwgru-getkword (msg init-bit init-list default / dwgru-error-catch)
                       ;|
*    Замена стандартного getkword
*    Параметры вызова:
	msg		показываемое сообщение
	init-bit	значение бита для (initget). nil -> 0
	init-list	список текстовых значений, подставляемых в initget и
			getkword. nil -> ничего специально не запрашивается.
	default		значение по умолчанию. nil -> возвращает nil
*    Примеры вызова:
(_dwgru-getkword "Выберите привязку" nil '("Центр" "Середина" "Конечная" "Ближайшая") nil)
(_dwgru-getkword "Выберите привязку" nil '("Центр" "Середина" "Конечная" "Ближайшая") "Ближайшая")
(_dwgru-getkword
  "Выберите значение"
  1
  '("ARS\\R:2x18"     "ARS\\R:2x36"     "ARS\\R:4x18"     "ARS\\R:4x36"
    "PAC:1x36"       "PAC:2x36"       "RTX:1x36"       "RTX:2x36"
    "BAT:1x18"       "BAT:2x18"       "BAT:2x36"
    )
  nil
  ) ;_ end of _dwgru-getkword
|;

;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * Ловушка ошибок
;;; *
;;; * 13/11/2007 Версия 0001. Сергей Зуев   (ShaggyDoc)
;;; ************************************************************************
  (defun dwgru-error-catch (protected_expression
                            on_error_expression
                            /
                            catch_error_result
                            )
;;;Назначение:

;;; Защита участка кода (выражения) от  потенциальной сбойной ситуации с
;;; предотвращением нештатного прерывания программы  и возможностью обработки
;;; сбойной ситуации.
    ;|
Аналог конструкции  try ...  except ... end; в Delphi.
Вызов:
(dwgru-error-catch   protected_expression on_error_expression)

Аргументы:
protected_expression - выражение, которое надо защитить от возможных сбойных
			ситуаций
on_error_expression - выражение, выполняющееся при возникновении ошибки, или
			nil, если ничего не требуется делать.

Возвращаемое значение:
  Результат выполнения protected_expression - при отсутствии ошибок или
результат выполнения on_error_expression - при возникновении ошибки.

Особенности:
  Разумное использование может полностью предотвратить возникновение ситуаций,
приводящих к вызову функции *error*.
  Не рекомендуется использование вложенных функций dwgru-error-catch.

Пример:
Организация ввода точки без возможности прерывания клавишей ESC.
(defun test001 (/ result)
 (while (not
  (dwgru-error-catch
   (function
    (lambda ()
     (setq result (getpoint "\nТочка (прерывание блокировано):"))
    ) ;_ end of lambda
   ) ;_ end of function
   (function
    (lambda (msg)
     (princ (strcat "\nТЕСТ прерывания - " msg))
     nil
    ) ;_ end of lambda
   ) ;_ end of function
  ) ;_ end of ru-error-catch
 ) ;_ end of while
 ) 
 result
)

|;
    (setq catch_error_result
           (vl-catch-all-apply protected_expression)
          ) ;_ end of setq
    (if (and (vl-catch-all-error-p catch_error_result)
             on_error_expression
             ) ;_ end of and
      (apply on_error_expression
             (list (vl-catch-all-error-message catch_error_result))
             ) ;_ end of apply
      catch_error_result
      ) ;_ end of if
    ) ;_ end of defun

  (dwgru-error-catch
    (function
      (lambda (/ fun_conv-lst-to-string)

        (defun fun_conv-lst-to-string (lst)
          (strcat (car lst)
                  (apply (function strcat)
                         (mapcar (function (lambda (x)
                                             (strcat " " x)
                                             ) ;_ end of lambda
                                           ) ;_ end of function
                                 (cdr lst)
                                 ) ;_ end of mapcar
                         ) ;_ end of apply
                  ) ;_ end of strcat
          ) ;_ end of defun

        (cond
          ((and init-list init-bit)
           (initget init-bit (fun_conv-lst-to-string init-list))
           )
          ((and init-list (not init-bit))
           (initget (fun_conv-lst-to-string init-list))
           )
          ((and init-bit (not init-list))
           (initget init-bit)
           )
          ) ;_ end of cond
        (setq res
               (cond
                 ((getkword
                    (strcat
                      msg
                      "["
                      (car init-list)
                      (apply (function strcat)
                             (mapcar (function (lambda (x) (strcat "/" x)))
                                     (cdr init-list)
                                     ) ;_ end of mapcar
                             ) ;_ end of apply
                      "] <"
                      (cond
                        (default (vl-princ-to-string default))
                        (t "Отмена")
                        ) ;_ end of cond
                      "> : "
                      ) ;_ end of strcat
                    ) ;_ end of GETKWORD
                  )
                 (t default)
                 ) ;_ end of cond
              ) ;_ end of setq
        ) ;_ end of lambda
      ) ;_ end of function
    '(lambda (x)
       (princ (strcat "\n*** Ошибка _dwgru-getkword : " x))
       (setq res nil)
       ) ;_ end of lambda
    ) ;_ end of dwgru-error-catch
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.04.2012, 22:08
#4
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Что нужно правильно сделать, чтобы данная конструкция корректно заработала
Код:
[Выделить все]
(initget 1 "Балкон Бассейн Будуар Ванная Ванная-спа Веранда Винный погреб Второй свет")
    (setq aa     
     (getkword "\nВыберите помещение [балкон/бассейн/будуар/ванная/ванная-спа/веранда/винный погреб/второй свет]: " 
     ) 
    )
?
Далее aa вставляется в текст.
В частности интересует:
1. Как делать пункты из двух слов (например, "Винный погреб")? Подчеркивание, неразрывный пробел - не обрабатываются, пишет "Неправильное ключевое слово". С тире обрабатывается, но его (тире) надо перед вставкой в текст заменить на пробел, а в например "Ванная-спа" должно тире остаться
2. Может, есть функция, которая спросит не КЛЮЧЕВЫЕ, а ЛЮБЫЕ слова и (словосочетания), чтоб выбрать из выпадающего меню и записать в переменную, потому как нельзя выбрать "Ванная"
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Если бы не пробелы и слеши... Если сделаешь автозамену, то добиться результата не сложно:
Может тут мое решение? А как ее сделать?
skkkk вне форума  
 
Непрочитано 02.04.2012, 22:16
#5
Кулик Алексей aka kpblc
Moderator

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


Примерно так:
Код:
[Выделить все]
 (defun test (/ res)
  (initget "Балкон баСсейн БУдуар Ванная вАнная ВЕранда ВИнный ВТорой")
  (if (= (type (setq res
                      (vl-catch-all-apply
                        (function
                          (lambda ()
                            (getkword
                              "\nВыберите помещение [Балкон/баСсейн/БУдуар/Ванная/вАнная-спа/ВЕранда/ВИнный погреб/ВТорой свет] <Отмена> : "
                              ) ;_ end of getkword
                            ) ;_ end of lambda
                          ) ;_ end of function
                        ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'str
         ) ;_ end of =
    res
    ) ;_ end of if
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.04.2012, 22:26
#6
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Теряет второе слово... Возвращает в текст только "ВИнный"
И Вот эту пляску регистров не обойти, да? Ну чтоб все было как положено: первые заглавные (но не ключевые), остальные строчные?
Пробовал getstring с аргументом t, но выпадающее меню не выскакивает, надо нажать вниз, - тогда выпадает. И никак не пойму, что отправляется в переменную? Если в initget объявляю варианты - выходят они, а не объявляю - используется список из getkword

Последний раз редактировалось skkkk, 02.04.2012 в 22:40.
skkkk вне форума  
 
Непрочитано 02.04.2012, 23:12
1 | #7
Кулик Алексей aka kpblc
Moderator

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


Можно сказать, что "пляска регистров" - особенность поведения getkword. Если сильно хочется иметь полное словосочетание, можешь попробовать:
Код:
[Выделить все]
 (defun _getkword (msg lst / _kpblc-conv-string-to-list _kpblc-conv-list-to-string sublst res)
                       ;|
*    Получение ключевого слова
*    Параметры вызова:
  msg : отображаемое сообщение до выбора ключевого слова
  lst : список ключевых слов
*    Примеры вызова:
(_getkword "Выберите помещение" '("Балкон" "баСсейн" "БУдуар" "Ванная" "вАнная-спа" "ВЕранда" "ВИнный погреб" "ВТорой свет"))
|;

  (defun _kpblc-conv-list-to-string (lst sep)
                                    ;|
*    Преобразование списка в строку
*    Параметры вызова:
	lst	обрабатываемй список
	sep	разделитель. nil -> " "
|;
    (if (and lst
             (setq sep (if sep
                         sep
                         " "
                         ) ;_ end of if
                   ) ;_ end of setq
             ) ;_ end of and
      (strcat (car lst)
              (apply (function strcat)
                     (mapcar
                       (function
                         (lambda (x)
                           (strcat sep x)
                           ) ;_ end of lambda
                         ) ;_ end of function
                       (cdr lst)
                       ) ;_ end of mapcar
                     ) ;_ end of apply
              ) ;_ end of strcat
      ""
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-conv-string-to-list (string separator / i)
                                    ;|
*    Функция разбора строки. Возвращает список либо точечную пару.
*    Параметры вызова:
*	string		разбираемая строка
*	separator	символ, используемый в качестве разделителя частей
*    Примеры вызова:
(_kpblc-conv-string-to-list "1;2;3;4;5;6" ";")	;'(1 2 3 4 5 6)
(_kpblc-conv-string-to-list "1;2" ";")		;'(1 2)
*    За основу взяты уроки Евгения Елпанова по рекурсиям
|;
    (cond
      ((= string "") nil)
      ((vl-string-search separator string)
       ((lambda (/ pos res)
          (while (setq pos (vl-string-search separator string))
            (setq res    (cons (substr string 1 pos) res)
                  string (substr string (+ (strlen separator) 1 pos))
                  ) ;_ end of setq
            ) ;_ end of while
          (reverse (cons string res))
          ) ;_ end of lambda
        )
       )
      (t (list string))
      ) ;_ end of cond
    ) ;_ end of defun

  (initget (_kpblc-conv-list-to-string
             (setq sublst (mapcar
                            (function
                              (lambda (x)
                                (car (_kpblc-conv-string-to-list x " "))
                                ) ;_ end of lambda
                              ) ;_ end of function
                            lst
                            ) ;_ end of mapcar
                   ) ;_ end of mapcar
             " "
             ) ;_ end of _kpblc-conv-list-to-string
           ) ;_ end of initget
  (if (= (type (setq res (vl-catch-all-apply
                           (function
                             (lambda ()
                               (getkword (strcat "\n"
                                                 (vl-string-trim " \n\t" msg)
                                                 " ["
                                                 (_kpblc-conv-list-to-string lst "/")
                                                 "] <Отмена> : "
                                                 ) ;_ end of strcat
                                         ) ;_ end of getkword
                               ) ;_ end of lambda
                             ) ;_ end of function
                           ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'str
         ) ;_ end of =
    (nth (vl-position res sublst) lst)
    ) ;_ end of if
  ) ;_ end of defun
Одно "но" - разница регистров должна присутствовать в первом слове.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.04.2012, 19:05
1 | #8
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Глянь еще вот эту тему.
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Непрочитано 07.04.2012, 03:47
#9
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Спасибо, Алексей!
Объясню, к чему пришел. Сразу скажу, что стремился максимально избежать танцев регистра, поскольку волновала эстетическая составляющая выпадающего списка в алфавитном порядке. Хотелось просто (без ключевых слов, в алфавитном порядке) выбрать из списка слово или словосочетание и присвоить его значение переменной.
В initget прописал слова с заглавной буквы, а в словосочетаниях (два и более слов через пробел) - первое слово с заглавной, второе - с маленькой (в таком виде, как они должны вставляться в примитив - текст). В getkword в квадратных скобках повторил список значений-слов из initget, но всё строчными буквами (маленькими), КРОМЕ словосочетаний, где каждое слово начинается с большой буквы (совершенной эстетики не вышло, "ключеватость" слов тут отнюдь НЕ сыграла на руку). Вместо пробелов в словосочетаниях использовал "неразрывный пробел" (Ctrl+Shift+Пробел), потом заменял его на обычный пробел посредством vl-string-translate. В итоге у меня в выпадающем списке все слова в малом регистре, а в словосочетаниях - первая буква каждого слова - заглавная. Терпимо.
Pastor, спасибо, её я уже видел
skkkk вне форума  
 
Непрочитано 07.04.2012, 12:58
#10
gomer

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


getkword - апофигей лаконичности, германские языки такие по определению, а вот словянам, приходится туго, иной менталитет. По сути ключевые слова запроса должны быть однословными, а слова начинаться с разных букв... Если вариантов много, то лучше делать диалоговое окно
gomer вне форума  
 
Непрочитано 07.04.2012, 13:04
#11
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от gomer Посмотреть сообщение
лучше делать диалоговое окно
Как? DCL? Можешь поподробнее информацию дать?
skkkk вне форума  
 
Непрочитано 07.04.2012, 13:37
#12
gomer

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


да, это самое простое... вариантов много: можно кнопками, можно списком, можно радиоколонкой...
gomer вне форума  
 
Непрочитано 07.04.2012, 18:48
#13
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Offtop: Ты, как всегда краток и талантлив Где информация? Хххде дичь?!(с)
"Авто- и Вижл- в среде КАД" Полещука подойдет? Слышал тут, что кратковат у него раздел именно DCL...
skkkk вне форума  
 
Непрочитано 07.04.2012, 19:16
#14
gomer

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Слышал тут, что кратковат у него раздел именно DCL...
стр. 253,254,259
едиственное, я бы вместо ok_only использовал бы cancel_button, то есть выбор опции нажатием на радиокнопку, отмена - нажатием на кнопку отмена, так экономится один клик.
хотя пропадающее под радиокнопкой или при выборе из списка окно тож не айс

Последний раз редактировалось gomer, 07.04.2012 в 19:31.
gomer вне форума  
 
Непрочитано 07.04.2012, 21:15
#15
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


если диалог не хочешь, то мож пробнуть это http://www.theswamp.org/index.php?to...7746#msg377746
Vov.Ka вне форума  
 
Непрочитано 07.04.2012, 22:37
#16
VVA

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


А если диалог, то посмотреть функцию loc:dwgru-get-user-dcl
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.04.2012, 06:28
#17
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Опробовал разные варианты. Ох уж мне этот getkword!! Не пойму, что ему надо: то nil вернет, то сработает, то ему танцы регистра подавай. Наплевался я с ним вдоволь и пошел в DCL. Распробовал функцию VVA отсюда. Размещу-ка на всякий тут, а то ссылки часто летят
Код:
[Выделить все]
;_ *********** MYDCL **************************************************************
;_ * Запрос варианта выбора через диалоговое окно                                 *
;_ * Диалоговое окно (dcl) формируется программно                                 *
;_ * Программно же и удаляется                                         *           *
;_ * zagl - заголовок окна                                              *          *
;_ * info-list - список строковых значение                                        *
;_ * Возвращает выбранную строку или nil, если нажата клавиша отмена              *
;_ * Пример                                            *                           *
;_ * (mydcl "Пример использования" '("Вариант1" "Вариант2" "Вариант3" "Вариант4"))*
;_ ********************************************************************************
(defun mydcl (zagl info-list / fl ret dcl_id)
    (vl-load-com)
    (if (null zagl)(setq zagl "Выбор"))
    (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
    (setq ret (open fl "w"))
    (mapcar '(lambda (x) (write-line x ret))
            (list "mip_msg : dialog { "
                  (strcat "label=\"" zagl "\";")
                  " :list_box {"
                  "alignment=top ;"
                  "width=51 ;"
                  (if (> (length info-list) 26)
                      "height= 26 ;"
                      (strcat "height= " (itoa (+ 3 (length info-list))) ";")
                  ) ;_ end of if
                  "is_tab_stop = false ;"
                  "key = \"info\";}"
                  "ok_cancel;}"
            ) ;_ end of list
    ) ;_ end of mapcar
    (setq ret (close ret))
    (if (setq dcl_id (load_dialog fl))
        (if (new_dialog "mip_msg" dcl_id)
            (progn
                (start_list "info")
                (mapcar 'add_list info-list)
                (end_list)
                (set_tile "info" "0")
                (setq ret (car info-list))
                (action_tile "info" "(setq ret (nth (atoi $value) info-list))")
                (action_tile "cancel" "(progn(setq ret nil)(done_dialog 0))")
                (action_tile "accept" "(done_dialog 1)")
                (start_dialog)
            ) ;_ end of progn
        ) ;_ end of if
    ) ;_ end of if
    (unload_dialog dcl_id)
    (vl-file-delete fl)
    ret
) ;_ end of defun
Попробовал и loc:dwgru-get-user-dcl , но разницы не заметил пока.
Но у getkword есть один большой плюс - исключается нажатие ОК.
Цитата:
Сообщение от gomer Посмотреть сообщение
едиственное, я бы вместо ok_only использовал бы cancel_button, то есть выбор опции нажатием на радиокнопку, отмена - нажатием на кнопку отмена, так экономится один клик.
Как это воплотить?
Цитата:
Сообщение от gomer Посмотреть сообщение
хотя пропадающее под радиокнопкой или при выборе из списка окно тож не айс
Не совсем понял, о чем речь. Поясни, gomer, пожалуйста?
И еще: как в случае отмены прекратить выполнение функции? А то она дальше продолжается...
skkkk вне форума  
 
Непрочитано 26.04.2012, 08:20
#18
gomer

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Поясни
каждому элементу диалога можно назначить действие, в том числе и его закрытие, чем и пользуются программисты. Но я считаю, что выбор должен быть осознанным и в большинстве диалогов закрытие должно осуществляться с помощью кнопки accept из ok_cancel. Просто, потому, что возврат к диалогу при неверном "тыке" организовывать весьма накладно

Цитата:
Сообщение от skkkk Посмотреть сообщение
И еще: как в случае отмены прекратить выполнение функции? А то она дальше продолжается...
для начала четко представить алгоритм, а потом посмотреть функции if, cond
gomer вне форума  
 
Непрочитано 26.04.2012, 12:19
#19
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


>gomer
Впитал, благодарю

Цитата:
Сообщение от gomer Посмотреть сообщение
каждому элементу диалога можно назначить действие
Как назначить элементам list_box действие "accept"? Хочется попробовать, вдруг удобно?

Цитата:
Сообщение от gomer Посмотреть сообщение
возврат к диалогу при неверном "тыке" организовывать весьма накладно
Отчего же? _undo или _erase? в зависимости от контекста и что проще, а потом повторный вызов.

Цитата:
Сообщение от gomer Посмотреть сообщение
для начала четко представить алгоритм, а потом посмотреть функции if, cond
Куда ж четче? В теле функции идет запрос значения пользователя. Если значение выбрано, функция продолжается, если нет - выход. Кроме (exit) и (quit) есть варианты? Вообще это уже другая тема... Не говоря уж о DCL.
skkkk вне форума  
 
Непрочитано 26.04.2012, 16:48
#20
gomer

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Как назначить элементам list_box действие "accept"? Хочется попробовать, вдруг удобно?
с помощью action_tile

Цитата:
Сообщение от skkkk Посмотреть сообщение
Отчего же? _undo или _erase? в зависимости от контекста и что проще, а потом повторный вызов.
не в этом дело, после закрытия программа будет просить у вас точку (неважно что), но вы же забудете сделать возврат в диалог и вы же сделаете так чтоб нужно было нажать как минимум 2 кнопки чтоб снова появился диалог а эта целая секунда времени... Вот выглядит смешно, но когда запариваешься, повторяешь ошибку на автомате, тут уж не до смеха, одно раздражение... надеюсь понятно выразился.


Цитата:
Сообщение от skkkk Посмотреть сообщение
Куда ж четче? В теле функции идет запрос значения пользователя. Если значение выбрано, функция продолжается, если нет - выход.
так, да не так... Если данных нету,то выходим, иначе - продолжаем... Вроде одно и тоже, но читать такое поприятнее
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как передать функции (getkword) Список ключевых слов из списка?

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать список в строку ivspec Программирование 11 18.03.2015 10:18
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Как пeренумеровать список в Sheet Set автоматом?? Startrek AutoCAD 1 20.05.2006 09:54
чтение данных из файла Александер Программирование 6 08.09.2005 10:24