|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
27.10.2007, 20:38 | #1 | |
Эмуляция нажатия клавиш из под AutoLisp-a
Руководитель фирмы
Москва
Регистрация: 28.03.2007
Сообщений: 1,831
|
||
Просмотров: 22162
|
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
На концептуальном уровне это напоминает лечение зубов через задний проход. Вроде бы и можно, но сверло почему-то в аппендикс заезжает. Динамические блоки - замечательная штука, но для ручной работы, когда пользователь не может или не хочет заниматься программированием.
Управление визуальными элементами Windows из LISP - то же самое, даже с учетом возможности запуска любых приложений. Нет в Windows "системных переменных" с кобинациями нажатых клавиш. Windows основана на интерфейсе, управляемом событиями. В ней может быть открыто много приложений, в каждом может быть множество окон, в каждом окне разные "control" (это тоже окна). При любом действии в системе (мышкой шевельнули, клавишу нажали) генерируются "события" - сообщения, передаваемые в систему. Разумеется, не текстовые сообщения, а "потоки" байтиков. И все элементы начинают разбираться, кому сообщение направлено и кто за него "отвечает" (должен реагировать). В высокооуровневых программах отслеживаются действия в собственных элементах управления, но тоже на высоком уровне. Например, для комбобокса, может быть событие "OnChange" - при изменении содержимого любым способом (хоть выбором из списка, хоть ручным вводом). На это событие программа может отреагировать. Можно, например, для наглядности, вставить диалоговое сообщение, которое и будет выскакивать постоянно. Организовывать слежение за нажатием-отжатием кнопки и прочими мелочами нет никакого смысла. Да еще куда-то передавать через мифические переменные. Лучше уж чинить зубы через рот. Впрочем, если желание не пропадает, можете начать изучение WinApi и написание собственного языка программирования динамических блоков. |
|||
|
||||
Да ты просто не догнал, о чем я тут толкую.
Не отслеживать надо нажатия, а эмулировать. Есть много друг ShaggyDoc такого, что нельзя сделать в рамках одного языка программирования. Да и программировать можно по разному. Можно вскрывать сущность элементов и пытаться ковыряться в их кишках, можно эмитировать действия пользователя используя префикс перед командами, а можно вообще симитировать работу рук, только для этого надо кое-что сделать. К сожалению в AutoCAD-e не все объекты доступны для редактирования через Active X. Создание многих вещей вообще невозможно программно. Пока, надеюсь. Если ты (ничего, что на ты?) можешь создать Lookup программно, с 160-тью строками текста - молоток. Только эти 160 строк тебе прийдется набивать ручками все равно. А пользователю надо облегчить труд по заполнению этих Lookup-ов, тем более, что этот пользователь я. Я имею уже текст, который мне надо занести в lookup (ах да, забыл. Lookup - это такая фенька в динамических блоках, которая представляет из себя список значений и настраивает параметры блока соответствующим образом. В результате, в свойствах блока появляется выпадающее меню, где выбрав нужное значение - перестраиваешь все остальные свойства блока), так вот текст этот в экселе, или в ворде, и он о-о-чень большой, и всегда разный, в прогу не вставишь. Ладно, надо нажать стрелку вниз. Как? В Лиспе можно смотреть на состояние значения переменной windows, ясен пень специально созданной для этого. Из лиспа и создавать переменные можно. Можно любые программы запускать и файлы открывать. К стати вместо переменной windows можно использовать временный текстовый файл, или еще что-нибудь. Вот тут: http://z-oleg.com/delphi/hardwkle.htm есть как это сделать на delphi. Можно и на C++ или еще чем-нибудь. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Там сначала надо окно вызывать, и позиционироваться определенным образом. Получить-то значения lookup-параметров дин.блоков в принципе возможно, но вот с их модификацией что-то у меня не срослось Тупой, наверно.
Кстати, если интересно (ох и огребу сейчас ), мой вариант "получить все" болтается здесь
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Да там лифтик появляется на определенном моменте. Так что и 1000 можно. Да, скопировать состояние строк можно, Kpblc прав. Вот создать новый Lookup и туда их вставить - дело пока для чистого Lisp-a не подъемное. Требуется помощь со стороны.
Для Shoorup: Скачай мой 3D динамический блок с теплообменником в библиотеке элементов лежит. Там lookup 160 строк. Дык, есть кто в delphi шарит, или нет пока? |
||||
|
||||
Так, тема должна жить! Так доктор сказал. Ну и что, что холодная? Сделаем искусственное дыхание рот в рот и прямой массаж сердца. Кто делать будет? Дык, а практиканты зачем? Вот пусть и практикуются. На живых темах и дурак - профессором выглядит. Что зараза, какая зараза - ее давно нафармалинили насквозь. Вон, мухи ползают и не дохнут. А эти практиканты - мухи и те поэнергичнее будут.
|
||||
|
||||
Есть такие объекты, наукой совсем не изученные как:
AcDbBlockLookupActionEntity AcDbBlockLookupParameterEntity AcDbBlockStretchActionEntity AcDbBlockLinearParameterEntity AcDbBlockRotateActionEntity AcDbBlockRotationParameterEntity AcDbBlockVisibilityParameterEntity Ну и еще с десяток из инструментов свойств блока. Можно ли создать функцией vla-add эти объекты сказать трудно, поскольку не понятно какие к ним надо указывать дополнительные параметры Также пытался применить к ним метод vla-copy - глухо. В списке от думпа есть такой метод, а на деле он к эти объектам не применим. Выдает Command: (setq lookup1 (vla-copy (vlax-ename->vla-object (car (entsel))))) Select object: ; error: Automation Error. Description was not provided. Посему не будем тянуть резину, вручную открываем lookup (хотя открывать его можно программно, но через command) и вручную ставим курсор на нужную ячейку, щелкая при этом двойным кликом. |
||||
|
||||
С Kpblc-ом расковыряли динамические свойства почти "до винтика" Нашли все записи, но создать такие по некоторым причинам нельзя.
Начина я от сюда и далее http://forum.abok.ru/index.php?showtopic=14612&st=540 Все "умники", которые считают, что стоит только захотеть и работать с динамическими блоками можно будет без извращений, типа того, что здесь предлагается, могут сами попробовать "вкус этих устриц", а потом уж высказывать свой скептицизм. |
||||
|
||||
А чего там ковырять?
Как пример, структура файла, относящаяся к дин блоку, может быть отображена в списке - очень удобно просматривать после форматирования в лисп редакторе... Код:
Код:
Код:
Код:
|
||||
|
||||
Видит око, да зуб не ймет - девиз сидящих на диете.
Через Aktive X решения не имеет (пока). Это "пока" завист только от AutoDesk-a. Структура ясна, зависимости определены, препятствия обнаружены и отмечены по сабачьи. Решение по созданию программы, в которую девушка могла-бы набивать данные и формировать динамические блоки - найдено, но не через AktiveX, увы. Копировать можно, но через эмуляцию создания нового элемента. То, собственно о чем эта тема. Решение пришло на VBA, как ни странно. Больше ничего не скажу, поскольку сам еще не определился с результатом. |
||||
|
||||
Цитата:
Взял готовый блок и добавил туда необходимое количество дополнительных параметров! Все из лиспа, через dxf - никакого вба. PS. если есть вопросы - контакты в профиле... |
||||
|
||||
Через Command можно:
Открыть сам блок, Создать любое количество окон с их описанием на русском языке, Создать все абсолютно динамические элементы И все. А вот Lookup нашпиговать - только через VBA. Можно сортировать элементы дин свойств. Если ты знаешь как изменить запись в словаре и обойти код (1071 . 0) и (1010 далее координаты) в котором нет точки, то ты ГУРУ и мы падем к тебе в ноги и будем жрать грязь с твоих чювяк. |
||||
|
||||
Цитата:
Мне сегодня стало интересно, чем вы так заняты с Алексеем, решил тоже ковырнуть в минуты отдыха. меняю я через entmod тысячные коды - расширенные данные, с ними так и работают, как с расширенными данными, как пример, если не нужны чужие данные - удаляй их, либо запоминай и после редактирования добавляй... Короче, специально проверил и добавил списки для линейного размера и списки для поиска (Lookup) в дин блок... Единственно, я немного упростил себе задачу, эти свойства уже были в блоке, я только их менял или добавлял данные... |
||||
|
||||
Цитата:
|
||||
|
||||
Мужик, я уже слюнявчик надел, готовь чювяки, только сперва давай на чистоту. Грязь хавать авансом я не хочу.
Код:
|
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Фундамент "ригель по столбам" под сруб и печь | &Rey | Основания и фундаменты | 25 | 27.08.2010 19:53 |