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

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

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

Ответ
Поиск в этой теме
Непрочитано 11.01.2013, 13:26 #1
Как программно сделать окно активным?
Xara
 
Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135

Всем привет!
Подскажите пожалуйста, как через LISP сделать окно чертежа активным, которое открывается через функцию:

Код:
[Выделить все]
 (vla-open (vla-get-documents (vlax-get-acad-object))
               Item1 ;имя файла
               :vlax-false
               ""
               )
А то открыть-то он открывает, а активный чертеж тот, что уже был открыт...
__________________
Боишься - не делай. Делаешь - не бойся.
Просмотров: 13650
 
Непрочитано 11.01.2013, 13:33
#2
Кулик Алексей aka kpblc
Moderator

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


Xara, активация окна другого файла автоматически останавливает выполнение лиспа.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.01.2013, 13:42
#3
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Да, Алексей, это я знаю, а как же быть, если есть задача выполнить ряд действий с несколькими чертежами:
1. Проверить, все ли размеры нужного стиля;
2. Проверить, все ли тексты/мультитексты нужного стиля;
3. Проверить переменные в среде чертежа;
4. Проверить UNITS в каждом чертеже.
Это, стало быть, невозможно?
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 11.01.2013, 13:48
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Возможно. Просто тебе нужно помнить, что LISP работает в контексте чертежа, а соответственно, тебе твой lisp код нужно грузить в каждый открытый документ. Кроме того, тебе наверняка будет не лишним использовать реакторы, уведомляющие об открытии др. чертежей, а так же о создании новых, дабы твой код автоматом обрабатывал и их.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 11.01.2013, 14:19
#5
Psyakrev


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


У Кулика на сайте есть заметка, как работать с неактивным документом (сам автор почему-то про нее не вспомнил )
http://autolisp.ru/2010/04/08/procee...tive-document/
Psyakrev вне форума  
 
Непрочитано 11.01.2013, 15:02
#6
Кулик Алексей aka kpblc
Moderator

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


Psyakrev, на момент моего ответа фразы по обработке неактивного документа еще не было
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.01.2013, 15:04
#7
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Спасибо большое, ребята!
Почитаю, постараюсь разобраться!

ps: "тебе твой lisp код нужно грузить в каждый открытый документ" - как это сделать?
Что-то мне подсказывает, что статья Алексея не поможет, там ограниченное количество методов, подходящего не нашел
__________________
Боишься - не делай. Делаешь - не бойся.

Последний раз редактировалось Xara, 11.01.2013 в 15:32.
Xara вне форума  
 
Непрочитано 11.01.2013, 18:53
#8
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Xara Посмотреть сообщение
как это сделать?
Цитата:
Сообщение от Xara Посмотреть сообщение
1. Проверить, все ли размеры нужного стиля;
2. Проверить, все ли тексты/мультитексты нужного стиля;
3. Проверить переменные в среде чертежа;
4. Проверить UNITS в каждом чертеже.
Это, стало быть, невозможно?
Откройте справку и почитайте внимательно про объектную модель автокада, а если не дойдет то и вынимательно
Цитата:
Сообщение от hwd Посмотреть сообщение
тебе твой lisp код нужно грузить в каждый открытый документ.
мдаа, НЕ НУЖНО!

зы 100500 Раз говорил уже: научитесь четко формулировать задачу, для этого надо в совершенстве владеть инструментом, с автолиспом это намного проще сделать, чем с другими языками.
зызы Зачем нужны такие телодвижения я так и не понял
gomer вне форума  
 
Непрочитано 11.01.2013, 21:00
#9
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Xara Посмотреть сообщение
- как это сделать?
Есть разные способы... На вскидку могу перечислить такие:

1. Самый простой - добавить твой LISP в автозагрузку через всем известный "чемоданчик" (это очень просто сделать как вручную, так и программно, добавив запись в реестр):



2. Через файл acad.lsp, но нужно установить соответствующую галочку:



3. С помощью плагинов, которые грузятся в AutoCAD в контексте приложения, а не в контексте документа (как это делает Lisp) - т.е. воспользовавшись ObjectARX или .NET. Но думаю, что это не твой вариант, если не привык к подобному.

Судя по этому:
Цитата:
Сообщение от Xara
1. Проверить, все ли размеры нужного стиля;
2. Проверить, все ли тексты/мультитексты нужного стиля;
3. Проверить переменные в среде чертежа;
4. Проверить UNITS в каждом чертеже.
похоже, что ты пишешь что-то вроде модулей нормоконтроля. Полезное занятие
Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 725
Размер:	42.0 Кб
ID:	94098  Нажмите на изображение для увеличения
Название: 2.png
Просмотров: 721
Размер:	46.0 Кб
ID:	94099  
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 11.01.2013, 21:09
#10
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Xara Посмотреть сообщение
Да, Алексей, это я знаю, а как же быть, если есть задача выполнить ряд действий с несколькими чертежами:
1. Проверить, все ли размеры нужного стиля;
2. Проверить, все ли тексты/мультитексты нужного стиля;
3. Проверить переменные в среде чертежа;
4. Проверить UNITS в каждом чертеже.
Это, стало быть, невозможно?
Может достаточно будет делать проверку по стандарту? Я имею в виду файлы dws.
Do$ вне форума  
 
Непрочитано 11.01.2013, 21:21
#11
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Do$ Посмотреть сообщение
Может достаточно будет делать проверку по стандарту? Я имею в виду файлы dws.
Данный вариант имеет ряд минусов:

1. Пути к DWS файлам в DWG файлах прописываются в абсолютной форме. Относительная форма и использование в пути системных переменных, например %ProgramFiles%, %AppData% и т.п. не допускаются. К тому же у разных пользователей AutoCAD установлен в разные каталоги (зависит и от разрядности платформы). Отсюда постоянно вылезающие проблемы, что не у всех юзеров AutoCAD находит DWS файлы - порой приходится переназначать пути. Но переназначив под одну машину, автоматом "запортачишь" путь для другой.

2. Те модули нормоконтроля, которые входят в стандартную поставку AutoCAD являются очень ограниченными по возможностям и не имеют возможности конфигурировать их. Например - настроить правила формирования допустимых имён для слоёв чертежа.

3. Отсутствует большое количество необходимых модулей нормоконтроля (например - проверка стилей Таблиц).

4. "Родной " API для написания модулей нормоконтроля отвратительно документирован и качество его реализации оставляет желать лучшего. Можно было бы значительно упростить его и получить при этом гораздо бОльшую гибкость.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 12.01.2013, 05:14
#12
ShaggyDoc

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


Цитата:
если есть задача выполнить ряд действий с несколькими чертежами:
1. Проверить, все ли размеры нужного стиля;
2. Проверить, все ли тексты/мультитексты нужного стиля;
3. Проверить переменные в среде чертежа;
4. Проверить UNITS в каждом чертеже.
Это, стало быть, невозможно?
Это элементарно.

1. Надо написать функцию, которая это всё делает (или всё, что угодно, требуемое в каждом чертеже). Назвать её, например (defun C:007 ()....)

2. Включить эту функцию в acaddoc.lsp (не в acad.lsp!). Этот файл автоматически загружается в каждый открытый dwg. Никаких "чемоданчиков" тут не нужно.
Можно в acaddoc.lsp не саму функцию записать, а загрузку её из какого-то файла.

3. Если надо эти действия выполнять автоматически, то сделать в acaddoc.lsp вызов этой функции на выполнение в конце файла. В виде (C:007). Если не автоматически - "повесить на кнопку". Или просто вызывать с клавиатуры: Command: 007
ShaggyDoc вне форума  
 
Непрочитано 12.01.2013, 05:30
#13
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Все эт, конечно, потреотично, но в последствии оказывается хламом
gomer вне форума  
 
Непрочитано 12.01.2013, 13:45
1 | #14
VVA

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


Xara, Посмотри Последовательное применение lisp-функции к множеству файлов DWG
К неактивному чертежу можно обратиться с помощью ObjectDBX (п.5 по ссылке выше)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.01.2013, 17:03
#15
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Спасибо, посмотрю... ObjectDBX для меня - темный лес, но я пытаюсь разобраться с ним... Как верно подметил hwd - "Но думаю, что это не твой вариант, если не привык к подобному"

Цитата:
Сообщение от hwd Посмотреть сообщение
похоже, что ты пишешь что-то вроде модулей нормоконтроля. Полезное занятие
Да, именно так! Функция проверки файлов на соответствие стандарту для нормоконтролеров.

Цитата:
Сообщение от Do$ Посмотреть сообщение
Может достаточно будет делать проверку по стандарту? Я имею в виду файлы dws.
Нет, результаты проверки через DWS не извлечь, а мне нужно на выходе получить отчет по каждому файлу, если в нем есть хоть одно несоответствие, или пометка, что все ОК.

Задача у меня такая - есть, к примеру, 100 чертежей. Необходимо запустить приложение в акаде, которое при указании директории, в которой находятся все 100 чертежей, проверит в каждом файле вышеуказанные пункты последовательно, сформировав отчет, и выведет его, к примеру, в текстовый файл. Мне не нужна автозагрузка в каждый открываемый файл, мне нужно проверить пачку чертежей, и не грузить лисп каждый раз (тут-то все просто было бы), а открывать каждый чертеж, прогонять в нем функцию, записать отчет, закрыть файл и брать следующий...
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 14.01.2013, 17:08
#16
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Я использую своё решение, вместо предлагаемого Автодеском. Мне не нравятся ограничения, и костыли стандартного решения, да и реализовано так, что неудобно пользоваться. Результаты сохраняю в XML, который скармливаю генератору отчётов, а уж из него, в любой формат вывожу.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 14.01.2013, 17:17
#17
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


hwd, Какое конкретно решение? Можно поподробнее?
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 14.01.2013, 17:31
#18
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Xara Посмотреть сообщение
hwd, Какое конкретно решение? Можно поподробнее?
Оно написано на C#, поэтому, если учитывать что
Цитата:
это не твой вариант
то тут особо пояснять нечего... Ну покажу я тебе исходный код интерфейса модуля, и что тебе это даст?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 14.01.2013, 17:40
#19
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


используя консольный акад 2013, это можно довольно просто сделать, причем, запуск будет довольно быстрым...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 14.01.2013, 17:46
#20
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от hwd Посмотреть сообщение
и что тебе это даст?
Век живи - век учись. Почитаю, разберусь, научусь

Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
это можно довольно просто сделать, причем, запуск будет довольно быстрым
Можно хоть немного конкретики?))
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно сделать окно активным?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenDCL vs C#.NET Sleekka .NET 18 02.07.2013 22:31
AutoCAD Automation: как правильно программно прервать Utility.GetPoint (выполняется в другом потоке) IvanShkuropadsky Программирование 2 17.08.2011 11:10
Как сделать окно Autocad активным при запуске из VBA Excel? AlexV Программирование 1 20.08.2009 12:40
BricsCAD 8.2.8 Кулик Алексей aka kpblc Другие CAD системы 17 24.04.2008 17:01
Текстовое окно не появляется при нажатии F2 Боныч AutoCAD 3 09.04.2008 16:21