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

Сделай свою работу в Solidworks эффективнее


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

Чего??? :boxed:

Кнопка(если конечно, я что-то понимаю в программировании) - это есть элемент управления, находящийся на форме, т.е. - "control"

Код отображения кнопки - я имел ввиду КАК выглядит кнопка(кнопки м.б. и не прямоугольными и вообще произвольной формы).

Например, вот часть кода, в котором описывается само окно и кнопки на нем:

------

Begin VB.Form Form1 'начало описания формы Caption = "Form1"

ClientHeight = 2025

ClientLeft = 60

ClientTop = 300

ClientWidth = 5955

LinkTopic = "Form1"

ScaleHeight = 2025

ScaleWidth = 5955

StartUpPosition = 3 'Windows Default

Begin VB.TextBox Text1

Height = 285

Left = 2280

TabIndex = 4

Text = "Text1"

Top = 720

Width = 2055

End 'конец описания формы

Begin VB.CommandButton Command4 'начало описания 1-й из кнопок

Caption = "mainTraverse Comp Ass"

Height = 255

Left = 2160

TabIndex = 3

Top = 120

Width = 2655

End 'конец описания 1-й из кнопки

Begin VB.CommandButton Command3 'начало описания 1-й кнопкb

Caption = "CloseFile_ssv"

Height = 255

Left = 120

TabIndex = 2

Top = 1080

Width = 1815

End 'конец описания 2-й кнопки

....и т.д.

------

Для VB6.0 это необязательно. Там и EXE-то нет

Это я перепутал: в макросах, написанных на VBA для SW нет EXE-шников

Без кнопки макроса программа работает, (т.е. если запускать двойным кликом). Если вы не загружали эту программу и не использовали её, то не надо такого писать.

Какую именно кнопку Вы имеете ввиду: для addin(которая появляется в окне SW) или для EXE-шников-для сторонних плагинов?

Хотя большой разницы между ними не наблюдаю.

