Тема: Подсветка изображения в диалоговом окне

Допустим я создал диалоговое окно с элементами image_button.
Далее хочу сделать так, чтбы выбранное изображение подсвечивалось.
пишу

(action_tile
   "1"
   "(if (= 1 $reason)(mode_tile \"1\" 4))"
 )

т.е при выборе мышкой изображение подсвечивается.
Проблема в том, что при выборе другого изображения, подсветка с первого не убирается.
как быть?

Re: Подсветка изображения в диалоговом окне

> serzh
Наверное программно снимать подсветку с первого. smile

Re: Подсветка изображения в диалоговом окне

> Александр Ривилис
ну да програмно. я и пробовал, но как?
как отседить, что я выбрал другое поле?
для элемента image_button переменная $reasson может принимать два значения 1 или 4. 1- значит изображение выбрано
а как поймать момент, когда пользователь выходит из поля? я ведь даже не могу проверить подсвечено изображение или нет

Re: Подсветка изображения в диалоговом окне

Я вижу это приблизительно так:
1) Для удобства использовать не (action_tile ...) а нормальную callback-функцию для всего диалогового окна.
2) При создании диалогового окна подсвечиваешь какой-то image_tile, который "по-умолчанию" и запоминаешь его имя (номер).
3) Если выбран другой image_tile, то со старого снимаем подсветку (его имя мы помним), а новый подсвечиваем и запоминаем его имя (номер).
Это все если я правильно понял задачу.

Re: Подсветка изображения в диалоговом окне

> Александр Ривилис
так я и знал, но думал есть проще варианты
благодарю за помощь

Re: Подсветка изображения в диалоговом окне

> serzh
smile К сожалению средства DCL достаточно (читай - "слишком") ограничены, так что проще не получается...

Re: Подсветка изображения в диалоговом окне

> [Re:] Александр Ривилис
А можете привести пример "..callback-функции для всего диалогового окна"? Как можно поймать и обработать событие типа "в каком-то компоненте диалогового окна что-то произошло" (т.е. задача дальнейшей идентификации компонента не ставится, а важен сам факт события)?

Re: Подсветка изображения в диалоговом окне

> Пастух
У меня к сожалению нет коротенького примера, а специально создавать нет времени. Поэтому постараюсь объяснить "на пальцах".
Чтобы назначить одну общую функцию для всего диалогового окна нужно при вызове функции new_dialog задать третий параметр, который и указывает имя callback-функции для всего диалога:

(new_dialog "TESTDLG" dcl_id [b]"(*callback_function*)"[/b])

Ну а callback-функция может быть любой. В ней нужно будет анализировать $key, $value, $reason и возможно $data:

(defun *callback_function* ( / s)
  (alert (strcat
      "$key="     $key    "\n" ;; наименование поля
      "$value="   $value  "\n" ;; значение поля
      "$data="    $data   "\n" ;; данные связанные с этим полем
      "$reason="  (itoa $reason) "\n" ;; причина вызова callback-функции
  ))
  ;;
  ;; А дальше действия в зависимости от
  ;; полученных данных...
  ;;
)

В этом случае отпадает необходимость использовать action_tile и появляется возможность обработки достаточно сложных диалоговых окон в одном месте. К сожалению в самом AutoCAD не нашел ни одного примера такого использования callback-функции для диалогвых окон...

Re: Подсветка изображения в диалоговом окне

> [Re:] Александр Ривилис
Спасибо за уточнение. Эта документированная возможность просто выпала по какой-то причине из моего поля зрения. Страницу 329 у Полещука конечно же читал, но почему-то не проявил должного внимания к третьему параметру функции new_dialog. А штука-то, пожалуй, полезная.

Re: Подсветка изображения в диалоговом окне

> Пастух
В моих lisp-программах используются только такие функции, т.е. я никогда не использую action_tile. Когда-то еще в AutoCAD R12 понял, что если требуется достаточно сложная обработка, связанная со значениями других полей, то записать ее в строковый параметр этой функции - это подвиг, на который я не способен. А если в эту строку необходимо внести двойные кавычки, то даже самому прочесть такую программу...

Re: Подсветка изображения в диалоговом окне

Да, но замечу справедливости ради, что можно определить функцию обработки "в стороне", привычным образом - через defun, а в action_tile осуществлять её вызов. Именно так я и поступал всегда за исключением самых простых действий. Область видимости таких функций стараюсь ограничивать некоторой головной функцией управления д/окном.

Re: Подсветка изображения в диалоговом окне

Я давал решение этого вопроса в теме 47.

Re: Подсветка изображения в диалоговом окне

GNL пишет:

Я давал решение этого вопроса в теме 47.

Это где? Ссылочку можно?

Re: Подсветка изображения в диалоговом окне

https://www.caduser.ru/forum/topic7681.html