| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Dateiname Vorbelegen (310 mal gelesen)
|
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 242 Registriert: 05.08.2004 Inventor 2020 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 07. Apr. 2022 16:04 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 07. Apr. 2022 16:48 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas01
Hallo Nö, meines Wissens nicht. Du hast zwei Möglichkeiten. 1. Einen eigenen Speicherndialog nutzen. Mit einem dutzend Zeilen Code is man durch damit. 2. Entweder den FullFileName per Code zusammenstricken oder in einer Eingabe vom User abfragen. Den String dann per CommandManager.PostPrivateEvent in die Zwischenablage von Inventor schieben und speichern. Dann kommt kein Speicherndialog. Es sei denn deine Datei hat referenzierte Dokumente die ebenfalls noch nicht gespeichert wurden, dann kommt der Dialog für's Speichern der referenzierten Dokumente. ------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 242 Registriert: 05.08.2004 Inventor 2020 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 08. Apr. 2022 09:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, schade. Das mit den eigenen Speicherndialog habe ich schon gemacht, nur ich müsste jetzt das Inventor eigene Speicherndialog abbrechen und das habe ich noch nicht hinbekommen. Eigentlich müsste das mit HandlingCode = HandlingCodeEnum.kEventCanceled funktionieren, tut es aber nicht. Private Sub m_appEvents_OnSaveDocument(ByVal DocumentObject As Inventor._Document, ByVal BeforeOrAfter As Inventor.EventTimingEnum, ByVal Context As Inventor.NameValueMap, ByRef HandlingCode As Inventor.HandlingCodeEnum) Handles m_appEvents.OnSaveDocument If BeforeOrAfter = EventTimingEnum.kBefore Then HandlingCode = HandlingCodeEnum.kEventCanceled End If End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 08. Apr. 2022 15:14 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas01
Hallo Wenn, dann musst du das OnFileSaveAsDialog Event abfangen. Das OnSave Event wird erst nach dem Dialog ausgelöst. Ablauf: - Speichern gedrückt - OnFileSaveAsDialog Event - Dialog eingeblendet - wenn Dialog abgebrochen wird: - OnSave mit BeforeOrAfter=kAfter wird ausgelöst (OnSave mit BeforeOrAfter=kBefore entfällt) - wenn Dialog mit OK beendet wird: - OnSave mit BeforeOrAfter=kBefore wird ausgelöst - Speichern - OnSave mit BeforeOrAfter=kAfter wird ausgelöst Also müsste man das erste OnFileSaveDialog Event abfangen und einen eigenen, modifizierten Inventordialog einblenden. Das löst aber direkt das OnFileSaveAsDialog Event erneut aus und würde eine Endlosschleife erzeugen. Mit einer einfachen Bool Variablen signalisiert man im zweiten OnFileSaveAsDialog Event, das nicht wieder ein Dialog geöffnet werden soll und steigt an der Stelle aus (Canceled das Event). Der modifizierte Dialog wird angezeigt und kann ganz normal zum Speichern genutzt werden. Ich hab ein bißchen mit dem unten stehenden VBA Code herumgespielt. Das scheint zu funktionieren. Ich konnte keinen Fehler finden. Kann trotzdem einer drin sein. Der Einfachheit halber habe ich den Dateinamen fix im Code. Den muss man später natürlich dynamisch aus gewünschtem Pfad, Dateiname und Extension zusammensetzen. In ein normales Modul:
Code:
Option ExplicitDim oFUI As New clsFileUI Private Sub Connect() oFUI.StartEvent End Sub Private Sub Disconnect() oFUI.StopEvent End Sub
In ein Klassenmodul namens clsFileUI
Code:
Option ExplicitPrivate WithEvents oFileUIEvents As FileUIEvents Private a As Boolean Public Sub StartEvent() Set oFileUIEvents = ThisApplication.FileUIEvents End Sub Public Sub StopEvent() Set oFileUIEvents = Nothing End Sub Private Sub oFileUIEvents_OnFileSaveAsDialog(FileTypes() As String, ByVal SaveCopyAs As Boolean, ByVal ParentHWND As Long, FileName As String, ByVal Context As NameValueMap, HandlingCode As HandlingCodeEnum) If a = True Then Exit Sub End If a = True Dim sFileTypes As String sFileTypes = Join(FileTypes, "|") Dim oDlg As Inventor.FileDialog Call ThisApplication.CreateFileDialog(oDlg) With oDlg .filter = sFileTypes .FilterIndex = 1 .CancelError = True .DialogTitle = "My special Save as dialog" .FileName = "C:\Temp\justAtest.iam" '<--- the InitialDirectory property doesn't work in save dialog. Use FullFilename here .OptionsEnabled = True End With On Error Resume Next Call oDlg.ShowSave If err.Number <> 0 Then HandlingCode = kEventCanceled Else HandlingCode = kEventHandled FileName = oDlg.FileName End If a = False End Sub
Für VB.Net In der StandardAddInserver Klasse:
Code:
Private WithEvents m_FileUIEvents As FileUIEvents Private a As BooleanPrivate Sub m_FileUIEvents_OnFileSaveAsDialog(ByRef FileTypes() As String, SaveCopyAs As Boolean, ParentHWND As Integer, ByRef FileName As String, Context As NameValueMap, ByRef HandlingCode As HandlingCodeEnum) Handles m_FileUIEvents.OnFileSaveAsDialog If a = True Then Exit Sub 'a is a classwide boolean, initial value=false a = True Dim sFileTypes As String = Join(FileTypes, "|") Dim oDlg As Inventor.FileDialog = Nothing g_inventorApplication.CreateFileDialog(oDlg) With oDlg .Filter = sFileTypes .FilterIndex = 0 .CancelError = True .DialogTitle = "My special Save as dialog" .FileName = "C:\Temp\justAtest.iam" '<--- the InitialDirectory property doesn't work in save dialog. Use FullFilename here .OptionsEnabled = True End With On Error Resume Next Call oDlg.ShowSave() If Err.Number <> 0 Then HandlingCode = HandlingCodeEnum.kEventCanceled Else HandlingCode = HandlingCodeEnum.kEventHandled FileName = oDlg.FileName End If a = False End Sub
In der Activate Sub:
Code:
m_FileUIEvents = g_inventorApplication.FileUIEvents a = False
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 242 Registriert: 05.08.2004 Inventor 2020 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 12. Apr. 2022 06:51 <-- editieren / zitieren --> Unities abgeben:
|