Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API CloseDoc-Befehl

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
Technische Kommunikation mit der 3DEXPERIENCE Plattform
Autor Thema:  API CloseDoc-Befehl (2694 mal gelesen)
3df002
Mitglied


Sehen Sie sich das Profil von 3df002 an!   Senden Sie eine Private Message an 3df002  Schreiben Sie einen Gästebucheintrag für 3df002

Beiträge: 6
Registriert: 11.07.2011

Umgebung:
SW2011 und S2012

erstellt am: 15. Jan. 2013 15:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Testdaten_ulr.zip

 
Hallo Zusammen,

ich habe eine Frage zum CloseDoc-Befehl.
Meine Annahme.
Wenn ich ein Dokument mit dem CloseDoc-Befehl schliesse, wird das letzte aktive Dokument angezeigt.

Bei folgender Vorgehensweise ist dies allerdings nicht so:
Baugruppe 1 manuell öffnen.
Zeichnung 1 manuell öffnen.
Manuell auf die Baugruppe umschalten.
Jetzt das Bauteil Teil 2 manuell öffnen.
Manuell auf die Baugruppe umschalten.
Manuell das Teil 2 in die Baugruppe einfügen.

Wenn ich jetzt das Teil 2 über die Api schliesse, wird die Zeichnung aktiviert, nicht wie ich es gerne hätte (und auch erwartet hätte) die Baugruppe!

Hat jemand eine Idee bzw. ein Hinweis für mich, warum das so ist und wie ich ich das umgehen könnte.
Wichtiger Hinweis:
Bei den Originaldaten dauert das erneute Umschalten von der Zeichnung auf die Baugruppe zu lange, deswegen kommt der Workaround mit ActivateDoc2(Baugruppe 1) nach dem schliessen des Bauteils nicht in Frage.

Angefügt die Testteile und hier die Code-Zeile, die ich zum Schliessen verwende.


object _o = Marshal.GetActiveObject(ProgID_VersionIndependent);
SldWorks _tmpSW = null;
// Object pruefen
if (_o != null)
{
// Auf SldWorks casten
_tmpSW = (SldWorks)_o;
string docName = @"C:\temp\Testdaten_ulr\Teil2.SLDPRT";
_tmpSW.CloseDoc(docName);
}

Besten Dank für Eure Hinweise.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

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: 15. Jan. 2013 15:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 3df002 10 Unities + Antwort hilfreich

Hallo 3df002,

Zitat:
Original erstellt von 3df002:
Wichtiger Hinweis:
Bei den Originaldaten dauert das erneute Umschalten von der Zeichnung auf die Baugruppe zu lange, deswegen kommt der Workaround mit ActivateDoc2(Baugruppe 1) nach dem schliessen des Bauteils nicht in Frage.

Wenn ich dich richtig verstehe willst du, dass ein ganz bestimmtes deiner offenen Dokumenten angezeigt wird, wenn du dein Teil schließt? Warum aktivierst du nicht vorher deine Baugruppe und schließt dann erst das anzeigende Fenster des Teils? Das sollte funktionieren.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

3df002
Mitglied


Sehen Sie sich das Profil von 3df002 an!   Senden Sie eine Private Message an 3df002  Schreiben Sie einen Gästebucheintrag für 3df002

Beiträge: 6
Registriert: 11.07.2011

Umgebung:
SW2011 und S2012

erstellt am: 15. Jan. 2013 15:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Stefan,

besten Dank für Deine super schnelle Reaktion.

Das mit dem Aktivieren (sofern ich es korrekt gemacht habe) der Baugruppe im Vorfeld funktioniert bei mir leider nicht.
Meinen Code habe ich entsprechend erweitert und trotzdem den gleichen Effekt.
Den ActivateDoc3 (Sw2012) Befehl kann ich leider nicht ausprobieren, da dieser mir bei der Endversion nicht zur Verfügung stehen wird.


            string docName = @"C:\temp\Testdaten_ulr\Teil2.SLDPRT";
            //_SldWorks.QuitDoc(docName);
            int intError = 0;
            ModelDoc2 _ModelDoc2 = (ModelDoc2)_SldWorks.ActivateDoc2(@"C:\temp\Testdaten_ulr\Baugruppe1.SLDASM", true, ref intError);
            if (_ModelDoc2 != null)
            {
                string open = _ModelDoc2.GetPathName();
            }
            _SldWorks.CloseDoc(docName);

Gruß
3df002

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ad_man
Mitglied
freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))


Sehen Sie sich das Profil von ad_man an!   Senden Sie eine Private Message an ad_man  Schreiben Sie einen Gästebucheintrag für ad_man

Beiträge: 1366
Registriert: 20.12.2003

erstellt am: 15. Jan. 2013 16:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 3df002 10 Unities + Antwort hilfreich

