| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: ComboBox im Eigenschaften bearbeiten Fenster (Feldtext) (1217 / mal gelesen)
|
homerpower Mitglied
Beiträge: 117 Registriert: 19.02.2003 ME10 8.70G Creo Elements Direct Modeling 19 Creo Elements Direct Model Manager Creo Elements Direct Drafting 19 Autodesk NavisWorks 2011 AutoCAD 2022 Inventor 2020, 2021, 2022 Revit 2020, 2021, 2022 <p> Precision T3600 Intel Xeon Processor E5-1660 (Six Core, 3.30GHz Turbo, 15MB) 32GB RAM NVIDIA Quadro K4000 Windows 7 pro <p> AMD Ryzen9 5900X 64GB RAM GTX 970 4GB RAM Windows 10 pro
|
erstellt am: 16. Nov. 2021 10:07 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte gern das Eingabefenster für das Schriftfeld anpassen. Und im Feld Toleranz gerne eine ComboBox einsetzen, wo man eine hinterlegte Toleranz auswählen kann. Dazu hab ich ein paar Fragen: 1. Wie kann ich die Werte für die ComboBox hinterlegen. Das so zumachen wie im Excel mit RowSource geht nicht, bzw. bekomme ich nicht hin. (Tabelle!A2:A5) Excel 2. Wie binde ich das ganze in das Eigenschaftenfenster ein? homi 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: 16. Nov. 2021 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für homerpower
Moin 1. Das ist ein Textfeld, dessen Eigenschaft du nicht ändern kannst. Da geht nix anderes als einen Text einzugeben. 2. Gar nicht. Der Dialog bietet keine öffentlich zugänglichen Schnittstellen. Erstell dir selbst eine Form und gestalte die nach deinen Vorstellungen. Mach eine Addin dll draus, fang in den UserInputEvents das OnActivateCommand ab, prüfen ob der CommandName= "DrawingEditFieldTextCmd" ist, setze die EventHandled Eigenschaft auf kEventHandled damit Inventor seinen Dialog nicht anzeigt und blende deine Form ein. Fertsch
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BernoAn Mitglied
Beiträge: 172 Registriert: 16.01.2014
|
erstellt am: 16. Nov. 2021 12:11 <-- editieren / zitieren --> Unities abgeben: Nur für homerpower
|
homerpower Mitglied
Beiträge: 117 Registriert: 19.02.2003 ME10 8.70G Creo Elements Direct Modeling 19 Creo Elements Direct Model Manager Creo Elements Direct Drafting 19 Autodesk NavisWorks 2011 AutoCAD 2022 Inventor 2020, 2021, 2022 Revit 2020, 2021, 2022 <p> Precision T3600 Intel Xeon Processor E5-1660 (Six Core, 3.30GHz Turbo, 15MB) 32GB RAM NVIDIA Quadro K4000 Windows 7 pro <p> AMD Ryzen9 5900X 64GB RAM GTX 970 4GB RAM Windows 10 pro
|
erstellt am: 16. Nov. 2021 13:28 <-- editieren / zitieren --> Unities abgeben:
Hallo BernoAn, das Feld hab ich selbst erstellt, im Zeichnungskopf Editor über "Angeforderte Eingabe". War als Beispiel gedacht. Und da man bestimmte Einträge immer wieder braucht. Könnte man diese mit der ComboBox irgendwie einfügen. Oder halt eine neue Eingabemaske erstellen. Wird wohl nichts werden, meine VBA Fähigkeiten liegen quasi bei 0%. homi 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: 16. Nov. 2021 18:54 <-- editieren / zitieren --> Unities abgeben: Nur für homerpower
Hallo So schwer ist das nun auch wieder nicht. Eine Demo anbei. - Zipfile herunterladen und irgendwo entpacken - Inventor starten und mit ALT + F11 den VBA-Editor öffnen - Anwendungsprojekt anklicken - Menü "Datei" --> "Datei importieren" --> frmToleranz.frm und ShowFormToleranz.bas importieren - VBA-Editor schließen - Zeichnungsdatei öffnen (irgendeine) - Ribbonleiste deiner Wahl, z.B. "Mit Anmerkungen versehen" akivieren - Über Rechtsklick auf die Ribbonleiste --> "Benutzerbefehle anpassen..." öffnen - Tab "Multifunktionsleiste" aktivieren - Dropdown "Befehle auswählen aus" umstellen auf "Makros" - Makro "ShowFormToleranz" per Doppelklick einfügen Im Schriftfeld eine angeforderte Eingabe "Toleranz" anlegen und speichern oder den Namen im Quellcode an die vorhandene Eingabe anpassen. Die Liste beinhaltet derzeit nur beispielhaft A, B, C, D und E. Theoretisch könnte man die Userform in der Optik dem Schriftfeld nachempfinden und damit alle benötigten Felder abfragen, Auswahllisten anbieten, Eingaben plausibilisieren usw. usw. Ob man das noch in VBA macht ist eine andere Frage, da vermutlich ein Auslaufmodell. In einem anderen Thread habe ich ein paar Möglichkeiten gezeigt mit iLogic eine Form in VB.Net zu erstellen. ------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
homerpower Mitglied
Beiträge: 117 Registriert: 19.02.2003 ME10 8.70G Creo Elements Direct Modeling 19 Creo Elements Direct Model Manager Creo Elements Direct Drafting 19 Autodesk NavisWorks 2011 AutoCAD 2022 Inventor 2020, 2021, 2022 Revit 2020, 2021, 2022 <p> Precision T3600 Intel Xeon Processor E5-1660 (Six Core, 3.30GHz Turbo, 15MB) 32GB RAM NVIDIA Quadro K4000 Windows 7 pro <p> AMD Ryzen9 5900X 64GB RAM GTX 970 4GB RAM Windows 10 pro
|
erstellt am: 18. Nov. 2021 11:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, Danke erst mal für dein Beispiel, bin grad dabei dieses um ein Zweites Pulldown Menü zu erweitern. Im Abschnitt: Private Sub UserForm_Initialize() hab ich ein Problem mit der "For" Steuervariable wie füge ich an dieser Stelle die zweite CBox2 ein? Code:
Dim i As Integer For i = 0 To CBox1.ListCount - 1 If CBox1.List(i) = sText Then CBox1.ListIndex = i Exit For End If
homi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
homerpower Mitglied
Beiträge: 117 Registriert: 19.02.2003 ME10 8.70G Creo Elements Direct Modeling 19 Creo Elements Direct Model Manager Creo Elements Direct Drafting 19 Autodesk NavisWorks 2011 AutoCAD 2022 Inventor 2020, 2021, 2022 Revit 2020, 2021, 2022 <p> Precision T3600 Intel Xeon Processor E5-1660 (Six Core, 3.30GHz Turbo, 15MB) 32GB RAM NVIDIA Quadro K4000 Windows 7 pro <p> AMD Ryzen9 5900X 64GB RAM GTX 970 4GB RAM Windows 10 pro
|
erstellt am: 18. Nov. 2021 12:28 <-- editieren / zitieren --> Unities abgeben:
Ok, ich hatte einen Denkfehler. hab die Variable "I" übersehen. Also müsste die zweite CBox dann einen anderen Variabelen Buchstaben bekommen z.B. J liege ich richtig? Code: Dim i As Integer For i = 0 To CBox1.ListCount - 1 If CBox1.List(i) = sText Then CBox1.ListIndex = i Exit For End If Next Dim j As Integer For j = 0 To CBox2.ListCount - 1 If CBox2.List(j) = sText Then CBox2.ListIndex = j Exit For End If
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: 18. Nov. 2021 13:53 <-- editieren / zitieren --> Unities abgeben: Nur für homerpower
Hallo Nö, du kannst i wieder verwenden. Du hast in der ersten For-Schleife den ListIndex von ComboBox1 gesetzt und der Wert von i wird nicht länger benötigt. Daher kann die zweite For-Schleife wieder mit For i=0 beginnen. Ein zweite Zählvariable(j) würde man benötigen, wenn man zwei Schleifen ineinander schachtelt oder wenn der ermittelte Wert von i später im Code erneut benötigt werden würde und erhalten bleiben muss.
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
homerpower Mitglied
Beiträge: 117 Registriert: 19.02.2003 ME10 8.70G Creo Elements Direct Modeling 19 Creo Elements Direct Model Manager Creo Elements Direct Drafting 19 Autodesk NavisWorks 2011 AutoCAD 2022 Inventor 2020, 2021, 2022 Revit 2020, 2021, 2022 <p> Precision T3600 Intel Xeon Processor E5-1660 (Six Core, 3.30GHz Turbo, 15MB) 32GB RAM NVIDIA Quadro K4000 Windows 7 pro <p> AMD Ryzen9 5900X 64GB RAM GTX 970 4GB RAM Windows 10 pro
|
erstellt am: 19. Nov. 2021 13:30 <-- editieren / zitieren --> Unities abgeben:
Hallo, das hab ich leider nicht hinbekommen, wie integriere ich denn hier die zweite CBox? Kleines Beispiel wäre schön. Code:
Dim i As Integer For i = 0 To CBox1.ListCount - 1 If CBox1.List(i) = sText Then CBox1.ListIndex = i Exit For End If Next
schönes Wochenende homi 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: 19. Nov. 2021 20:11 <-- editieren / zitieren --> Unities abgeben: Nur für homerpower
Hallo Nacheinander Code:
Dim i As Integer For i = 0 To CBox1.ListCount - 1 If CBox1.List(i) = sText Then CBox1.ListIndex = i Exit For End If Next For i = 0 To CBox2.ListCount - 1 If CBox2.List(i) = sText Then CBox2.ListIndex = i Exit For End If Next
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
homerpower Mitglied
Beiträge: 117 Registriert: 19.02.2003 ME10 8.70G Creo Elements Direct Modeling 19 Creo Elements Direct Model Manager Creo Elements Direct Drafting 19 Autodesk NavisWorks 2011 AutoCAD 2022 Inventor 2020, 2021, 2022 Revit 2020, 2021, 2022 <p> Precision T3600 Intel Xeon Processor E5-1660 (Six Core, 3.30GHz Turbo, 15MB) 32GB RAM NVIDIA Quadro K4000 Windows 7 pro <p> AMD Ryzen9 5900X 64GB RAM GTX 970 4GB RAM Windows 10 pro
|
erstellt am: 22. Nov. 2021 10:52 <-- editieren / zitieren --> Unities abgeben:
Hallo, Danke tut, aber im gesamten habe ich noch einen Fehler drin, denn Feld 1 wird nicht mehr übertragen, nur noch Feld 2. Denke der Fehler liegt im Fett gedruckten bereich. Sorry das ich so unfähig bin. Code:
Option ExplicitPrivate Sub btnFertig_Click() Unload Me End Sub Private Sub btnUpdate_Click() Dim oApp As Inventor.Application Set oApp = ThisApplication Dim oDrawDoc As DrawingDocument Set oDrawDoc = oApp.ActiveDocument Dim oSheet As Sheet Set oSheet = oDrawDoc.ActiveSheet Dim oTitleBlock As TitleBlock Set oTitleBlock = oSheet.TitleBlock Dim sText As String sText = Me.CBox1.Value sText = Me.CBox2.Value Dim oTextBox As TextBox Set oTextBox = GetPromptTextBox(oTitleBlock.Definition, "Toleranz 1") Set oTextBox = GetPromptTextBox(oTitleBlock.Definition, "Toleranz 2") If Not oTextBox Is Nothing Then Call oTitleBlock.SetPromptResultText(oTextBox, sText) End If End Sub Private Sub CommandButton1_Click() End Sub Private Sub UserForm_Initialize() Dim oApp As Inventor.Application Set oApp = ThisApplication Dim oDrawDoc As DrawingDocument Set oDrawDoc = oApp.ActiveDocument Dim oSheet As Sheet Set oSheet = oDrawDoc.ActiveSheet Dim oTitleBlock As TitleBlock Set oTitleBlock = oSheet.TitleBlock Dim oTitleBlockdef As TitleBlockDefinition Set oTitleBlockdef = oTitleBlock.Definition
Dim oTextBox As TextBox
Set oTextBox = GetPromptTextBox(oTitleBlockdef, "Toleranz 1") Set oTextBox = GetPromptTextBox(oTitleBlockdef, "Toleranz 2") If Not oTextBox Is Nothing Then Dim sText As String sText = oTitleBlock.GetResultText(oTextBox) End If With Me.CBox1 .AddItem "a" .AddItem "b" .AddItem "c" .AddItem "d" .AddItem "e" End With With Me.CBox2 .AddItem "f" .AddItem "g" .AddItem "h" .AddItem "i" .AddItem "j" End With Dim i As Integer For i = 0 To CBox1.ListCount - 1 If CBox1.List(i) = sText Then CBox1.ListIndex = i Exit For End If Next For i = 0 To CBox2.ListCount - 1 If CBox2.List(i) = sText Then CBox2.ListIndex = i Exit For End If Next End Sub Private Function GetPromptTextBox(ByVal oTitleBlockdef As TitleBlockDefinition, ByVal sPromptText As String) As TextBox Dim oTextBox As TextBox For Each oTextBox In oTitleBlockdef.Sketch.TextBoxes If UCase(Left(oTextBox.FormattedText, 7)) = "<PROMPT" Then Dim lIndex As Long lIndex = InStr(oTextBox.FormattedText, ">") + 1 Dim llength As Long llength = Len(sPromptText) If UCase(Mid(oTextBox.FormattedText, lIndex, llength)) = UCase(sPromptText) Then Set GetPromptTextBox = oTextBox Exit For End If End If Set oTextBox = Nothing Next End Function
homi 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: 22. Nov. 2021 12:12 <-- editieren / zitieren --> Unities abgeben: Nur für homerpower
Moin Du füllst die Variable sText mit dem gewählten Eintrag deiner CBox1. In der nächsten Zeile überschreibst du den Wert von sText mit dem gewählten Eintrag deiner CBox2. Das kann nicht funktionieren. Leg eine zweite Variable sText2 an. Oder benutzte erst sText, um CBox1 auszulesen und den Wert in die angeforderte Eingabe 1 zu schreiben und anschließend benutzt du sText, um CBox2 auszulesen und den Wert in die angeforderte Eingabe 2 zu schreiben.
Code:
Option ExplicitPrivate Sub btnFertig_Click() Unload Me End Sub Private Sub btnUpdate_Click() Dim oApp As Inventor.Application Set oApp = ThisApplication Dim oDrawDoc As DrawingDocument Set oDrawDoc = oApp.ActiveDocument Dim oSheet As Sheet Set oSheet = oDrawDoc.ActiveSheet Dim oTitleBlock As TitleBlock Set oTitleBlock = oSheet.TitleBlock Dim sText As String sText = Me.CBox1.Value Dim oTextBox As TextBox Set oTextBox = GetPromptTextBox(oTitleBlock.Definition, "Toleranz 1") If Not oTextBox Is Nothing Then Call oTitleBlock.SetPromptResultText(oTextBox, sText) End If sText = Me.CBox2.Value Set oTextBox = GetPromptTextBox(oTitleBlock.Definition, "Toleranz 2") If Not oTextBox Is Nothing Then Call oTitleBlock.SetPromptResultText(oTextBox, sText) End If End Sub Private Sub UserForm_Initialize() Dim oApp As Inventor.Application Set oApp = ThisApplication Dim oDrawDoc As DrawingDocument Set oDrawDoc = oApp.ActiveDocument Dim oSheet As Sheet Set oSheet = oDrawDoc.ActiveSheet Dim oTitleBlock As TitleBlock Set oTitleBlock = oSheet.TitleBlock Dim oTitleBlockdef As TitleBlockDefinition Set oTitleBlockdef = oTitleBlock.Definition Dim oTextBox As TextBox Set oTextBox = GetPromptTextBox(oTitleBlockdef, "Toleranz 1") Dim sText As String If Not oTextBox Is Nothing Then sText = oTitleBlock.GetResultText(oTextBox) End If With Me.CBox1 .AddItem "a" .AddItem "b" .AddItem "c" .AddItem "d" .AddItem "e" End With Dim i As Integer For i = 0 To CBox1.ListCount - 1 If CBox1.List(i) = sText Then CBox1.ListIndex = i Exit For End If Next Set oTextBox = GetPromptTextBox(oTitleBlockdef, "Toleranz 2") If Not oTextBox Is Nothing Then sText = oTitleBlock.GetResultText(oTextBox) End If With Me.CBox2 .AddItem "f" .AddItem "g" .AddItem "h" .AddItem "i" .AddItem "j" End With For i = 0 To CBox2.ListCount - 1 If CBox2.List(i) = sText Then CBox2.ListIndex = i Exit For End If Next End Sub Private Function GetPromptTextBox(ByVal oTitleBlockdef As TitleBlockDefinition, ByVal sPromptText As String) As TextBox Dim oTextBox As TextBox For Each oTextBox In oTitleBlockdef.Sketch.TextBoxes If UCase(Left(oTextBox.FormattedText, 7)) = "<PROMPT" Then Dim lIndex As Long lIndex = InStr(oTextBox.FormattedText, ">") + 1 Dim llength As Long llength = Len(sPromptText) If UCase(Mid(oTextBox.FormattedText, lIndex, llength)) = UCase(sPromptText) Then Set GetPromptTextBox = oTextBox Exit For End If End If Set oTextBox = Nothing Next End Function
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
homerpower Mitglied
Beiträge: 117 Registriert: 19.02.2003 ME10 8.70G Creo Elements Direct Modeling 19 Creo Elements Direct Model Manager Creo Elements Direct Drafting 19 Autodesk NavisWorks 2011 AutoCAD 2022 Inventor 2020, 2021, 2022 Revit 2020, 2021, 2022 <p> Precision T3600 Intel Xeon Processor E5-1660 (Six Core, 3.30GHz Turbo, 15MB) 32GB RAM NVIDIA Quadro K4000 Windows 7 pro <p> AMD Ryzen9 5900X 64GB RAM GTX 970 4GB RAM Windows 10 pro
|
erstellt am: 21. Dez. 2021 12:28 <-- editieren / zitieren --> Unities abgeben:
Hallo, hab mich jetzt eine weile nicht gemeldet, aber hatte viel zutun, und es nimmt kein Ende. Hab den Code so übernommen und auf 11 Pulldownmenüs erweitert. Die Funktionieren auch alle. Nur beim wieder öffnen des Menü's ist der Inhalt vom 2 Pulldown Menü's immer von alleine leer. Der Rest bleibt drin stehen. Im Eigenschaftenfeld sind aber alle Einstellungen gleich wie bei den anderen Pulldownmenüs abgesehen vom TabIndex, was ja auch so sein muss. Wird ein Thema fürs nächste Jahr. Einen Clear Button für alle Pulldownmenü's möchte ich dann auch noch hinzufügen. Und noch Normale Textfelder. Aber erst nächstes Jahr. Da ich ja jetzt den ganzen Code komplett neu über Copy und Pace erstellt habe. Befindet sich ja keine Code Datei im Hintergrund wie beim ersten Beispiel. Habe versucht diese manuell anzulegen. Grund ist. Wenn ich im Inventor einen Menü Button erstellen will. Wird unter Makros nichts angezeigt. Wie bekomme den Code so hin, das ich ein Button erstellen kann. Der das Makros (den Code) ausführt. Derzeit ist der Code im DWG gespeichert. Gruß Homi [Diese Nachricht wurde von homerpower am 21. Dez. 2021 editiert.] 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: 21. Dez. 2021 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für homerpower
Hallo Um ein Sub im Dialog für benutzerdefinierte Befehle auswählen zu könne, muss diese Public sein. Code: Public Sub ShowFormToleranz Dim oForm As New frmToleranz oForm.Show End Sub
Von alleine passiert in einem Computer so gut wie gar nichts. Pulldowns leeren sich nicht von allein. Wenn die Eigenschaften alle identisch eingestellt sind, muss man im Code schauen ob man ungewollt den Inhalt entfernt oder einfach mit nichts überschreibt. ------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |