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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно вкл/выкл видимость кнопок в строке режимов?

Как программно вкл/выкл видимость кнопок в строке режимов?

Ответ
Поиск в этой теме
Непрочитано 26.05.2008, 10:20 #1
Как программно вкл/выкл видимость кнопок в строке режимов?
Makswell
 
Инженер-строитель
 
Киров
Регистрация: 15.08.2007
Сообщений: 2,204

Кнопки ШАГ, СЕТКА, ОРТО и т.д....
Видимость этих кнопок можно отключить, нажав на маленький черный треугольник справа внизу (см картинку). А как это можно сделать программно?

Миниатюры
Нажмите на изображение для увеличения
Название: index_cr.png
Просмотров: 150
Размер:	13.0 Кб
ID:	6804  

Просмотров: 5405
 
Непрочитано 27.05.2008, 04:02
#2
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


При помощи системных переменных, например:
(setvar "GRIDMODE" 0); или 1
(setvar "ORTHOMODE" 0); или 1
и т.д.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Автор темы   Непрочитано 27.05.2008, 07:20
#3
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Этим способом кнопки ставятся в соостояние нажата/ не нажата. А нужно получить доступ к видимости этих кнопок на экране. Т.е. убрать их совсем с дисплея или поставить обратно.

ЗЫ или даже добавить новую кнопку, как это сделано в VetCAD'е (добавлена кнопка масштабов).
Makswell вне форума  
 
Непрочитано 27.05.2008, 07:54
#4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Makswell Посмотреть сообщение
Этим способом кнопки ставятся в соостояние нажата/ не нажата. А нужно получить доступ к видимости этих кнопок на экране. Т.е. убрать их совсем с дисплея или поставить обратно.

ЗЫ или даже добавить новую кнопку, как это сделано в VetCAD'е (добавлена кнопка масштабов).
ObjectARX + Win32
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 27.05.2008, 07:59
#5
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Александр Ривилис, а лиспом никак?
Makswell вне форума  
 
Непрочитано 27.05.2008, 09:07
#6
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Через LISP можно добавить собственные кнопки, в строку. Для этого надо использовать AxAcadStatusBarButton.dll от http://www.manusoft.com/

Сам LISP, естественно, ничего не может добавить или убавить. Но он может обратиться к COM-объекту AcadStatusBarButton.Button и на LISP можно прицепить к созданной кнопке свои функции. Да и то на свой риск - некоторые версии рушили AutoCAD. Версия 4.30 вроде нормально работает, включая 2008ю

А работать со StatusBar для спрятывания кнопок можно только, как написал Александр Ривилис. Наверное, можно сделать и функцию или COM-объект для использования в LISP. Но порочную идею программно прятать стандартные кнопки вряд ли стоит осуществлять. А вот действительно ненужные иконки можно спрятать и без диалога - (setvar "TRAYICONS" 0)
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 27.05.2008, 11:25
#7
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


В том то и дело, что прятать я ничего не хотел. Наоборот. Просто у меня периодически сама прячется кнопка ЛИСТ/МОДЕЛЬ (также и снимается галочка в меню строки состояния). Хотелось бы это как-то исправить.
Т.к. у меня кроме VetCAD'a ничего серьёзного не поставлено, думаю что это происходит из-за его фишки с кнопкой масштабов.
А уже потом у меня фантазия разыгралась. Думаю, сделали ведь кнопку, может и мне тоже что-нибудь такое замутить?