Hallo 3df002,

Zitat:
Original erstellt von 3df002:

Den ActivateDoc3 (Sw2012) Befehl kann ich leider nicht ausprobieren, da dieser mir bei der Endversion nicht zur Verfügung stehen wird.

Dann nimm doch ActivateDoc bzw. ActivateDoc2...  Die alten Befehle funktionieren meistens auch in den neueren Versionen.

------------------
==========
Gruß
Andreas
==========

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

3df002
Mitglied


Sehen Sie sich das Profil von 3df002 an!   Senden Sie eine Private Message an 3df002  Schreiben Sie einen Gästebucheintrag für 3df002

Beiträge: 6
Registriert: 11.07.2011

Umgebung:
SW2011 und S2012

erstellt am: 15. Jan. 2013 17:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Andreas,

danke, ich habe es mit dem alten Befehl probiert und es geht nicht.
Siehe Code-Auszug etwas weiter oben.

Gruß
Mathias

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ad_man
Mitglied
freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))


Sehen Sie sich das Profil von ad_man an!   Senden Sie eine Private Message an ad_man  Schreiben Sie einen Gästebucheintrag für ad_man

Beiträge: 1366
Registriert: 20.12.2003

erstellt am: 15. Jan. 2013 17:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 3df002 10 Unities + Antwort hilfreich

Und wie sieht es mit dem ganz alten Befehl ActivateDoc aus? Leider kenne ich mich mit C-Programmierung nicht aus, ich verwende meistens VBA...

------------------
==========
Gruß
Andreas
==========

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

3df002
Mitglied


Sehen Sie sich das Profil von 3df002 an!   Senden Sie eine Private Message an 3df002  Schreiben Sie einen Gästebucheintrag für 3df002

Beiträge: 6
Registriert: 11.07.2011

Umgebung:
SW2011 und S2012

erstellt am: 15. Jan. 2013 18:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Andreas,

den alten Befehl habe ich gerade auch ausprobiert.
Leider wieder negativ. Trotzdem, danke.
Ich habe heute auch den ganzen Tag in der API gestöbert, aber keine Idee mehr für ein Workaround erhalten.

Gruß
3df002

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

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: 16. Jan. 2013 08:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 3df002 10 Unities + Antwort hilfreich

Hallo 3df002,

bei mir klappt das konsistent, wenn ich vorher das ModelDoc aktiviere, dass ich anschließend aktiv haben möchte, dann das ModelDoc, dass geschlossen werden soll und dann dieses schließe.

In VBA (was ich nutze) sieht das so aus:

Code:
Dim swApp As SldWorks.SldWorks
Dim ModelDoc As SldWorks.ModelDoc2

Sub main()

    Set swApp = Application.SldWorks
    Set ModelDoc = swApp.ActiveDoc
   
    ' jetzt ist irgendein ModelDoc aktiv und sichtbar
   
    ' das ModelDoc aktivieren, dass anschließend aktiv sein soll
    swApp.ActivateDoc "baugruppe.sldasm"
    ' zurück zu dem zu schließenden ModelDoc
    swApp.ActivateDoc "teil2.sldprt"
    ' und schließen
    swApp.CloseDoc "teil2.sldprt"
   
End Sub



Das ergibt zwar ein bisschen Bildschirmgeflacker durch das zweimal hin- und herschalten, hat aber anschließend bei meinen Versuchen immer die gewünschte Baugruppe.sldasm aktiv und offen.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

3df002
Mitglied


Sehen Sie sich das Profil von 3df002 an!   Senden Sie eine Private Message an 3df002  Schreiben Sie einen Gästebucheintrag für 3df002

Beiträge: 6
Registriert: 11.07.2011

Umgebung:
SW2011 und S2012

erstellt am: 16. Jan. 2013 13:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Stefan,

besten Dank.
Die Zeile mit dem aktiveren des zu löschenden Dokuments hat bei mir den Erfolg gebracht.

' zurück zu dem zu schließenden ModelDoc
    swApp.ActivateDoc "teil2.sldprt"
    ' und schließen
    swApp.CloseDoc "teil2.sldprt"

Trotzdem finde ich das Verhalten von SolidWorks nicht ganz so stimmig.
Bei meinen Tests habe ich festgestellt, das SolidWorks beim Schließen eines Dokumentes (das nicht vorher aktiviert wurde) immer das direkt davor geladene Dokument anzeigt, egal was eigentlich sichtbar war.

Ich habe das ganze mal an den apisupport von SW gegeben und warte dort auf eine Antwort, die ich dann auch hier wieder publik mache.

Aus meiner Sicht ist Deine Idee ein Workaround, der für mich eine Lösung darstellt.
Danke

Gruß
3df002

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz