Перейти к публикации

Рекомендованные сообщения

19 минут назад, ILL сказал:
В 02.06.2017 в 18:06, Kelny сказал:

mlHWnd = FindWindowA("XLMAIN", Application.Caption)


Вместо "XLMAIN" для солида что указывать??

Вам нужно не для Solidworks , а для вашего окна программы (заголовок которого может быть назван в том числе и так же как в примере), ведь вы окно хотите вывести вперёд, а не Solidworks, который и так наверху.

 

Ссылка на сообщение
Поделиться на других сайтах


13 минуты назад, ILL сказал:
Цитата

Ошибка при окрытии файла макроса.

Система может быть в нестабильном состоянии.


Не??

Ладно резервную копию сделал, а то 2-хлетний труд насмарку.. правда без последних изменений..

 

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

Ссылка на сообщение
Поделиться на других сайтах
Только что, Kelny сказал:

ведь вы окно хотите вывести вперёд, а не Solidworks, который и так наверху.

Наоборот, окно солида под окном макроса, а точнее, похоже, под окном редактора VBA, ибо окно MS Word тоже не доступно..
 

Ссылка на сообщение
Поделиться на других сайтах
21 минуту назад, ILL сказал:

Наоборот, окно солида под окном макроса, а точнее, похоже, под окном редактора VBA, ибо окно MS Word тоже не доступно..

Значит не правильно вас понял.

То есть нужно, что бы запущенный макрос и его окно не блокировал программу?

Тогда:

UserForm1.Show vbModeless

 

По умолчанию запускается блокируя программу:

 UserForm1.Show vbModal

или

 UserForm1.Show
Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах
Только что, Kelny сказал:

То есть нужно, что бы запущенный макрос и его окно не блокировал программу?


 

Да..

 

Только что, Kelny сказал:

Тогда:


Завтра попробую..

 

Изменено пользователем ILL
Ссылка на сообщение
Поделиться на других сайтах

Private Sub UserForm_Initialize()
....
HWND_UF = FindWindow(vbNullString, My_US_Form1.Caption)
Res = SetWindowPos(HWND_UF, -1, 0, 0, 0, 0, &H1)
....

и так далее

End Sub

Ссылка на сообщение
Поделиться на других сайтах
20 часов назад, Kelny сказал:

UserForm1.Show vbModeless


Работает..
 


 

20 часов назад, Kelny сказал:

По умолчанию запускается блокируя программу:


Раньше не блокировал..

 

20 часов назад, v-david сказал:

Private Sub UserForm_Initialize()
....
HWND_UF = FindWindow(vbNullString, My_US_Form1.Caption)
Res = SetWindowPos(HWND_UF, -1, 0, 0, 0, 0, &H1)
....

и так далее

End Sub


Это  мне?? И что там "и так далее"?? И нужно ли оно мне??
 

Изменено пользователем ILL
Ссылка на сообщение
Поделиться на других сайтах

вот не знаю кому это...  vbModeless какой-то бомжацкий вариант "выдачи сообщений". 

На переднем плане отобразить сообщение можно и так: 

 Message = "Ваш текст"
 value = swApp.SendMsgToUser2(Message, swMbInformation, swMbOk)

То, что я привел выше дает Вам инструмент управления окнами

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, v-david сказал:

сообщение можно и так

А теперь представьте когда-то любимый глюк макросов Леона: окно макроса поверх всех окон, сообщение тоже пытается быть поверх всех окон. Форма висит на переднем плане, сообщение за ней - и оба модальные))) В таскбаре винды не появляются - ибо выполняются внутрях пространства солида.

Это я не к вам конкретно, а вообще к модальным окнам.

Ссылка на сообщение
Поделиться на других сайтах
В 9 июня 2017 г. в 23:40, v-david сказал:

вот не знаю кому это...


Наверно, все-таки мне..


 

В 9 июня 2017 г. в 23:40, v-david сказал:

На переднем плане отобразить сообщение можно и так:

 Message = "Ваш текст"
 value = swApp.SendMsgToUser2(Message, swMbInformation, swMbOk)


Мне не сообщение было нужно, а доступ к окну солида в то время, когда макрос запущен..

 

В 9 июня 2017 г. в 23:40, v-david сказал:

 vbModeless какой-то бомжацкий вариант "выдачи сообщений".


Тем не менее, именно это дало нужный мне результат..


 

В 9 июня 2017 г. в 23:40, v-david сказал:

То, что я привел выше дает Вам инструмент управления окнами


Я так и подумал.. Но не понял, как это поможет именно в моей ситуации..


 

В 8 июня 2017 г. в 20:29, ILL сказал:


 

Цитата


Ошибка при окрытии файла макроса.

Система может быть в нестабильном состоянии.


Не??


Нашел решение тут:

http://forum.dwg.ru/showthread.php?t=138400


 

Цитата


Здесь на англоязычном форуме обсуждали. Вкратце: если SW лицензионная - можно обратиться в поддержку, они вскроют swp и сбросят открытый текст макроса. 
 Также из ссылок в указанной теме: Иногда помогает открыть макрос в другой версии SW.

 


Открыл на другом компе в SW12, сохранил, снова в SW15 открываться стал..






 

Изменено пользователем ILL
Ссылка на сообщение
Поделиться на других сайтах
  • 3 недели спустя...

Доброго времени суток!

Прошу подсказать кто сталкивался с подобным а АПИ:

Есть ли какая то возможность сделать свой кастомный элемент, чтобы он отображался в дереве конструирования?

один из примеров работы, это: выделение пользователем двух плоскостей. в интерфейс элемента.  В результате алгоритм считает расстояние между ними и записывает в глобальную переменную.

В более сложно варианте предполагается, что при обновлении алгоритм проверяет элементы детали на предмет одинаковости, с другой, шаблонной деталью, и при необходимости, добавляет.

 

Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, maxfox сказал:

Есть ли какая то возможность сделать свой кастомный элемент, чтобы он отображался в дереве конструирования?

Есть пример центра масс и изменения элемента при изменении детали:

 

CenterOfGravity.zip

Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте. Прошу помочь в решении маленькой проблеммы. Пишу макрос для пакетного сохранения открытых чертежей.

Смысл такой - открывается пачка чертежей, и с них сохраняются пдф.

Сбоит в типах данных. Я не совсем понимаю как работает метод GetDocuments. Он вроде бы что то присваивает массиву vModels

Причем первая половина массива - видимо модели, на которые ссылаются чертежи.

Dim swApp As Object
Dim Part As Object
Dim vModels As Variant
Dim swModel As SldWorks.ModelDoc2
Public swDraw As SldWorks.DrawingDoc
Public swView As SldWorks.View
Dim boolstatus As Boolean
Dim ok As Boolean

Dim DocCount As Integer

Sub Start()

Dim varTemp As Integer
Dim varStr As String

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

DocCount = swApp.GetDocumentCount
vModels = swApp.GetDocuments

Set swModel = swApp.ActiveDoc

For i = DocCount / 2 To DocCount - 1
    
    Set swModel = vModels(i)
    'Set swModel = swApp.ActiveDoc
    If swModel.GetType <> swDocDRAWING Then
        MsgBox "Ia ?a?oa?"
        'Exit Sub
    End If
    
    pAdress = swModel.GetPathName()
    Main
    ModelName = swModel.GetTitle
    swApp.CloseDoc ModelName
        
Next


End Sub


Sub Main()

Dim MdlType(2) As String

drwInd = swModel.CustomInfo("Eiaaen?")

Set swDraw = swModel
Set swSheet = swDraw.GetCurrentSheet
Set swView = swDraw.GetFirstView
Set swView = swView.GetNextView
Set swModel = swView.ReferencedDocument

 

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

Опять дождь :sad:. Прошу подсказок, vba для начинающих. Траверсю сборку, гашу все подсборки с разделом Комплекты в свойствах пользователя , прогоняю разные выборки для получения перечней в екселе. После получения перечней хочу убрать погашение с тех компонентов которые ранее погасил. Как лучше сделать? Загонять гасимые компоненты в массив? Потом считывать массив и высвечивать ? Или есть вариант проще, при условии, что в сборке могут быть другие погашеные компоненты которые высвечивать не нужно ? 

 

Ссылка на сообщение
Поделиться на других сайтах
В 30.06.2017 в 12:01, maxfox сказал:

В результате алгоритм считает расстояние между ними и записывает в глобальную переменную.

Зачем макрос то для этого? Чем "датчик" не устраивает?

 

----------------------------------

@ArtemArtemAS  при перечислении 

Цитата

For i

закомментированный 'Exit Sub завершит вообще работу макроса. Читайте - как правильно продолжать циклы.

В 04.07.2017 в 20:27, ArtemArtemAS сказал:

и с них сохраняются пдф

нигде в приведённом коде ничего не сохраняется. Вопрос уточняйте.

 

----------------------------

 

@alek77 создавайте массив с полным именем компонента. По окончании пробежки, пробегайте по массиву, выделяйте по имени компоненты и высвечивайте.

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте. Подскажите пожалуста, как сделать inputbox на vba, для вставки в переменную имени твердого тела.

Ссылка на сообщение
Поделиться на других сайтах

Товарищи, у меня вопрос по примеру "CenterofGravity", где создается свой кастомный элемент в дереве конструирования.

Я решил переложить Код в C#, в рамках аддона, но запнулся вроде как на ровном месте, где создается эскиз и точка.

Я пытаюсь получить координаты центра масс детали:

IModelDoc2 modDoc = iSwApp.IActiveDoc2;
SketchManager skManager = modDoc.SketchManager;

MassProperty massProp = modDoc.Extension.CreateMassProperty();
object inCoord = massProp.CenterOfMass();
.....

на последней строчке выполнение кода просто останавливается. Без каких либо ошибок причем. Даже не знаю, куда копать.

В примере справки, показано получение координат через массив с преобразованием:

double[] coords = null;
coords = (double[])massProp.CenterOfMass();

или так:

double[] @coords;
@coords = (double[])massProp.CenterOfMass();

все варианты не работают одинаково. В чем моя проблема? Я подозреваю, что может в синтаксисе проблема?

Ссылка на сообщение
Поделиться на других сайтах

@maxfox деталь точно содержит твёрдые тела? massProp не null? вы точно в пространстве модели и никакие другие панели или команды не выполняются параллельно?

25 минут назад, maxfox сказал:

выполнение кода просто останавливается

выполнение не может останавливаться. Либо выскакивает ошибка, либо рушится приложение.

 

25 минут назад, maxfox сказал:

все варианты не работают одинаково

что такое "не работают"? :wallbash:

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах
В 17.07.2017 в 07:40, Sla_68 сказал:

Здравствуйте. Подскажите пожалуста, как сделать inputbox на vba, для вставки в переменную имени твердого тела.

Я видимо неправильно сформулировал задачу. Имеется многотельная деталь. Требуется запустить код user form. который вызовет inputbox, для того, чтобы осуществить выбор одного из тел. После выбора необходимо произвести тессиляцию тела и найти плоскость по определенным критериям чтобы произвести на ней действия .

Как произвести действия начиная с тессиляции я уже разобрался. С userform тоже. Но как обратится к телу модели и вызвать последующие действия именно в нем?

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.



×
×
  • Создать...