Но вижу, не судьба. Скачал AcadStatButton (кстати вот ссылка: http://www.manusoft.com/Software/Fre...StatButton.zip) - и понял, что мне это не по зубам, потому что знаю только лисп, да и то не на "отлично". Мал я ишо и не опытен.
Да и, как я понял, там решается задача именно создания кнопки в статусбаре, а у меня изначально стояла другая задача.
Makswell вне форума  
 
Непрочитано 27.05.2008, 11:41
#8
Кулик Алексей aka kpblc
Moderator

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


У меня на 2006-м AcadStatusBar вел себя некорректно даже на тестовых примерах (подробностей уже не помню). Так что с ним я плюнул разбираться...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.05.2008, 12:28
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
У меня на 2006-м AcadStatusBar вел себя некорректно даже на тестовых примерах (подробностей уже не помню). Так что с ним я плюнул разбираться...
Автор исправил этот баг для 2006. Это было в версии 4.10.

Цитата:
понял, что мне это не по зубам, потому что знаю только лисп,
А тут только LISP и надо. Как именно сделана dll и знать не надо. Достаточно её зарегистрировать (в архиве есть bat-файл). Есть и примеры, в том числе на LISP. Я сделал кнопку для вывода вертикального списка Layouts. Очень удобно - см. рисунок.

А вот весь набор функций:
Код:
[Выделить все]
 
(defun ru-acad-sbb-make-layouts-button
       (button_text button_clicked_call_back / srv)
;|
В качестве COM-сервера используется
AcadStatusBarButton.dll
Copyright 2003 ManuSoft http://www.manusoft.com
|;
  (setq *ru_sbb_layouts_maked* (vl-bb-ref '*ru_bb_sbb_layouts_maked* ))
  (if (not *ru_sbb_layouts_maked* )
    (progn
      (setq srv (vlax-create-object "AcadStatusBarButton.Button"))
      (vlax-put-property srv 'Text button_text)
      (vlax-put-property srv 'Width 0)
      (vlax-put-property
        srv
        'TooltipText
        "Выбор компоновки"
      ) ;_ end of vlax-put-property
      (vlax-put-property srv 'TooltipEnabled :vlax-true)
      (vlax-put-property
        srv
        'LispFunctionOnClicked
        (vl-symbol-name button_clicked_call_back)
      ) ;_ end of vlax-put-property
      (vlax-put-property srv 'Visible :vlax-true)
      (setq *ru_sbb_layouts_maked* t)
      (vl-bb-set '*ru_bb_sbb_layouts_maked* *ru_sbb_layouts_maked* )
    ) ;_ end of progn
  ) ;_ end of if
  srv
) ;_ end of defun
(defun ru-acad-sbb-make-layouts-button-on-click ()
                            ;|
Функция реакции на нажатие кнопки. Автокаду посылается
команда методом SendCommand. В строке команды мы вызываем
функцию переключения меню
|;
  (vlax-invoke-method
    (vla-get-activedocument (vlax-get-acad-object))
    'SendCommand
    "(ru-dlg-set-layout)\n"
  ) ;_ end of vlax-invoke-method
  (princ)
) ;_ end of defun

(defun ru-acad-sbb-layouts-erase-button ()
  (vlax-release-object *ru_sbb_layouts_srv* )
) ;_ end of defun
Теперь где-то в инициализации можем записать:
Код:
[Выделить все]
 
(setq *ru_sbb_layouts_srv*
           (ru-acad-sbb-make-layouts-button
                                 "Компоновки"
                                 'ru-acad-sbb-make-layouts-button-on-click
            ) 
    )
И будет кнопка. Функция (ru-dlg-set-layout) здесь не приведена. Она собственно рисует диалог и включает выбранный Layout. А чтобы убрать кнопку - надо вызвать (ru-acad-sbb-layouts-erase-button)
Миниатюры
Нажмите на изображение для увеличения
Название: status_bar_btn.jpg
Просмотров: 132
Размер:	47.1 Кб
ID:	6847  
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 02.06.2008, 16:56
#10
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Покопавшись в реестре, нашел, где хранятся настройки строки состояния. Для моего Автокада с моим профилем они нашлись здесь:
Цитата:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.1\ACAD-6001:419\Profiles\M-CAD2008\StatusBar\Application]
"CursorCoordinatesPane"=dword:00000000
"SnapPane"=dword:00000001
"GridPane"=dword:00000001
"OrthoPane"=dword:00000001
"PolarPane"=dword:00000001
"OSnapPane"=dword:00000001
"OTrackPane"=dword:00000001
"DynamicUCSPane"=dword:00000001
"DynInputPane"=dword:00000001
"LineweightPane"=dword:00000001
"Paper/ModelPane"=dword:00000001
"TabletPane"=dword:00000001
"FloatPane"=dword:00000001
"SpacerPane"=dword:00000001
"VpMaxPrevPane"=dword:00000001
"VpMaxPane"=dword:00000001
"VpMaxNextPane"=dword:00000001
"ModelIconPane"=dword:00000001
"LayoutIconPane"=dword:00000001
"LayoutMoreIconPane"=dword:00000001
"CleanScreenPane"=dword:00000001
"AnnotationScales"=dword:00000001
"ViewportScales"=dword:00000001
"ViewportLockState"=dword:00000001
"AnnotationVisibility"=dword:00000001
"AutoScale"=dword:00000001
Следовательно, можно убрать и вернуть на место любую стандартную кнопку. Для удаления кнопки лист/модель код будет такой (опять же для моей конфигурации):
Код:
[Выделить все]
(defun test (/ WshShell)
  (setq WshShell (vlax-create-object "WScript.Shell"))
  (vlax-invoke
    WshShell 'RegWrite
    "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\R17.1\\ACAD-6001:419\\Profiles\\M-CAD2008\\StatusBar\\Application\\Paper/ModelPane"
    0 "REG_DWORD")
)
Makswell вне форума  
 
Автор темы   Непрочитано 06.06.2008, 16:16
#11
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Хотя нет, здесь я поспешил.
Я уже немного улучшил предыдущий код, сделав его универсальным:
Код:
[Выделить все]
(defun test (/ WshShell RegistryPath RegistryKey Key)
  (setq RegistryKey "Paper/ModelPane")	;имя параметра реестра
  (setq Key 0)				;значение параметра реестра
  (setq	RegistryPath
	 (strcat "HKEY_CURRENT_USER\\"
		 (vlax-product-key)
		 "\\Profiles\\"
		 (getvar "CPROFILE")
		 "\\StatusBar\\Application\\"
	 )
  )
  (setq WshShell (vlax-create-object "WScript.Shell"))
  (vlax-invoke
    WshShell
    'RegWrite
    (strcat RegistryPath RegistryKey)
    Key
    "REG_DWORD"
  )
  (princ)
)
Но не тут то было.
В реестре всё меняется, но в Автокаде - нет.
1. Если закрыть Автокад, значения в реестре возвращаются к начальному состоянию.
2. Если после запуска этого лиспа запустить вторую копию Автокада, то она запустится уже без кнопки ЛИСТ/МОДЕЛЬ.

В итоге, я вообще усомнился в целесообразности работы с реестром из лиспа, т.к. лисп работает только в Автокаде, а Автокад сам меняет значения параметров в реестре, несмотря ни на какие лиспы.

Последний раз редактировалось Makswell, 07.06.2008 в 08:37. Причина: Исправил ошибку в коде
Makswell вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно вкл/выкл видимость кнопок в строке режимов?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Как автокаду задать жесткое расположение панелей кнопок? Bubba AutoCAD 3 03.09.2004 14:35
Как отменить ротацию кнопок во флай-аут тулбарах. Mim AutoCAD 3 19.04.2004 08:36
Как программно удалить Стиль Текста Led AutoCAD 2 12.01.2004 14:35