| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Performance steigern von großen Baugruppen und Zeichnungen mit SOLIDWORKS 2024 |
Autor
|
Thema: API - Alle offenen Dateien anzeigen? (1886 mal gelesen)
|
Bruggmann Mitglied Konstrukteur (& Nachdiplomstudium Software-Engineering)
Beiträge: 85 Registriert: 17.03.2004 Workstation: Fujitsu Siemens P4 3.2GHz 2.0 GB RAM Win XP SP1 - SW2005 SP0.1 (PDM: Smarteam)<P>Laptop: Compaq Evo 800w P4 2GHz 500MB RAM WinXP SP2 - SW2005 SP0.1 (PDM: ec-Manager, eigenes Tool..)
|
erstellt am: 15. Mrz. 2005 08:28 <-- editieren / zitieren --> Unities abgeben:
hi all wie kann ich über die API alle offenen dateien anzeigen lassen? ich rufe ein fenster auf und will alle offenen dateien mit: retval = model.Lock() sperren. oder soll ich das so oder so anders angehen? gruss stefan ------------------ ---------- encom GmbH Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kalle Mitglied Student
Beiträge: 706 Registriert: 14.04.2002
|
erstellt am: 15. Mrz. 2005 08:31 <-- editieren / zitieren --> Unities abgeben: Nur für Bruggmann
Aheu Stefan, versuchs mal mit retval = SldWorks.EnumDocuments2 ( ) Näheres dazu in der API-Hilfe. Bis dann, Kalle ------------------ ----------------------------------------- Es gibt immer mehr Lösungen als Probleme. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bruggmann Mitglied Konstrukteur (& Nachdiplomstudium Software-Engineering)
Beiträge: 85 Registriert: 17.03.2004 Workstation: Fujitsu Siemens P4 3.2GHz 2.0 GB RAM Win XP SP1 - SW2005 SP0.1 (PDM: Smarteam)<P>Laptop: Compaq Evo 800w P4 2GHz 500MB RAM WinXP SP2 - SW2005 SP0.1 (PDM: ec-Manager, eigenes Tool..)
|
erstellt am: 15. Mrz. 2005 08:38 <-- editieren / zitieren --> Unities abgeben:
|
Jens S. Mitglied Dipl.-Ing.
Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 17. Mrz. 2005 16:52 <-- editieren / zitieren --> Unities abgeben: Nur für Bruggmann
Hallo Zusammen, genau das brauche ich auch. :-) Wenn ich das richtig verstanden habe, soll "EnumDocuments2()" mir alle "offenen" Dokumente (geladene Dokumente von SldWorks) liefern?! Allerdings weiss ich nicht, was für ein Typ der retval sein soll? Object wegen POINTER (laut API)? Wenn ich den so setze, bekomme ich eine Fehlermeldung: Lesen ist wegen der Eigenschaft nur Schreiben nicht möglich! Also echt ... jeden Tag ein neues Problem :-) Möchte einmal erleben, dass der schei... Rechner sagt: Jens, überhaupt KEIN Problem! :-) Lg JENS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kalle Mitglied Student
Beiträge: 706 Registriert: 14.04.2002
|
erstellt am: 17. Mrz. 2005 17:47 <-- editieren / zitieren --> Unities abgeben: Nur für Bruggmann
Aheu Jens, füge Dim retval As SldWorks.EnumDocuments2 in Deinen Deklarationsblock ein und schon geht's. Bis dann, Kalle ------------------ ----------------------------------------- Es gibt immer mehr Lösungen als Probleme. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kalle Mitglied Student
Beiträge: 706 Registriert: 14.04.2002
|
erstellt am: 17. Mrz. 2005 17:56 <-- editieren / zitieren --> Unities abgeben: Nur für Bruggmann
Aheu Jens, ich glaub ich führ das mal noch etwas mehr aus, sonst kommt gleich die nächste Frage, da die API-Hilfe was das angeht ziemlich für'n Eimer ist (da gehört ein ordentliches Beispiel rein). Hier mal eins was die nacheinander eine MessageBox mit dem Titel der ersten zwei Teile ausgibt: Dim swApp As SldWorks.SldWorks Dim ListOfDocuments As SldWorks.EnumDocuments2 Dim swModel As SldWorks.ModelDoc2 Dim lngDummy As Long Sub main() Set swApp = Application.SldWorks Set ListOfDocuments = swApp.EnumDocuments2() ListOfDocuments.Next 1, swModel, lngDummy MsgBox swModel.GetTitle ListOfDocuments.Next 1, swModel, lngDummy MsgBox swModel.GetTitle End Sub ListOfDocuments.Next kriegt als ersten Parameter die Anzahl der Documente (Objekte), die es in ein Array von eben dieser Größe (der zweite Parameter) schreibt. Im Normalfall wird's wohl bei 1 und der normalen swModel Deklaration bleiben. In lngDummy wird dann noch reingeschrieben wieviele Documente übergeben worden sind (Du könntest ja mehr angeben als eigentlich offen sind). Neben Next gibt's da auch noch Skip (Elemente überspringen), Reset (die Liste wieder an den Anfang zurücksetzen) und Clone (was wohl kaum jemand brauchen wird). Ich hoffe Du kannst hiermit ein bisschen was anfangen. Bis dann, Kalle ------------------ ----------------------------------------- Es gibt immer mehr Lösungen als Probleme. 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: 18. Mrz. 2005 07:58 <-- editieren / zitieren --> Unities abgeben: Nur für Bruggmann
|
Jens S. Mitglied Dipl.-Ing.
Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 18. Mrz. 2005 09:56 <-- editieren / zitieren --> Unities abgeben: Nur für Bruggmann
Hallo Jungs, danke Kalle, für den QuellText. :-) Wenn ich das richtig verstanden habe (wahrscheinlich NEIN! :-)), dann ist "ListOfDocuments.Next 1, swModel, lngDummy" bzw. "ListOfDocuments" ein Zeiger, der auf die Liste der offenen Dokumente zeigt?! Und durch die Anweisung .Next1 "einfach" dazu gebracht wird auf das nächste Dokument zu zeigen!? Richtig?! "lngDummy" habe ich noch nicht so recht verstanden! :-) Ich denke aber, dass es etwas mit "wieviele Elemete schon übergeben worden bzw. noch nicht übergeben worden sind" zutun hat. Fakt ist jedenfalls, dass wenn lngDummy = 0 ist, alle Dokumente "angezeigt" worden sind. Da ich natürlich an allen Dokumenten interessiert bin, habe ich, man möge mir für meine fachliche Inkompetenz in Visual Basic verzeihen (bin erst seit einigen Wochen dabei), ein Beispiel für die Abfrage ALLER (Hallo, Stefan Berlitz :-)) Dokumente erstellt, was mir aber etwas sehr umständlich erscheint :-) Das geht doch bestimmt vieeell einfacher?! Dim swApp As SldWorks.SldWorks Dim ListOfDocuments As SldWorks.EnumDocuments2 Dim swModel As SldWorks.ModelDoc2 Dim lngDummy As Long Sub main() Set swApp = Application.SldWorks Set ListOfDocuments = swApp.EnumDocuments2() If swApp.EnumDocuments2() Is Nothing Then MsgBox ("Es ist kein Dokument geöffnet!") Exit Sub Else Do ListOfDocuments.Next 1, swModel, lngDummy MsgBox (lngDummy) If lngDummy = 0 Then MsgBox ("Es wurden alle Dokumente ausgegeben!") Exit Sub End If MsgBox swModel.GetTitle Loop While lngDummy <> 0 End If End Sub Man beachte die Loop While Anweisung, da hätte ich auch HundKatzeMaus reinschreiben können :-)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |