| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| On-Demand-Webinare zu SolidCAM (SolidCAM) |
Autor
|
Thema: Dateinamen im SaveAs-Dialog vorbelegen (2124 mal gelesen)
|
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 18. Jul. 2016 09:16 <-- editieren / zitieren --> Unities abgeben:
Hallo und Guten Tag, dies ist mein erster Beitrag hier in diesem Forum, darum möchte ich mich erst mal bei Euch vorstellen. Ich arbeite als Softwareentwickler bei einer mittelständischen Firma, die verschiedene Arten von Wärmeaustauschern produziert. Im Bereich CAD habe ich Erfahrung mit AutoCAD bis Version R14, das ist also schon eine Weile her. :-) Seit Anfang März diesen Jahres (2016) arbeite ich mit der SolidWorks-Api-Schnittstelle(Windows 7 Professionel SP1, SolidWorks 2015 SP5.0 X64 Edition), die ich über ein in VC6 geschriebenes Programm ansteuere. Ziel meiner Arbeit ist es, nach der Eingabe einer Kennziffer automatisch ein PART oder ASSEMBLY zu erzeugen. Um das Ziel zu erreichen, arbeite ich eng mit einigen Konstrukeuren aus unserem Hause zusammen. Dank der sehr guten und ausführlichen Online-Dokumentation und den vielen Programmierbeispielen zur SolidWorks-Api-Schnittstelle konnte ich bisher viel erreichen und zahlreiche PARTS werden schon automatisiert und parameterisiert erzeugt. Jetzt stehe ich allerdings vor einem vermutlich einfachen Problem, wo ich weder mit einer Google-Suche noch mit einer Recherche in der SolidWorks-Online-Dokumentation weiter komme. Deshalb stelle ich die Frage hier. Frage: Wie kann ich bei einer gerade eben erzeugten PARTS- oder ASSEMBLY-Datei den zukünftigen Dateinamen im SaveAs-Dialog vorbelegen? Einen Screenshot habe ich zur Verdeutlichung beigelegt. Vielen Dank im Vorraus für Eure hilfreichen Tips [Diese Nachricht wurde von SWX-Quäler am 18. Jul. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 18. Jul. 2016 10:35 <-- editieren / zitieren --> Unities abgeben: Nur für SWX-Quäler
Hallo! Den SaveAs-Dialog würde ich bei einem Makro gar nicht nutzen, sondern nur mit Code: value = instance.SaveAs(Name, Version, Options, ExportData, Errors, Warnings)
(falls du VBA nutzt ;) ) arbeiten. Wenns denn unbedingt sein muss, kann man noch mittels Code: object.GetFolder(folderspec)
oder ähnlichen eine Abfrage zum Zielordner einbauen. Brauchts aber in der Regel auch nicht, da der meistens auch vorher schon feststeht. Gruß, Jens ------------------ CSWA, CSWP =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 18. Jul. 2016 10:42 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich denke, Du hast meine Frage nicht verstanden und auch meinen Beitrag nicht gelesen, denn dann wüsstest Du, dass ich mit VC6 arbeite. Ich will SaveAs nicht benutzen. Meine Frage lautet: "Wie kann ich bei einer gerade eben erzeugten PARTS- oder ASSEMBLY-Datei den zukünftigen Dateinamen im SaveAs-Dialog vorbelegen?" Ich ersetze mal das Wort "SaveAs-Dialog" durch "Speichern unter-Dialog". Hast Du Dir mal meinen Screenshot dazu angeschaut? Dann wirds deutlicher, was ich will. [Diese Nachricht wurde von SWX-Quäler am 18. Jul. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 18. Jul. 2016 11:15 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, die folgenden Befehle habe ich ausprobiert, leider ohne Erfolg. IModelDoc2.SetTitle2("Mein_Wunsch_DateiName.SLDPRT"); IModelDoc2.SetSaveAsFileName("Mein_Wunsch_DateiName.SLDPRT"); ISldWorks.SetNewFilename("Mein_Wunsch_DateiName.SLDPRT"); [Diese Nachricht wurde von SWX-Quäler am 18. Jul. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 18. Jul. 2016 11:33 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Winni-two: Hallo,such mal in der API-Hilfe unter SetTitle2 - damit kannst du den Namen der Zeichnung/Teil/Baugruppe setzen. Ich glaube das ist das was du suchst. Gruss Winni
Vielen Dank,
funktioniert nicht. Da wird nur der Titel des Dokuments geändert. Sieh mein Beitrag direkt über Deinem.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Winni-two Mitglied Ing. Maschb.
Beiträge: 154 Registriert: 12.03.2010 SW 2021 SP5 Intel Xenon W2135 @3.7GHz Win 10 64 bit Graka: Nvidia Quadro P4000 32 GB Ram
|
erstellt am: 18. Jul. 2016 11:40 <-- editieren / zitieren --> Unities abgeben: Nur für SWX-Quäler
Also wenn ich folgendes Macro starte: Sub main() Dim swApp As Object Dim Teil As Object Dim BOOLSTATUS As Boolean Set swApp = CreateObject("SldWorks.Application") Set Teil = swApp.ActiveDoc BOOLSTATUS = Teil.SetTitle2("Test") End Sub Kommt dann unter speichern unter der Name Test.SLDPRT Gruss Winni Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 18. Jul. 2016 12:53 <-- editieren / zitieren --> Unities abgeben: Nur für SWX-Quäler
Zitat: Original erstellt von SWX-Quäler: Hallo,ich denke, Du hast meine Frage nicht verstanden und auch meinen Beitrag nicht gelesen, denn dann wüsstest Du, dass ich mit VC6 arbeite.
Ich habe sowohl deinen Beitrag gelesen als auch (denke ich zumindest) deine Frage verstanden. Auf das VC6 konnte (und kann) ich mir keinen Reim machen; als ich danach gegoogelt habe, waren die ersten 10 Treffer Links zu Staubsaugern, daher nur der VBA-Code. I.d.R. geht es ja einfach nur darum, die richtigen Stichwörter zu finden. Zitat: Ich will SaveAs nicht benutzen.
Ohne jetzt nach dem "Warum denn nicht?" zu fragen: Das steht nirgends und meine Kristallkugel ist grad im wohlverdienten Sommerurlaub. Zitat:
Meine Frage lautet: "Wie kann ich bei einer gerade eben erzeugten PARTS- oder ASSEMBLY-Datei den zukünftigen Dateinamen im SaveAs-Dialog vorbelegen?"Ich ersetze mal das Wort "SaveAs-Dialog" durch "Speichern unter-Dialog". Hast Du Dir mal meinen Screenshot dazu angeschaut? Dann wirds deutlicher, was ich will.
Da dir der alternative Lösungsweg (scheinbar) nicht gefällt, kann ich dir leider auch nicht weiterhelfen. Gruß, Jens ------------------ CSWA, CSWP =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 18. Jul. 2016 12:55 <-- editieren / zitieren --> Unities abgeben:
Mein Workflow geht so: Mein VC6-Programm steuert SolidWorks per API und lädt eine Masterdatei, befüllt die darin enthaltenen custom properties, setzt das Mateial, liest Bohrungskoordinaten usw. Wenn alle Arbeitsschritte abgearbeitet sind, möchte ich einen neuen Dateinamen vorbelegen. ich habe jetzt mal etwas mit IModelDoc2.SetTitle2("Test") rumgespielt. Wenn die Masterdatei NICHT schreibgeschützt ist, dann kann ich den Namen NICHT in "Test" ändern; der Rückgabewert von SetTitle2() ist false. Wenn die Masterdatei schreibgeschützt ist, dann kann ich den Namen in "Test" ändern; der Rückgabewert von SetTitle2() ist true. Beachte meine Screenshots: Das erste Bild zeigt den Zustand NICHT schreibgeschützt, das zweite Bild den Zustand schreibgeschützt. Im zweiten Bild wird nur der Windows-Titel auf "Test" geändert, nicht aber der Dateiname im Speichern-Dialog bzw. im Speichern unter-Dialog. Leider ist Dein Vorschlag für mich nicht brauchbar. Ich möchte erreichen, das der Dateiname im Speichern-Dialog bzw. im Speichern unter-Dialog "Test" enthält. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 18. Jul. 2016 12:58 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CAD-Maler:
Da dir der alternative Lösungsweg (scheinbar) nicht gefällt, kann ich dir leider auch nicht weiterhelfen. Gruß, Jens
VC6 = Microsoft Visual C++ Version 6.0 Ich will nicht speichern, sondern nur den Dateinamen in geeigneter Weise vorbelegen. Dein Vorschlag speichert mein Dokument und geht somit am Thema vorbei. [Diese Nachricht wurde von SWX-Quäler am 18. Jul. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 18. Jul. 2016 14:15 <-- editieren / zitieren --> Unities abgeben: Nur für SWX-Quäler
Zitat: Original erstellt von SWX-Quäler: Ich will nicht speichern, sondern nur den Dateinamen in geeigneter Weise vorbelegen.
Danke für die Info zu C++. Jetzt muss ich die provokante Frage doch mal noch stellen: Wozu willst du im Speichern-Unter-Dialog einen Dateinamen festlegen, wenn du dann nicht speichern willst bzw. der Nutzer später nicht auf Speichern klicken soll? Das Zwischenziel, das du mit deiner Frage/Programmierung erreichen willst, ist schon klar, nur was hinten raus kommen soll, nicht. Wenn es für das Zwischenziel keinen sinnvollen Weg gibt, gibt es vielleicht einen anderen, um das Endziel zu erreichen!? Es steht dir völlig frei, dich auf das Eintragen eines (temporären?) Dateinamens zu versteifen, aber in dem Punkt kann ich dir, wie schon erwähnt, nicht helfen. Gruß, Jens ------------------ CSWA, CSWP =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 18. Jul. 2016 14:24 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CAD-Maler:
Danke für die Info zu C++. Jetzt muss ich die provokante Frage doch mal noch stellen: Wozu willst du im Speichern-Unter-Dialog einen Dateinamen festlegen, wenn du dann nicht speichern willst bzw. der Nutzer später nicht auf Speichern klicken soll? Das Zwischenziel, das du mit deiner Frage/Programmierung erreichen willst, ist schon klar, nur was hinten raus kommen soll, nicht. Wenn es für das Zwischenziel keinen sinnvollen Weg gibt, gibt es vielleicht einen anderen, um das Endziel zu erreichen!? Es steht dir völlig frei, dich auf das Eintragen eines (temporären?) Dateinamens zu versteifen, aber in dem Punkt kann ich dir, wie schon erwähnt, nicht helfen. Gruß, Jens
Wie schon geschrieben, lade ich eine Masterdatei "MASTER_XYZ.SLDPRT", beschreibe die Custom Properties und lasse die Datei mittels EditRebuild3() neu zeichen.
1) Ich möchte nicht, das meine Programmanwender die Datei "MASTER_XYZ.SLDPRT" überschreiben, deshalb will ich den Dateinamen sinnvoll nach einem hier im Hause vorgegebenen Schema vorbelegen. 2) Ich kann nicht wissen, ob meine Programmanwender den vorgegeben Dateinamen so haben wollen. Z.B. kommt es vor, dass noch ein Zusatz zum Dateinamen hinzugefügt werden soll. Diese Option will ich nicht verbauen. 3) Das ist eine Vorgabe von unseren Konstrukteuren. [Diese Nachricht wurde von SWX-Quäler am 18. Jul. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Winni-two Mitglied Ing. Maschb.
Beiträge: 154 Registriert: 12.03.2010 SW 2021 SP5 Intel Xenon W2135 @3.7GHz Win 10 64 bit Graka: Nvidia Quadro P4000 32 GB Ram
|
erstellt am: 18. Jul. 2016 14:34 <-- editieren / zitieren --> Unities abgeben: Nur für SWX-Quäler
Hallo, du könntest dann per Macro das geladene Teil neu abspeichern und das neu gespeicherte Teil per Macro im Ordner wieder löschen. Nicht besonder elegant - müsste aber funktionieren. Gruss Winni Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 18. Jul. 2016 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für SWX-Quäler
Ich bin der Überzeugung, dass es einfacher, schneller und sicherer ist, eine kleine Userform (siehe Anhang) zu programmieren, als den Nutzer im Speichern-Unter-Dialog "rumpfuschen" zu lassen. In der Textbox kannst du ohne Probleme den Wunsch-Dateinamen nach dem Benennungsschema hinterlegen. Falls der Konstrukteur was daran ändern will, kann er das direkt da tun. Den Wert kannst du dann wieder auslesen und fürs Speichern den Namen draus basteln. Dito fürs Speicher-Verzeichnis. Und Hand aufs Herz: Auf Vorlagen jedweder Art gehört prinzipiell Schreibschutz drauf. Gruß, Jens ------------------ CSWA, CSWP =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 18. Jul. 2016 15:05 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CAD-Maler: Ich bin der Überzeugung, dass es einfacher, schneller und sicherer ist, eine kleine Userform (siehe Anhang) zu programmieren, als den Nutzer im Speichern-Unter-Dialog "rumpfuschen" zu lassen.
Nicht der User hat darauf Zugriff, sonder ich, der Entwickler. Außerdem sind alle Speicherpfade vorgegeben. Wir schweifen jetzt aber vom eigentlichen Thema ab.
Zitat: Original erstellt von CAD-Maler: Und Hand aufs Herz: Auf Vorlagen jedweder Art gehört prinzipiell Schreibschutz drauf.
Die Vorlagen sind schreibgeschützt; später werden sie aus dem EPDM ausgecheckt. Das war aber nicht Thema meiner Frage. [Diese Nachricht wurde von SWX-Quäler am 18. Jul. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 18. Jul. 2016 16:02 <-- editieren / zitieren --> Unities abgeben: Nur für SWX-Quäler
Hallo SWX -Quäler IModelDoc2.SetTitle2("Mein_Wunsch_DateiName.SLDPRT"); -Funktioniert nur bei neuen aus einer Vorlage (*.prtdot,*.asmdot,*.drwdot) erstellten und noch nicht gespeicherten Dokumenten IModelDoc2.SetSaveAsFileName("Mein_Wunsch_DateiName.SLDPRT"); -Funktioniert nur im FileSaveAsNotify2EventHandler ISldWorks.SetNewFilename("Mein_Wunsch_DateiName.SLDPRT"); -Funktioniert nur im FileNewPreNotifyEventHandler Mein Vorschlag wäre deine "MASTER_XYZ.SLDPRT" zu "MASTER_XYZ.PRTDOT" (Vorlage-Datei) umzuspeichern. Diese kannst du dann mit
Code: Set Teil = swApp.NewDocument("\\Pfad\MASTER_XYZ.PRTDOT", 0, 0, 0)
laden. Dann funktioniert das SetTitle2 auch wie es sollte. Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 19. Jul. 2016 10:04 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von HenryV: Hallo SWX-QuälerIModelDoc2.SetTitle2("Mein_Wunsch_DateiName.SLDPRT"); -Funktioniert nur bei neuen aus einer Vorlage (*.prtdot,*.asmdot,*.drwdot) erstellten und noch nicht gespeicherten Dokumenten IModelDoc2.SetSaveAsFileName("Mein_Wunsch_DateiName.SLDPRT"); -Funktioniert nur im FileSaveAsNotify2EventHandler ISldWorks.SetNewFilename("Mein_Wunsch_DateiName.SLDPRT"); -Funktioniert nur im FileNewPreNotifyEventHandler Mein Vorschlag wäre deine "MASTER_XYZ.SLDPRT" zu "MASTER_XYZ.PRTDOT" (Vorlage-Datei) umzuspeichern. Diese kannst du dann mit
Code: Set Teil = swApp.NewDocument("\\Pfad\MASTER_XYZ.PRTDOT", 0, 0, 0)
laden. Dann funktioniert das SetTitle2 auch wie es sollte.Gruss Andreas
Hallo, ich habe jetzt mal ein kleines Projekt gestartet und bin nach Deinem Vorgaben vorgegangen. swModel = swApp.NewDocument(MASTER.PRTDOT, swDwgPaperAsize, 0.0, 0.0); bSetTitle = swModel.SetTitle2("700376652433.SLDPRT"); Funktioniert. Vielen Danke für Deine Hilfe. Nachtrag! Ich habe jetzt eine Weile mit der obigen Methode rumgespielt und sie in mein Hauptprojekt eingebaut, wo sie nicht bzw. nur teilweise funktioniert (siehe Screenshot). :-( Blöderweise funktioniert die Methode nun auch in meinem Testprojekt (wo ich es vorher ausprobiert habe und ich seit dem nichts verändert habe) nicht mehr. Wo kann ich noch drann drehen, damit ich mein Ziel erreichen kann? [Diese Nachricht wurde von SWX-Quäler am 19. Jul. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |