|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Проверка нажатия CTRL в LISP в фоновом режиме(не grread)
Регистрация: 02.06.2005
Сообщений: 19
|
||
Просмотров: 7292
|
|
||||
новичок Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396
|
Цитата:
1. это свойство кнопки в msform2.dll (или типа того) . она использует цвет этого пиксела и назначает его как прозрачный (с этим ничего нельзя поделать(как я думаю)) 2. принципиально ничего невозможного нет, однако программа использует show али activate на form1 при вызове функции Private Sub AcadDocument_BeginShortcutMenuDefault(ShortcutMenu As IAcadPopupMenu) Dim coord As POINTAPI ' координаты курсора Dim coordAcad As POINTAPI Dim retval As Long ' возвращаемое значение Dim OnTop As String Dim cp As POINTAPI Dim slength As Long retval = GetCursorPos(coord) keystate = GetKeyState(VK_LMENU) If pshvbapath = "" Then fn = FreeFile Open (Application.Path + "\acad.pav") For Input As fn Input #fn, pshvbapath Input #fn, pshvbaver Input #fn, pshvbalan Close (fn) End If OnTop = Space(255) slength = GetPrivateProfileString("AltContextToolBar", "OnTop", "1", OnTop, 255, pshvbapath + "\PShAcadVBA.ini") OnTop = CVar(Left(OnTop, slength)) 'fn = FreeFile 'Open pshvbapath + "\altcontexttoolbar\support\ontop.pav" For Random As fn 'Get #fn, 1, OnTop 'Close (fn) Select Case OnTop Case Is = 1 If (OnTop = "1" Or OnTop = "") Then ' And (keystate >= 0) Then Dim FPos As String FPos = Space(255) slength = GetPrivateProfileString("AltContextToolBar", "Position", "1", FPos, 255, pshvbapath + "\PShAcadVBA.ini") FPos = CVar(Left(FPos, slength)) If FPos = "True" Then UserForm1.Left = 0.75 * coord.x UserForm1.top = 0.75 * coord.Y Else UserForm1.Left = 0.75 * coord.x - 46 UserForm1.top = 0.75 * coord.Y - 62 End If UserForm1.Hide UserForm1.Show 'уже ф форме устанавливаю мышь на заголовке и кликаю coordAcad.x = Application.WindowLeft coordAcad.Y = Application.WindowTop GetCursorPos cp SetCursorPos coordAcad.x + 1, coordAcad.Y + 250 '+ 5 mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0& 'нажатие на левую клавишу мыши mouse_event MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0& 'отпускание левой клавиши мыши SetCursorPos cp.x, cp.Y Exit Sub 'Else ' If keystate < 0 Then ' UserForm1.Left = 0.75 * coord.X - 46 ' UserForm1.top = 0.75 * coord.Y - 62 ' UserForm1.Show ' ' SetCursorPos coordAcad.X + 50, coordAcad.Y + 5 ' mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0& 'нажатие на левую клавишу мыши ' mouse_event MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0& 'отпускание левой клавиши мыши ' SetCursorPos MouseCoord.X, MouseCoord.Y ' End If End If Case Is = 0 If keystate < 0 Then FPos = Space(255) slength = GetPrivateProfileString("AltContextToolBar", "Position", "1", FPos, 255, pshvbapath + "\PShAcadVBA.ini") FPos = CVar(Left(FPos, slength)) If FPos = "True" Then UserForm1.Left = 0.75 * coord.x UserForm1.top = 0.75 * coord.Y Else UserForm1.Left = 0.75 * coord.x - 46 UserForm1.top = 0.75 * coord.Y - 62 End If UserForm1.Show GetCursorPos cp SetCursorPos coordAcad.x + 1, coordAcad.Y + 250 mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0& 'нажатие на левую клавишу мыши mouse_event MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0& 'отпускание левой клавиши мыши SetCursorPos cp.x, cp.Y End If End Select 'ThisDrawing.SendCommand ("^C") End Sub сделано в лоб поэтому есть неприятные нюансы поэтому если записать на другую функуию UserForm1.Show логика появления формы будет изменена |
|||
![]() |
|
||||
Регистрация: 02.06.2005
Сообщений: 19
|
RE p_sh
п.1 понятно п.2 К сожалению знаю только Lisp. Зачем впринципе нужен вызов панели инструментов с настраиваемыми кнопками командой(ПИНК)?: Программа очень удобна в работе, при создании и группировке комманд и могла бы стать основой для сборников команд.Но альтернативный спрособ вызова ПИНК (на мой взгляд) необходим....т.к. основной способ не лишен недостатков. Если недостаточно мотивации для развития этой программы зайдите сюда http://cadhlp.kulichki.com/smpr.htm п.3 имелся ввиду вопросс: Как проверить нажатие CTRL в LISP в фоновом режиме? (Думаю, что здесь надо использовать программу на другом языке программирования с передачей информации в LISP программу) |
|||
![]() |
|
||||
новичок Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396
|
2.
можно вставить и вызов сторонней функцией: например вызывать через кнопку макрос ^C^C-VBARun p_shACTB (т.е. функция p_shACTB) если сильно необходимо могу попробовать (когда будет время) и вызывать её из лиспа али с кнопки или с сочетания клавиш (если это можно) ACADу требуется событие чтобы его обработать, а на сколько мне известно их не так много (давить на мышь мне показалось наиболее коротким и человесеским способом) Activate event Triggered when a document window is activated. AppActivate event Triggered just before the main application window is activated. AppDeactivate event Triggered just before the main application window is deactivated. ARXLoaded event Triggered when an ObjectARX application has been loaded. ARXUnloaded event Triggered when an ObjectARX application has been unloaded. B BeginClose event Triggered immediately after AutoCAD receives a request to close a drawing. BeginCommand event Triggered immediately after a command is issued, but before it completes. BeginDocClose event Triggered immediately after AutoCAD receives a request to close a drawing. BeginDoubleClick event Triggered after the user double-clicks an object in the drawing. BeginFileDrop event Triggered when a file is dropped on the main application window. BeginLISP event Triggered immediately after AutoCAD receives a request to evaluate a LISP expression. BeginModal event Triggered just before a modal dialog is displayed. BeginOpen event Triggered immediately after AutoCAD receives a request to open an existing drawing. BeginPlot event Triggered immediately after AutoCAD receives a request to print a drawing. BeginQuit event Triggered just before an AutoCAD session ends or a document closes. BeginRightClick event Triggered after the user right-clicks on the drawing window. BeginSave event Triggered immediately after AutoCAD receives a request to save the drawing. BeginShortcutMenuCommand event Triggered after the user right-clicks on the drawing window, and before the shortcut menu appears in command mode. BeginShortcutMenuDefault event Triggered after the user right-clicks on the drawing window, and before the shortcut menu appears in default mode. BeginShortcutMenuEdit event Triggered after the user right-clicks on the drawing window, and before the shortcut menu appears in edit mode. BeginShortcutMenuGrip event Triggered after the user right-clicks on the drawing window, and before the shortcut menu appears in grip mode. BeginShortcutMenuOSnap event Triggered after the user right-clicks on the drawing window, and before the shortcut menu appears in osnap mode. D Deactivate event Triggered when the drawing window is deactivated. E EndCommand event Triggered immediately after a command completes. EndLISP event Triggered upon completion of evaluating a LISP expression. EndModal event Triggered just after a modal dialog is dismissed. EndOpen event Triggered immediately after AutoCAD finishes opening an existing drawing. EndPlot event Triggered after a document has been sent to the printer. EndSave event Triggered when AutoCAD has finished saving the drawing. EndShortcutMenu event Triggered after the shortcut menu appears. L LayoutSwitched event Triggered after the user switches to a different layout. LISPCancelled event Triggered when the evaluation of a LISP expression is cancelled. M Modified event Triggered when an object or collection in the drawing has been modified. N NewDrawing event Triggered just before a new drawing is created. O ObjectAdded event Triggered when an object has been added to the drawing. ObjectErased event Triggered when an object has been erased from the drawing. ObjectModified event Triggered when an object in the drawing has been modified. S SelectionChanged event Triggered when the current pickfirst selection set changes. SysVarChanged event Triggered when the value of a system variable is changed. W WindowChanged event Triggered when there is a change to the application or document windows. WindowMovedOrResized event Triggered just after the application or drawing window has been moved or resized. 3. в VB есть функция keystate = GetKeyState(VK_LMENU) только переменная другая L(R)CTRL (или около того - нет под рукой переменных) или используйте API функции Цитата:
в документе Private Sub AcadDocument_BeginDoubleClick(ByVal PickPoint As Variant) ... keystate = GetKeyState(VK_CTRL) (нечетко)' состояние кнопки( любой) в т.ч. и контрола ... 'вызов функции запускающей нужное действие if keystate = нужное then СуперПрогаРун (параметры) end if End Sub ps lisp не знаю |
|||
![]() |
|
||||
Регистрация: 02.06.2005
Сообщений: 19
|
RE p_sh
2. Вызывать через кнопку макрос ^C^C-VBARun p_shACTB то, что надо !В лиспе элементарно ![]() ...это позволит использовать Symbol Commander(ссылки нет подрукой) для вызова ПИНК. 3.по поводу: "keystate = GetKeyState(VK_LMENU).." был бы весьма благодарен за фаил *.dvb с возможностью вызова как cм. п.2.... для передачи информации в LISP можно использовать переменную ACAD (например USERR1 - цифра;USERS1- текст) или через системную переменную. по поводу: "При двойном клике на объекте, например на блоке с атрибутами запускается переопределенная команда eattedit..." эта задача решена. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
>BH
Код:
Посмотри LISP. Реактор на двойной щелчок мыши У себя мы уже используем. Вот фрагмент Код:
|
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Регистрация: 02.06.2005
Сообщений: 19
|
Всем спасибо!
>VVA 1. По моему искреннему заблуждению ![]() - необходимо прописывать соответствия между обьектами и командами редактирования - невозможность применения функции (command) ...переопределение нужной команды лишено этих недостатков. >Елпанов Евгений и p_sh Применив команду AutoCAD "vbastmt" я могу выполнить код на VBA в LISP: (command "vbastmt" "keystate = GetKeyState(VK_CONTROL)") как я понял переменная "keystate" будет нести информацию о состоянии клавиши....а вот как прочитать или передать значение этой переменной в lisp?...Можно использовать переменную ACAD (например USERR1 - цифра;USERS1- текст)...какой код нужен для этого на VBA? |
|||
![]() |
|
||||
новичок Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396
|
Цитата:
|
|||
![]() |