| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Innovationstag mit SolidCAM und Plogmann bei HEDELIUS in Meppen |
Autor
|
Thema: API Aufruf Material Dialog-Box (2136 mal gelesen)
|
Ian Malcom Mitglied Konstruktion
Beiträge: 45 Registriert: 27.11.2002 Win7 x64 Pro SP1 2x Xeon(R) E5-2620 v3 32 GB Ram Quadro K4200
|
erstellt am: 16. Jun. 2016 12:55 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich suche verzweifelt nach einer Möglichkeit in VBA (Makro) die Material Dialog-Box aufzurufen um ein Material auszuwählen. Bin für jeden Tipp oder Codeschnipsel dankbar! Gruß, IanMalcom ------------------ "Auf der Schachtel stand WIN98, WIN2000 oder besser. Also habe ich mir einen MAC besorgt ..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 16. Jun. 2016 13:12 <-- editieren / zitieren --> Unities abgeben: Nur für Ian Malcom
Hmm.. da würde ich mir überlegen, einen eigenen, vereinfachten Dialog zu erzeugen, der Originaldialog ist ja für die reine Auswahl total überfrachtet. Die SolidWorks-Materialdatenbank ist ja keine Datenbank, sondern nur eine XML-Datei, aus der du deine Materialnamen auslesen kannst. Die kannst du dann in einer einfachen Listbox zur Auswahl stellen. Und dann mit
Code: Part.SetMaterialPropertyName2 <Konfig-Name>, <Pfad zur Materialdatei *.sldmat>, <Name des Materials>
deinem Teil zuweisen. Würde ich jedenfalls so machen. ------------------ Klaus www.al-ko.com | mein Gästebuch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 16. Jun. 2016 13:27 <-- editieren / zitieren --> Unities abgeben: Nur für Ian Malcom
Hallo, um deine Frage zu beantworten, also einen direkten API-Call zum öffnen des "Material bearbeiten"-Dialog gibt es wahrscheinlich nicht, hab zumindest auf die schnelle keinen gefunden. Du könntest aber mit Hilfe der CommandID den Befehl ausführen.
Code: Option ExplicitDim swApp As Object Dim swModel As Object Dim swModelDocExt As Object Dim boolstatus As Boolean Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swModelDocExt = swModel.Extension swModelDocExt.RunCommand swCommands_EditMaterial, "Open Material Dialog" End Sub
So funktioniert es bei mir zumindest, aber ist schon sehr quick 'n dirty . Ich würde mich dann doch eher Klaus seinem vorgehen anschließen und eine eigene Listbox zum auswählen erzeugen. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 16. Jun. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ian Malcom Mitglied Konstruktion
Beiträge: 45 Registriert: 27.11.2002 Win7 x64 Pro SP1 2x Xeon(R) E5-2620 v3 32 GB Ram Quadro K4200
|
erstellt am: 16. Jun. 2016 13:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, ich würde das Rad ungerne neu erfinden wollen Falls es jedoch keine andere Möglichkeite gibt werde ich diesen Weg wohl in Betracht ziehen müssen. Gruß, IanMalcom ------------------ "Auf der Schachtel stand WIN98, WIN2000 oder besser. Also habe ich mir einen MAC besorgt ..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ian Malcom Mitglied Konstruktion
Beiträge: 45 Registriert: 27.11.2002 Win7 x64 Pro SP1 2x Xeon(R) E5-2620 v3 32 GB Ram Quadro K4200
|
erstellt am: 16. Jun. 2016 13:32 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, das sieht doch nett aus ... werd ich mal ausprobieren. Gruß und danke! ------------------ "Auf der Schachtel stand WIN98, WIN2000 oder besser. Also habe ich mir einen MAC besorgt ..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 16. Jun. 2016 14:37 <-- editieren / zitieren --> Unities abgeben: Nur für Ian Malcom
"swModelDocExt.RunCommand" cool, wieder was gelernt. bei den Optionen zu dem Befehl wird's aber wieder undurchsichtig..da hat es einen Haufen Parameter dabei, die nicht wirklich selbsterklärend sind. Aber für diesen speziellen Fall geht das gut. Ist zugegebener Maßen einfacher als meine Lösung. Hat aber den Nachteil, dass du u.U. ein Versionsproblem bekommen könntest, wenn du mit mehreren SWX-Versionen unterwegs bist.
Zitat: Zitat aus der API-Hilfe: Before using this method, you must add a reference to SolidWorks version Commands type library to access the SolidWorks commands. (Substitute the actual SolidWorks version number for version).
------------------ Klaus www.al-ko.com | mein Gästebuch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 16. Jun. 2016 14:50 <-- editieren / zitieren --> Unities abgeben: Nur für Ian Malcom
Zitat: Hat aber den Nachteil, dass du u.U. ein Versionsproblem bekommen könntest, wenn du mit mehreren SWX-Versionen unterwegs bist.
Hallo Klaus, deswegen ja meine Aussage das es quick 'n dirty ist. Aber hier und da kann man das schon mal gebrauchen auch wenn ich es eher benutze um den richtigen Begriff zu finden in dem ich die CommandID mit logge und dann in der Commandlsit den command hinter dem ausgegebenen Integer suche. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 17. Jun. 2016 08:07 <-- editieren / zitieren --> Unities abgeben: Nur für Ian Malcom
Hallo zusammen, mit den Verweise ist auch nicht so gefährlich, das einzige was man braucht ist die Nummer aus der swcommands Typenbibliothek. Diese Konstanten kann man sich auch selber machen: statt die (versionsabhängige) "Solidworks XXXX Commands Type Library" einzubinden deklariert man gezielt die eine Konstante selbst oder verwndet direkt den Wert (was ich ausdrücklich nicht empfehle, das die Lesbarkeit doch sehr abnimmt). Also oben in Bernds Beispiel einfach noch eine Zeile im Headerbereich: Code: Const swCommands_EditMaterial = 501
und die Verweise sind nicht mehr nötig. Das Hauptproblem bei den Commands-Werten ist eigentlich das Heraustüfteln, welche Konstante mit welcher Dialogbox verbunden ist - meist ist das klar über den Konstantennamen zu Erkennen, aber manchmal ... Zu finden sind diese ganzen Konstanten im Objektviewer (F2) im VBA-Editor, in der MakroMania hab ich auch zumindest bis zur Version 2013 noch Module zum Runterladen, dort ist auch ein Kochrezept zum Selbermachen. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 17. Jun. 2016 08:39 <-- editieren / zitieren --> Unities abgeben: Nur für Ian Malcom
Hallo Stefan, Zitat: ...verwendet direkt den Wert (was ich ausdrücklich nicht empfehle, das die Lesbarkeit doch sehr abnimmt).
Genau so war mein Posting vor dem editieren, aber ich dachte mir der sprechende Name ist besser geeignet wie der reine Zahlenwert. Im Anhang ein Macro zum mitloggen der command ID's falls es jemanden interessiert, hier wird die Command ID beim Starten und beim Beenden eines Befehls geloggt. Hier ist zu beachten das auch commands wie "du hast gerade eine Propertymanagerpage mit OK/Cancel beendet" das Ergebnis sein kann, d.h. nicht hinter jeder geloggten commandID hängt auch tatsächlich ein Befehl. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 17. Jun. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 17. Jun. 2016 12:17 <-- editieren / zitieren --> Unities abgeben: Nur für Ian Malcom
|
Ian Malcom Mitglied Konstruktion
Beiträge: 45 Registriert: 27.11.2002 Win7 x64 Pro SP1 2x Xeon(R) E5-2620 v3 32 GB Ram Quadro K4200
|
erstellt am: 28. Jun. 2016 11:00 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ja ja .... Erstens kommt es anders, zweitens als man denkt und Murphy ist ein ... Nach dem ich recht intensive mit dem API rumgespielt habe … hab ich für mich festgestellt das ich so nicht zu meinem Ziel komme. Ich muss dazu sagen, ich wollte NICHT einem Part ein Material zuweisen (Materialeigenschaften), sondern nur eine Auswahlmöglichkeit erhalten in der ich einen Materialnamen wählen kann. Ja … eben das funktioniert NUR in Parts, in allen anderen Konstellationen wird der API-Aufruf der Dialogbox ignoriert. Ich habe nun den schon von Klaus angedeuteten Weg beschritten … einen eigenen Dialog dazu programmiert. Ergebnis hab ich mal als Bild hochgeladen. Nochmals Gruß und Danke an alle! IanMalcom
------------------ "Auf der Schachtel stand WIN98, WIN2000 oder besser. Also habe ich mir einen MAC besorgt ..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |