Цвета перекрестия (курсора) где хранятся? (хочу менять программным способом)
Реклама i
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Цвета перекрестия (курсора) где хранятся? (хочу менять программным способом)

Цвета перекрестия (курсора) где хранятся? (хочу менять программным способом)

Ответ
Поиск в этой теме
Непрочитано 19.07.2011, 19:20 #1
Цвета перекрестия (курсора) где хранятся? (хочу менять программным способом)
Deglator
 
Регистрация: 05.10.2008
Сообщений: 13

Хочу менять программным способом цвет курсора (перекрестия), в зависимости от ситуации и режима работы. Но не нашел, где хранятся (в какой системной переменной) значения его цветов (для пространства модели и пространства листа).
Для его размеров нашёл системную переменную CURSORSIZE, а вот для цветов - нет .
Искал в справке, искал "тупо в лоб" прямым просмотром системных переменных AutoCAD, но всё без толку.
Если кто знает, подскажите, пожалуйста.

P.S. Как "врукопашную" менять знаю: Сервис --> Настройка --> Экран --> Цвета.
Просмотров: 16779
 
Непрочитано 19.07.2011, 19:27
#2
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


системных переменных нет.
следует открыть настройки-экран-цвет и там выбрать перекрестье в одном из пространств
Миниатюры
Нажмите на изображение для увеличения
Название: SpxImage222.jpg
Просмотров: 2495
Размер:	69.7 Кб
ID:	63123  
Хмурый вне форума  
 
Непрочитано 20.07.2011, 12:49
#3
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,179
<phrase 1=


Изменить цвет курсора
Поиском не пользовался?
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Автор темы   Непрочитано 22.07.2011, 19:18
#4
Deglator


 
Регистрация: 05.10.2008
Сообщений: 13


sasha_lif
Пользовался, но неудачно, попадались темы, где обсуждалось как сменить врукопашную или кому какие цвета курсора, фона и т.п. нравятся.
За ссылку большое спасибо, выручили.
Deglator вне форума  
 
Автор темы   Непрочитано 29.07.2011, 22:41
#5
Deglator


 
Регистрация: 05.10.2008
Сообщений: 13


Не знаю, как другие, но я неоднократно ошибался при черчении – думая, что нахожусь в пространстве Листа, часто незаметно для самого себя попадал через Видовые экраны в пространство Модели (всего-то достаточно нечаянно сделать двойной клик левой кнопкой мышки в области Видового экрана). Оно, конечно, ACAD сигнализирует об этом событии сменой значка ПСК (в левом нижнем углу экрана), в области режимов [Лист] переключает на [Модель], но в большинстве случаев все эти «сигналы» остаются незамеченными и создаваемые примитивы оказываются «в действительности не там, где должны быть на самом деле» (т.е. не в Листе, а в Модели). Когда Видовой экран весь виден в рабочей области экрана, то «обрезание» перекрестия до границ этого Видового экрана «напоминает» о том, что «залетел» в пространство Модели (я работаю со 100% размерами перекрестия), но когда границы Видового экрана находятся за пределами рабочего поля экрана, то это не спасает, т.к. перекрестие занимает в этом случае всё рабочее поле.

Поэтому я предлагаю в качестве дополнительного «сигнала» об изменение пространства использовать цвет перекрестия. Для этого надо назначить разные цвета перекрестия для пространства Модели и для пространства Листа (например в Модели пусть будет зелёный, а в Листе – жёлтый: Сервис – Настройка – Экран - Цвета) и использовать Лисп-программку, которая будет отслеживать, где находится перекрестие и при необходимости менять его цвет. Программка меняет цвет перекрестия при событиях перехода «Лист – Видовой экран» и «Видовой экран – Лист» (при событиях перехода «Лист – Модель» и «Модель – Лист» цвет курсора меняет сам ACAD). Для отслеживания событий используется «реактор», отслеживающий изменение системных переменных ACAD. Значения цветов перекрестия для Листа и для Модели программка запоминает при инициализации (загрузке) и в дальнейшем использует эти значения, не отслеживая их возможные изменения со стороны пользователя (Сервис – Настройка – Экран – Цвета). Если пользователь изменил цвета перекрестия, то он должен заново загрузить программку (или просто вызвать nc_crosshair-color-init). Мне, честно говоря, лениво было напрягать «моск» для динамического отслеживания цветов во время сеанса редактирования чертежа, поскольку один раз выбрав цвета перекрестия, я уже не меняю их в дальнейшем. Код может и не оптимальный (надеюсь без особых ошибок), но работает. Может ещё кому-нибудь пригодиться.
Код:
[Выделить все]
 
(vl-load-com)

(setq NC_ACAD_APP (vlax-get-acad-object))

;процедура запоминает цвета перекрестия в пространстве Модели и в пространстве Листа в глобальных переменных
(defun nc_crosshair-color-init ()
 (setq
  NC_CROSSHAIR-COLOR-MODEL  (vla-get-modelcrosshaircolor  (vla-get-display (vla-get-preferences NC_ACAD_APP)))
  NC_CROSSHAIR-COLOR-LAYOUT (vla-get-layoutcrosshaircolor (vla-get-display (vla-get-preferences NC_ACAD_APP)))
  NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE nil
 )
 (princ)
)