В Windows`e кругом окна и контролы... Переведите слово `Windows`

Ну вот взял и написал, чтобы окна так отображались. Моё дело маленькое :smile: просто его использовать.

Это не народ написал, а Microsoft... :rolleyes:

PS. как говорил известный философ Синни-Пух: "По-моему так"

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


Michael_Mira

это прям уже код кнопки.

Имена файла макроса и файла EXE должны совпадать.

Горячими кнопками не пользуюсь, для SW не хватает, поэтому и подсовываю макрос.

Подсовываю не первый раз, поэтому и не допускаю ошибок типа "имя файлов должно совпадать".

Ошибку выбило впервые.

'streamdown' см №2229

Michael_Mira

Я несколько недопонял на какой вопрос ответ, но вот небольшой примерчик, который я очень часто использую:

- в проект VB добавляю модуль с функциями "WIN API", обычно такими:

""""""""""""

Attribute VB_Name = "Module10"

Global Const SWP_NOMOVE = 2

Global Const SWP_NOSIZE = 1

Global Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE

Global Const HWND_TOPMOST = -1

Global Const HWND_NOTOPMOST = -2

'Declare Function SetWindowPos Lib "user32" (ByVal h%, ByVal hb%, ByVal x%, ByVal y%, ByVal cx%, ByVal cy%, ByVal f%) As Integer

'Declare Function SetWindowPos Lib "user32" (ByVal h, ByVal hb, ByVal X, ByVal Y, ByVal cx, ByVal cy, ByVal f) As Integer

Public Declare Function SetWindowPos Lib "user32" ( _

ByVal hwnd As Long, _

ByVal hWndInsertAfter As Long, _

ByVal x As Long, ByVal y As Long, _

ByVal cx As Long, ByVal cy As Long, _

ByVal wFlags As Long) _

As Long

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _

ByVal lpClassName As String, _

ByVal lpWindowName As String) _

As Long

Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" ( _

ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Declare Function GetWindowThreadProcessId Lib "user32" ( _

ByVal hwnd As Long, lpdwProcessId As Long) As Long

Public Declare Function TerminateThread Lib "kernel32" ( _

ByVal hThread As Long, ByVal dwExitCode As Long) As Long

Sub TopMost(hh As Long)

Dim success As Integer

'----- To set the form XXXX to TOPMOST, use the following code:

success = SetWindowPos(hh, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)

'If success <> 0 Then Successful

End Sub

""""""""""""

А в самом коде VB пишу: TopMost(hh As Long), где hh - указатель на форму (окно). После этого окно всегда оказывается "поверх всех".

Вообще, в WIN API оч.много интересных функций: по работе с формами(окнами): можно формаму, например, форму сделать полупрозрачной и пр. и пр.

PS. а такой бяки вроде и нет: "что некоторые окна макросов не запускаются поверх остальных - народ написал код".

ИМХО, скорее всего ошибка в коде....

Как это народ написал код? Влез в Windows?

У меня куча макросов, которые нужно подправить, так вот куда и что нужно дописать, чтобы их окна были поверх всех?
Ссылка на сообщение
Поделиться на других сайтах

У меня куча макросов, которые нужно подправить, так вот куда и что нужно дописать, чтобы их окна были поверх всех?

Может поможет? Только пример.

SW2011SP3, WinXP32

MichMira.rar

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

Горячими кнопками не пользуюсь, для SW не хватает, поэтому и подсовываю макрос.

Подсовываю не первый раз, поэтому и не допускаю ошибок типа "имя файлов должно совпадать".

Ошибку выбило впервые.

У меня куча макросов, которые нужно подправить, так вот куда и что нужно дописать, чтобы их окна были поверх всех?

Для "поверх всех" необхожимо добвить модуль с кодом только лишь:

"Attribute VB_Name = "Module10" <<<========тут данные переменные, номер может быть дугой и происходит это в момент добавдения модуля

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

Global Const SWP_NOMOVE = 2

Global Const SWP_NOSIZE = 1

Global Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE

Global Const HWND_TOPMOST = -1

Global Const HWND_NOTOPMOST = -2

Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

'Declare Function SetWindowPos Lib "user32" (ByVal h%, ByVal hb%, ByVal x%, ByVal y%, ByVal cx%, ByVal cy%, ByVal f%) As Integer

Public Sub TopMost(hh As Variant)

Dim success As Integer

'----- To set the form XXXX to TOPMOST, use the following code:

success% = SetWindowPos(hh, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)

' success% <> 0 When Successful

rr = 2

End Sub

"

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

Затем жмем Ctrl+F - поиск по всему проекту и ищем строчки:

Form1.Show (или какое-то другое имя формы) и после этого оператора пипем строку:

TopMost (Form1.hwnd) <<<=== вот это как раз и отвечает за расположение окон: поверх или нет.

Вообще-то есть и друго

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

TopMost (Form1.hwnd) <<<=== вот это как раз и отвечает за расположение окон: поверх или нет.

По моему, в VBA так не получится. Там нет у формы свойства hwnd. То есть его найти надо. Двумя постами выше выложен макрос, где хендл формы ищется с помощью WinAPI функции FindWindow (хотя и с некоторым недостатком), а затем используется и SetWindowPos...
Ссылка на сообщение
Поделиться на других сайтах

По моему, в VBA так не получится.

Так и есть. Вроде как-то так:

'Объявляем константы

Const SWP_NOMOVE = 2

Const SWP_NOSIZE = 1

Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE

Const HWND_TOPMOST = -1

Const HWND_NOTOPMOST = -2



'WinAPI поиск окна по тексту заголовка окна

Private Declare Function FindWindowExW& Lib "user32" (ByVal hParent&, ByVal hChildAfter&, ByVal lpClassW&, ByVal lpTitleW&)

'WinAPI для изменение положения окна, в том числе поверх всех окон

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long



Private Sub UserForm_Activate()

Dim windowHWND As Long 'Переменная для записи HWND

Dim meCap As String 'Переменная для временного хранения заголовка окна

meCap = Me.Caption 'Временно сохраняем заголовок окна

Me.Caption = Me.Caption & Hex$(Now) & Hex$(Timer) 'Заменяем заголовок на заголовок с маловероятным существованием

windowHWND = FindWindowExW(0, 0, StrPtr("ThunderDFrame"), StrPtr(Me.Caption)) 'Находим окно и узнаём его HWND

Me.Caption = meCap 'Восстанавливаем заголовок окна

SetWindowPos windowHWND, HWND_TOPMOST, 0, 0, 0, 0, FLAGS 'Меняем положение окна на поверх всех окон



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

Может поможет? Только пример.

SW2011SP3, WinXP32

еще не успел скачать именные файлы, а уже 3 скачавания)))

Спасибо, посмотрю.

Проверил, работает безупречно.

Теперь осталось осмыслить, как этот код прислонить ко всем моим макросам.

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

Проверил, работает безупречно.

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

Теперь осталось осмыслить, как этот код прислонить ко всем моим макросам.

Еще код Kelny посмотри. Особо обрати внимание на временное изменение заголовка формы на заголовок с маловероятным существованием.
Ссылка на сообщение
Поделиться на других сайтах

временное изменение заголовка формы

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

это для случая 2-х открытых одинаковых окон? Или когда макрос 2 раза запущен?

Это когда два и более окна (формы) могут иметь одинаковый заголовок. По лености или какому то другому случаю.
Ссылка на сообщение
Поделиться на других сайтах

StrPtr("ThunderDFrame")

а почему так? Тоесть: это делается в процессе? Судя по msdn какой то класс нужно регистрировать.

Или так - что делает этот параметр?

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

По моему, в VBA так не получится. Там нет у формы свойства hwnd. То есть его найти надо. Двумя постами выше выложен макрос, где хендл формы ищется с помощью WinAPI функции FindWindow (хотя и с некоторым недостатком), а затем используется и SetWindowPos...

Видимо так и есть, но дело в том, что я на VB6.0 все делаю (=> *.exe файл получаю)...
Ссылка на сообщение
Поделиться на других сайтах

а почему так? Тоесть: это делается в процессе? Судя по msdn какой то класс нужно регистрировать.

Дополнительно ни чего не объявлял.

StrPtr - возвращает адрес буфера строки ЮНИКОДА.

Источник: <noindex>http://support.microsoft.com/kb/199824</noindex>

Или так - что делает этот параметр?

StrPtr("ThunderDFrame") возвращает число, тип Long

Стоит учесть и ещё один момент:

Предупреждение: Один или несколько из следующих функций описанные в этой статье; VarPtr VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. Эти функции не поддерживаются службой технической поддержки корпорации Майкрософт. Они не описаны в документации по Visual Basic и в этой статье базы знаний «как есть». Корпорация Майкрософт не гарантирует, что они будут доступны в будущих версиях Visual Basic.

Источник: <noindex>http://support.microsoft.com/kb/194636/ru</noindex>

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

Всем привет!

Хотел бы лично поблагодарить товарищей создающих макросы и программки и немало важно выкладывающих их для общего пользования и упрощения нашей с вами жизни!!!!! :clap_1: СПАСИБО!!!

Есть такой замечательный макрос OsnovnayaNadpis_Beta_2.4, но беда в том что он вносит все изменения в файл чертежа, а не модели. Это оч неудобно потому как для оформления спецификации приходиться все свойства в модели вбивать заново: либо руками, либо через другой макрос.

У меня есть небольшая просьба возможно ли переделать макрос OsnovnayaNadpis так что бы он вносил изменения в файл модели.

Или же сделать отдельный макрос для заполнения свойств материала (Заготовку, Типоразмер, Материал) в штампе чертежа со своей базой как это реализовано в макросе ТТ. Ибо в 2009 SW есть стандартная менюшка с настраиваемыми свойствами модели, а свойства материала забивать крайне не удобно и они постоянно съезжают. А такой макрос + макрос ТТ было бы отличным решением для тех кто использует минимальный набор макросов и SW 2009 и выше.

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

DrokMor

Используйте пакет макросов Леона (<noindex>Спецификация для SW по ГОСТ</noindex>) - там всё ОК...

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

DrokMor

Используйте пакет макросов Леона (<noindex>Спецификация для SW по ГОСТ</noindex>) - там всё ОК...

Да я бы с удовольствием, но беда в другом на работе стоит SW2008 SP4.0, а дома SW2009. Дома я с удовольствием использую названную тобой программу, а вот на работе где собственно и проходит больше всего времени в оформлении чертежей приходиться изворачиваться с макросами и использовать по 2 разных (один при проектировании модели, второй при оформлении чертежа) для заполнения свойств. Вот я и подумал что было бы не плохо либо <noindex>Спецификация для SW по ГОСТ</noindex> оптимизировать для SW2008 или же доработать OsnovnayaNadpis_Beta_2.4. :lighten:
Ссылка на сообщение
Поделиться на других сайтах

но беда в другом на работе стоит SW2008 SP4.0, а дома SW2009.

В смысле, что с 2008 не работают последние версии макроса или не совместимость версий???

Если нужен макрос под СВ2008, то можно проискать (у меня вроде где-то завалялось) или пообщаться с Леоном (через ЛС) на предмет совмещения макросов с СВ2008...

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

Не могу решить следующие задачи:

Первая: необходимо макросом записать в свойства детали материал из альтернативной базы материалов (НЕ из "SolidWorks Materials.sldmat"), которая в перечне доступных баз имеется и часто используется для ручной записи материала.

Обычно использую для записи материала метод:

Part.SetMaterialPropertyName2 Конфигурация, "SolidWorks Materials.sldmat", НаименованиеМатериала

Пытался реализовать в виде:

Part.SetMaterialPropertyName2 Конфигурация, "АльтернативнаяБазаМатериалов.sldmat", НаименованиеМатериала

При исполнении происходит ошибка (материал молча не назначается). При указании полного пути к файлу ".sldmat" результат такой же.

Вторая нерешенная и нужная задача - запись плотности материала в конфигурацию детали (т.е. разная плотность для конфигураций).

Правильно ли я понимаю, что такой возможности в принципе не существует:

все ухищрения приводили к записи плотности в целом по детали, вручную SW также не дает это сделать.

Буду признателен если кто-либо поделится соображениями

SW2009 SP4.1, WinXP SP3.0

Товарищи, еще не потерял надежду, что вопрос решится. Очень надо сделать запись материала из альтернативной базы SW.

Ни в SW2009, ни в 2010 ничего не записывается при любой форме указания базы материалов.

Пытался даже подсунуть вместо альтарнативной базы копию дефолтной - результата нет.

Код

Part.SetMaterialPropertyName2 "По умолчанию", "c:\materials.sldmat", "Простая углеродистая сталь"

молча не записывает ничего

Если сюда же записать ссылку на дефолтную базу SW (без разницы как "C:\Program Files\SolidWorks Corp\SolidWorks\lang\russian\sldmaterials\solidworks materials.sldmat", или "solidworks materials.sldmat" или прото "") - все работает.

Каталог расположения альтернативной базы зарегистрирован в "Месторасположение файлов/Базы материалов", пробовал даже исключать кириллицу из пути - ничего.

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

Товарищи, еще не потерял надежду, что вопрос решится. Очень надо сделать запись материала из альтернативной базы SW.

Ни в SW2009, ни в 2010 ничего не записывается при любой форме указания базы материалов.

Пытался даже подсунуть вместо альтарнативной базы копию дефолтной - результата нет.

Код

Part.SetMaterialPropertyName2 "По умолчанию", "c:\materials.sldmat", "Простая углеродистая сталь"

молча не записывает ничего

Если сюда же записать ссылку на дефолтную базу SW (без разницы как "C:\Program Files\SolidWorks Corp\SolidWorks\lang\russian\sldmaterials\solidworks materials.sldmat", или "solidworks materials.sldmat" или прото "") - все работает.

Каталог расположения альтернативной базы зарегистрирован в "Месторасположение файлов/Базы материалов", пробовал даже исключать кириллицу из пути - ничего.

SW2011SP3 английский интерфейс, WinXPx32. Функция SetMaterialPropertyName2 работает без проблем. Да и в SW2009, и в SW2010 вроде как проблем тоже не было.

Попробуйте подложить вашу базу по дефолтному пути.

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

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

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

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

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

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

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

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

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

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

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




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