Тема: Какой лисповой командой показать/спрятать Toolbar?

Есть пользовательская менюшка. В ней описано падающее меню и одна панель инструментов.
Хочется, чтобы в падающем меню был пункт, по которому можно было бы показать/спрятать мой тулбар.

Re: Какой лисповой командой показать/спрятать Toolbar?

> Родин Алексей
Посмотри тут, решение практически твоей задачи:
http://dwg.ru/forum/viewtopic.php?t=93&highlight=

Re: Какой лисповой командой показать/спрятать Toolbar?

Можно еще заглянуть сюда:
https://www.caduser.ru/forum/topic9932.html
может будет полезно

Re: Какой лисповой командой показать/спрятать Toolbar?

> Pilot
Спасибо. То, что надо!

Re: Какой лисповой командой показать/спрятать Toolbar?

Здравствуйте, уважаемые.
У меня такой вопрос:
Из пользовательского падающего меню включаю свою панель инструментов. При этом меню отмечается "галочкой" (!.). Кликаю снова меню - закрывается панель, "галочка" гаснет.
А существует ли, принципиальная возможность отслеживания состояния видимости панели, если я закрываю ее не через меню, а "крестиком, например, и далее, передачи этого состояния в меню для управления "галочкой".
И второй вопрос (покороче).
Можно ли прочитать с помощью DIESEL глобальную переменную LISP.
Спасибо.

Re: Какой лисповой командой показать/спрятать Toolbar?

Ребят, помогите, пожалуйста!
Уперся в проблему,очень хочется решить. Может быть ObjectARX?. Как-то ведь это делается!
Как я понимаю, задача сводится к следующему:
1. либо необходимо иметь возможность из DIESEL (прямо в надписи этого пункта меню) запустить LISP функцию, которая уже запросит состояние панели. :(((
2. иметь возможность обработки события появления меню и в этом событии запрашивать состояние панели и передавать в надпись меню через переменную (USERS1). :(((
3. наконец иметь возможность обработки событий открытия и закрытия самой панели. :(((
Пока положение безвыходное...

Re: Какой лисповой командой показать/спрятать Toolbar?

> peter-n
Насчет открытия / скрытия тулбара: В.Свет, "AutoCAD - язык макрокоманд и создание кнопок", стр. 52:

^C^C_.-toolbar;TB_Name;_hide;

Скроет тулбар с именем TB_Name

^C^C_.-toolbar;TB_Name;_show;

Покажет ее.
Насчет чтения переменной: можно.

Re: Какой лисповой командой показать/спрятать Toolbar?

> kpblc
Спасибо за отклик!
1. Да, я так и делаю. Проблема в том, чтобы перед заголовком пункта меню в нужный момент появился знак '!.', это еще до запуска макроса.
2. Если можно, то какой функцией? $(getvar,LISPGLOBAL) выдает ошибку.

Re: Какой лисповой командой показать/спрятать Toolbar?

> peter-n
А что, LISPGLOBAL есть системная переменная? Через (getvar) же можно получать только системные переменные и все.
У меня в автозагрузке стоит лиспик, создающий глобальную переменную, например, *kpblc-activedoc*. В меню идет такое:

^C^C^P(if (not *kpblc-activedoc*) (load "loader.lsp"));<Вызываемая функция с параметрами>;

Т.е. идет простая проверка заполненности переменной. Или вот, например:

^C^C^P(setq _cecolor_ (getvar "cecolor") _celweight_ (getvar "celweight"));(mapcar 'setvar '("cecolor" "celweight") '("bylayer" "bylayer"));_.line;\\;(mapcar 'setvar '("cecolor" "celweight") (list _cecolor_ _celweight));(setq _cecolor_ nil _celweight_ nil);

Здесь сразу создаются глобальные переменные _cecolor_ и _celweight_, в них записываются текущие значения системных переменных, потом выполняется команда, а потом производится восстановление системных переменных и обнуление глобальных. Говорю сразу - код на рабочесть не проверял, я-то такие вещи лиспом делаю...

Re: Какой лисповой командой показать/спрятать Toolbar?

> kpblc
LISPGLOBAL - я имел ввиду лишь пример, т.е. глобальная переменная LISP.
В Вашем примере чтобы записать или прочитать *kpblc-activedoc* нужно поставить "loader.lsp" в автозагрузку или выполнить макрос (кликнуть пункт меню) т.е. запустить пользователем какие-то действия.
В этом случае чтение и запись переменной ведется средствами LISP.
DIESEL позволяет не кликая (а именно: то, что в скобках [...]) получать чтение/изменение данных - но не всех! А LISP в DIESEL загнать, или связать их как-то у меня не получилось.
Вот, примерно, так:

[$(if,$(getvar,USERS1),!.)My_Panel]^C^C_.-toolbar;TB_My_Panel;$(if,$(getvar,USERS1),_hide,_show);

После закрытия панели не через макрос, связь с USERS1, а значит и со знаком '!.', теряется. К тому же, USERS1 задействуется на весь сеанс работы acad.

Re: Какой лисповой командой показать/спрятать Toolbar?

да! и еще надо добавить в код изменение USERS1.

Re: Какой лисповой командой показать/спрятать Toolbar?

Стоп-стоп-стоп... Чтобы прочитать *kpblc-activedoc*, ничего грузить не надо. Производится обращение к глобальной пользовательской переменной (но не системной переменной када), и в зависимости от ее значения выполняются (или не выполняются) некоторые действия.
Насчет USER*-переменных. Во-первых, их особо широко не поиспользуешь, особенно если есть еще какие-то дополнения - они сами могут к этим переменным обращаться. Во-вторых, USERS1-5 хранятся только в текущем окне. Т.е. закрытие файла и повторное открытие его приведет к обнулению этих переменных. Так что на них рассчитывать я б не стал.
Дальше. Если стоит задача именно скрыть / показать Toolbar, то я б все равно сделал лисп, который и проверял бы это дело в момент запуска файла и в зависимости от данных внутри этого файла (хоть от любой переменной, значение которой хранится в файле, к примеру) показывает или скрывает toolbar. Честно говоря, toolbar показывается и скрывается, по-моему, не просто так. Значит, пользователь должен чего-то сделать, чтобы изменилось состояние toolbar'a. А раз так, то можно это дело отследить.

Re: Какой лисповой командой показать/спрятать Toolbar?

Ура, я нашел родственную душу!
Конечно,

toolbar показывается и скрывается... не просто так

Но как отследить (1) изменение видимости панели, или, на худой конец, (2) отследить появление меню?
А дальше все так:
В момент запуска файла, LISP проверяет состояние панели (через свойство visible или из реестра) и записывает данные в USERS1 (это нужно для передачи данных в DIESEL, [$(if,$(getvar,USERS1),!.)My_Panel]
с глобальной переменной у меня не заработал). При проишествии событий (1) или (2) запрашивается состояние панели и пишется в USERS1. После закрытия файла хранить в ней ничего не будем.
Без (1) или (2) это только фантазии...