;процедура назначает цвет перекрестия в зависимости от того. где оказались в видовом экране или на листе 
(defun nc_crosshair-color-set ()
 (if (and (/= NC_CROSSHAIR-COLOR-MODEL NC_CROSSHAIR-COLOR-LAYOUT) (nc_is-layout)) (progn
  (if (nc_is-vport)
   (if (not NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE) (progn
    (vla-put-layoutcrosshaircolor (vla-get-display (vla-get-preferences NC_ACAD_APP)) NC_CROSSHAIR-COLOR-MODEL)
    (setq NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE T)
   ))
   (if NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE (progn
    (vla-put-layoutcrosshaircolor (vla-get-display (vla-get-preferences NC_ACAD_APP)) NC_CROSSHAIR-COLOR-LAYOUT)
    (setq NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE nil)
   ))
  )
 ))
 (princ)
)

;функция возвращает T если находимся в пространстве листа, иначе - nil
(defun nc_is-layout () (= (getvar "TILEMODE") 0))

;функция возвращает T если находимся в видовом экране, иначе - nil
(defun nc_is-vport () (and (nc_is-layout) (/= (caar (vports)) 1)))

;процедура вызывеается реактором при изменении системной переменной
(defun nc_sys-var-changed (reac args / s_var is_change)
 (setq s_var (car args)  is_change (cadr args))
 (if (and is_change (= s_var "CVPORT")) (nc_crosshair-color-set))
 (princ)
)

;инициализация переменных цветов перекрестия
(nc_crosshair-color-init)

