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

Сделай свою работу в 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 пользователей

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




  • Сообщения

    • Guhl
      И не лень тебе, дурачку, писать такую простыню было? Иди, лучше, образование получи
    • aleksejj
      Здравствуйте в принципе вопрос закрыт нашел способы. Уже все на чпу отработали и отшлифовали.
    • BASH_HD
      Здравия желаю, знатоки Фанука, покинувшего Россию. Опишу свою проблему: Имеем станок fanuc robodrill 2008 год.   стойка 31i-А.   4 непрерывные оси имеем.   необходимо еще добавить индексную ось. Ладдер имеет подготовку под 5 ось.  Но он видимо универсальный под все рободриллы, а они есть пятиосевые. по дескрипшенам на стойку она поддерживает до 20 осей (4 непрерывных)  и то и другое это опции.   опция расширения от 3 базовых до 4 очевидно уже установлена. но в описании два варианта:   1 вариант:  Controllable axes expansion (each path) (including PMC axes and Cs axes)   2 вариант   Simultaneously controlled axes expansion (each path)   непонятно установлены оба пакета или последний. как они работают взаимо-дополняют друг друга или исключают. Никакой документации по названию опций и как определить какие именно опции установлены в станке я не нашел.   прикладываю информацию, которая может говорить о установленных опциях:   % SYSTEM CONFIGURATION    1.HARDWARE CONFIGURATION      NAME           ID-1     ID-2   SLOT +-------------+----------+--------+----+   MAIN BOARD       MAIN BOARD   00321 30 0                   CPU CARD     0041E 40 0 70000203          SERVO CARD   0010B 20 1                   PMC MODULE   00700 30 0                   FROM/SRAM    C3/03                       DISPLAY          DISP ID      1010                        OTHERS           MDI ID       02                           B.UNIT ID    00                           2.SOFTWARE CONFIGURATION      SYSTEM     SERIES  EDITION  +------------+--------+--------+   CNC(BASIC)     G143     07.0      CNC(OPT A1)    G143     07.0      CNC(OPT A2)    G143     07.0      CNC(OPT A3)    G143     07.0      CNC(MSG ENG)   G143     07.0      CNC(OPT A21)   G143     07.0      CNC(OPT A22)   G143     07.0      BOOT           60W2     0002      PMC(SYSTEM)    40A2     04.0      PMC(LADDER1)   472I       04      PMC(LADDER2)   472L       02      PMC(LAD DCS)   472J       04      SERVO          90ED     0014      SERVO          90E3     0001      SPINDLE-1      9D80     0008      GRAPHIC        60VH     0005      MACRO EXE2     471Y     0001      MACRO MGI-M    BJ12     0003      CEXELIB        GZ0K     02.0      CEXEAPL        472N     0004      MGILIB         GZ0J     02.5      MGIAPL         BX51     0009      NET CONTROL    656S     0002      EMBED ETHER    656R     0003      DEVNT SOFT     6577     0003      %   есть интересные файлы в папке SYSTEM (помимо всех обычных) NC1A OPT NC2A OPT NC3A OPT NCL1 OPT NCD1 OPT       потому вопрос первый - как понять какие опции касающиеся управляемых осей установлены в данный момент и что они позволяют. (понимаю что шанс 1%, но вдруг уже можно добавить ось без доустановки опций) тогда я сразу приобрету драйв и мотор.    вопрос второй - в нынешней ситуации, когда фанук официально никаких опций продать/установить не может   какие существуют варианты это сделать?  может есть смелые посредники официалы соседних стран, или материнскую плату отправить в другую страну и там прошить или же есть успехи хакерские в этом направлении на просторах нашей родины.   Прикладываю разные файлы со всеми параметрами станка. и системные.  OPR INF  тоже прикладываю, может пригодится. главное в чужую стойку не заливать.   да, можно конечно просто через M-коды управлять. сейчас так и подключаю. но это временный костыль. хочется на родном фанук железе все надежно собрать. FULL_PARAMETER_LIST.prm FULL_PARAMETER_LIST.cncidnum MAINTINF.000 OPRM_INF.000
    • Jenny
      Как-то не правильно залилось видео. Черный экран Это разные вещи? Я просто только только осваиваю. До этого сделала точно так же. И все хорошо было.   
    • Нафаня
      Добрый день! Сразу скажу что я не спец по бошертам но эти станки очень похожи на станки трумпф а точнее на их модели предыдущих поколений. Так вот, мне кажется что Вам нужно замерить длинну инструмента и понять от какой точки станок его расчитывает. Станки трумпф отсчитывают длинну инструмента от верхней кромки юстировчного кольца не учитывая хвостовик инструмента. В старых моделях станков трумпф указывалась фактическая длинна и то на сколько вы его сточили. прмер, длинна нового инструмента 38мм, вы его сточили на 1мм и соответственно в поле "переточка" вы указываете 1мм, ЧПУ станка высчитывает глубину погружения пуансона в матрицу. Параметр PU overlap могу предположить что это зазор матрицы для данного инструмента в вашем случае стоит 0.2мм а это значит что инструмент был собран под пробивку металла тощиной 1мм. возможно tool length это ход ползуна, хотя 71.2мм это как то многовато. Мой вам совет, напишите простую программу с одним этим инструментом и меняя параметры посмотрите как ведет себя пуансон.
    • Killerchik
      Команды обычно те же - в смысле М03. Я встречал М код, то есть надо было руками переключить, и ещё М код ввести, при том что на рукоятке были концевики. Но это дичь какая-то. Посмотрите, есть ли на Вашей рукоятке какие-то концевики.
    • Snake 60
    • Александр 36
      Нет  переключил команда s500 m03 стартует и ошибка не только у меня станок с ручным перебором может команда какая то должна быть другая?
    • Herr Kaputt
      Нашел оба установленные Mesh Enabler и threadModeler, в разделе: Инструменты/AutodeskAppManager ...но дальше этого ничего, может опыта не хватает, я его около месяца набегами юзаю, когда деталь для принтера сделать надо
    • Дезигнер
      Литье детали Капельница из полипропилена. На малогабаритном тпа. VID_20240415_231221_531.mp4
×
×
  • Создать...