;если реактор изменения системных переменных существует, то "похерем" его (на всякий случай, вдруг он неправильный)
(if NC_MYSYSVARREACTOR (progn
 (setq NC_MYSYSVARREACTOR nil)
 (vlr-remove-all :vlr-SysVar-reactor)
))
;а если не существует, то создадим его
(if (null NC_MYSYSVARREACTOR)
 (setq NC_MYSYSVARREACTOR
  (vlr-SysVar-Reactor nil (list '(:vlr-SysVarChanged . nc_sys-var-changed)))
 )
)
Deglator вне форума  
 
Непрочитано 30.07.2011, 09:26
#6
Vasyan

Программист, Электронщик, Музыкант, Звукоинженер
 
Регистрация: 29.07.2011
Красноярск
Сообщений: 7
Отправить сообщение для Vasyan с помощью Skype™


Вообще в любой программе нестандартный курсор можно заменить своим, если заменить его в ресурсах программы, декомпилятором ресурсов, таким как XNResourceEditor или ResHacker, но это делать не следует по нескольким причинам:
  1. Уголовная ответственность за реверсивную инженерию.
  2. Программа может быть упакована компрессором, типа UPX, ASPack итд, при этом предварительно её следует распаковать.
  3. Программа может сверить свою контрольную сумму с эталонным значением, и выдать сообщение что заражена вирусом, в итоге станет нерабочей.
Vasyan вне форума  
 
Автор темы   Непрочитано 30.07.2011, 11:13
#7
Deglator


 
Регистрация: 05.10.2008
Сообщений: 13


В описанном мной случае другая ситуация, мне не требовалось изменить курсор в ACAD раз и навсегда. Мне хотелось чтобы он просто менял цвет, в зависимости от того, где находится - на Листе, или в Видовом экране. Разработчики ACAD почему-то не сообразили, что это может быть удобно.
-----------------------------------------------------------------
К сожалению, в коде есть ошибка, если активен Видовой экран (цвет перекрестия как в Модели), то при переходе на Лист (не содержащий Видовых экранов) цвет перекрестия остаётся без изменения (т.е. как в Модели). Буду искать в чём причина...
-----------------------------------------------------------------
Нашёл. Я никак не ожидал, что при переходе с одного Листа на другой Лист (пусть даже если активен Видовой экран) следует анализировать изменение системной переменной TILEMODE.
Вот исправленный код:
Код:
[Выделить все]
 (vl-load-com)

(setq NC_ACAD_APP (vlax-get-acad-object))

;процедура запоминает цвета перекрестия в пространстве Модели и в пространстве Листа в глобальных переменных
(defun nc_crosshair-color-init ()
 (setq
  NC_CROSSHAIR-COLOR-MODEL  (vla-get-modelcrosshaircolor  (vla-get-display (vla-get-preferences NC_ACAD_APP)))
  NC_CROSSHAIR-COLOR-LAYOUT (vla-get-layoutcrosshaircolor (vla-get-display (vla-get-preferences NC_ACAD_APP)))
  NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE nil
  NC_IS-CROSSHAIR-COLOR-CONTROL (/= NC_CROSSHAIR-COLOR-MODEL NC_CROSSHAIR-COLOR-LAYOUT)
 )
 (princ)
)

;процедура назначает цвет перекрестия при изменении "TILEMODE" 
(defun nc_crosshair-color-set-tm ()
 (if (and NC_IS-CROSSHAIR-COLOR-CONTROL (NC_IsLayout))
  (if NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE (progn
   (vla-put-layoutcrosshaircolor (vla-get-display (vla-get-preferences NC_ACAD_APP)) NC_CROSSHAIR-COLOR-LAYOUT)
   (setq NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE nil)
  ))
 )
 (princ)
)

;процедура назначает цвет перекрестия при изменении "CVPORT" 
(defun nc_crosshair-color-set-cv ()
 (if (and NC_IS-CROSSHAIR-COLOR-CONTROL (NC_IsLayout))
  (if (/= (getvar "CVPORT") 1);наверно попали в Видовой экран 
   (if (not NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE) (progn
    (vla-put-layoutcrosshaircolor (vla-get-display (vla-get-preferences NC_ACAD_APP)) NC_CROSSHAIR-COLOR-MODEL)
    (setq NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE T)
   ))
   (if NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE (progn
    (vla-put-layoutcrosshaircolor (vla-get-display (vla-get-preferences NC_ACAD_APP)) NC_CROSSHAIR-COLOR-LAYOUT)
    (setq NC_CROSSHAIR-COLOR-LAYOUT-IS-CHANGE nil)
   ))
  )
 )
 (princ)
)

;функция возвращает T если находимся в пространстве листа, иначе - nil
(defun nc_is-layout () (= (getvar "TILEMODE") 0))

;процедура вызывеается реактором при изменении системной переменной
(defun nc_sys-var-changed (reac args / s_var is_change)
 (setq s_var (car args)  is_change (cadr args))
 (if (and is_change (= s_var "CVPORT")) (nc_crosshair-color-set))
 (princ)
)

;процедура вызывеается реактором при изменении системной переменной
(defun nc_sys-var-changed (reac args / s_var is_change)
 (setq s_var (car args)  is_change (cadr args))
 (if is_change (cond
  ((= s_var "TILEMODE") (nc_crosshair-color-set-tm))
  ((= s_var "CVPORT")   (nc_crosshair-color-set-cv))
 ))
 (princ)
)

;инициализация переменных цветов перекрестия
(nc_crosshair-color-init)

;если реактор изменения системных переменных существует, то "похерем" его (на всякий случай, вдруг он неправильный)
(if NC_MYSYSVARREACTOR (progn
 (setq NC_MYSYSVARREACTOR nil)
 (vlr-remove-all :vlr-SysVar-reactor)
))
;а если не существует, то создадим его
(if (null NC_MYSYSVARREACTOR)
 (setq NC_MYSYSVARREACTOR
  (vlr-SysVar-Reactor nil (list '(:vlr-SysVarChanged . nc_sys-var-changed)))
 )
)

Последний раз редактировалось Deglator, 30.07.2011 в 20:00.
Deglator вне форума  
 
Непрочитано 05.10.2011, 22:49
#8
товарищ_druid


 
Регистрация: 14.11.2008
Саратов
Сообщений: 17
<phrase 1=


Ща в меня полетят тухлые помидоры наверняка... но я в этом деле новичок... не подскажите куда вот эти коды все вставлять.... т.е. куда надо нажать и т.д....
товарищ_druid вне форума  
 
Непрочитано 05.10.2011, 23:06
#9
Кулик Алексей aka kpblc
Moderator

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


Как использовать лисп, опубликованный на форуме
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.10.2011, 07:44
#10
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,638


Цитата:
Сообщение от Deglator Посмотреть сообщение
Не знаю, как другие, но я неоднократно ошибался при черчении – думая, что нахожусь в пространстве Листа, часто незаметно для самого себя попадал через Видовые экраны в пространство Модели (всего-то достаточно нечаянно сделать двойной клик левой кнопкой мышки в области Видового экрана).
А использовать SPACESWITCH, для решения данной проблемы не проще?
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 06.10.2011, 09:55
#11
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цвета перекрестий, фона модели и листа и проч меняли еще здесь Цветовые схемы вкладки модель
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 03.11.2011, 21:10
#12
Deglator


 
Регистрация: 05.10.2008
Сообщений: 13


to KronSerg
Нет, не проще. Если присвоить SPACESWITCH значение 0, то через Видовой экран в пространство Модели перейти невозможно. Это исключает случайное (непреднамеренное) попадание в пространство Модели когда находишься в пространстве Листа. Но ведь и преднамеренно попасть в пространство Модели из пространства Листа через Видовой экран не получится никак ((. А мне часто хочется редактировать графику находящуюся в пространстве Модели находясь в пространстве Листа (через Видовой экран, это позволяет ориентироваться по графике находящейся в пространстве Листа). Присвоив SPACESWITCH значение 0 "вместе с водой из ванночки выплескиваем и ребёнка".

to VVA
Спасибо. Лучше поздно, чем никогда. (с)
Deglator вне форума  
 
Непрочитано 04.11.2011, 14:34
#13
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,638


Цитата:
Сообщение от Deglator Посмотреть сообщение
Если присвоить SPACESWITCH значение 0, то через Видовой экран в пространство Модели перейти невозможно.
Очень даже возможно, любым способом кроме двойного клика мышью вполне можно пользоваться.
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Цвета перекрестия (курсора) где хранятся? (хочу менять программным способом)

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск