|  |  | 
|  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | 
|  |  | 
|  | NVIDIA RTX PRO 6000 Blackwell Max-Q Workstation Edition, eine Pressemitteilung 
 | 
| Autor | Thema:  Blatt/Rahmen/Schriftfeld hinzufügen + Text einfügen (2529 mal gelesen) | 
 | Fiedel93felix Mitglied
 Konstrukteur
 
    
 
      Beiträge: 501Registriert: 19.02.2014
 Autodesk Inventor 2025AutoCAD Mechanical 2025
 Microsoft Visual Basic  2022
 |    erstellt am: 12. Jun. 2015 07:37  <-- editieren / zitieren -->    Unities abgeben:            
  Schönnen guten Tag miteinander, 1.Problem: Ich möchte über eine Auswahl ein neues Blatt mit Rahmen und Schriftfeld einfügen. Ich habe dazu folgenden Code:         Dim ThisApplication As Inventor.ApplicationThisApplication = GetObject(, "Inventor.Application")
         Dim oDrawDoc As DrawingDocumentoDrawDoc = ThisApplication.ActiveDocument
         Dim oNewSheet As SheetsoNewSheet = oDrawDoc.Sheets
         Call oNewSheet.Add(DrawingSheetSizeEnum.kA4DrawingSheetSize) '#################################################
 'Neuen Rahmen einfügen
         Dim oSheet As SheetoSheet = oDrawDoc.ActiveSheet
         Call oSheet.AddBorder("A3 DIN")         '#################################################'Neues Schriftfeld einfügen
         Dim oTitleBlockDef As TitleBlockDefinitionoTitleBlockDef = oDrawDoc.TitleBlockDefinitions.Item("Schriftfeld")
 Dim oTitleBlock As TitleBlock
 oTitleBlock = oSheet.AddTitleBlock(oTitleBlockDef)
 Fragen:-in der letzten Zeile fliegt er raus und bringt die Fehlermeldung:
 Falscher Parameter. (Ausnahme von HRESULT: 0x80070057 E_INVALIDARG))
 -Wie kann ich beim Blatt einstellen ob es Hoch oder Quer sein soll?Ist jetzt immer quer was ich nicht will
 -Wie kann ich den Blattname gleich vergeben? 2. Problem:Ich erstelle auf dem Blatt automatisch eine Skizze, das klappt alles super.
 In die Skizze soll dann Text mit rein.
 den Text bring ich mit dem Code rein: Call oSketch.TextBoxes.AddByRectangle(ThisApplication.TransientGeometry.CreatePoint2d(4.1, 2.8 ), _ThisApplication.TransientGeometry.CreatePoint2d(5, 2.3 ), "Text")
 kann man hier irgendwie die Schriftgröße und den Zeilenabstand festlegen?
 Kann man die  ausrichtung fetslegen?
 Sind jetzt ganz schön viele Fragen auf einaml   Einen schönen Tag wünsch ich noch.MfG Felix
 
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Fiedel93felix Mitglied
 Konstrukteur
 
    
 
      Beiträge: 501Registriert: 19.02.2014
 Autodesk Inventor 2025AutoCAD Mechanical 2025
 Microsoft Visual Basic  2022
 |    erstellt am: 15. Jun. 2015 08:36  <-- editieren / zitieren -->    Unities abgeben:            
  Also ich hab jetzt durch langes Probieren übers We verschiedenes hinbekommen: -Blattausrichtung und Benennung:Call oNewSheet.Add(
 DrawingSheetSizeEnum.kA3DrawingSheetSize, -> Blattgröße
 PageOrientationTypeEnum.kLandscapePageOrientation, ->Ausrichtung (k.Landscape=Quer ; kPortrait = Hoch)
 "Neu erstellt") -> Name
 -Text einfügen:Call oSketch.TextBoxes.AddByRectangle(ThisApplication.TransientGeometry.CreatePoint2d(5, 5), _
 ThisApplication.TransientGeometry.CreatePoint2d(8, 8), "Hallo2", TextStyle:="engl.")
 Über TextStyle kann ein Stil fetsgelegt werden.In dem Stil kann man alles einstellen was man will (Größe,Zeilenabstand,Ausrichtung,Farbe....)
 Ist zwar nicht die beste Variante da man dadurch viele Stil´s definieren muss aber naja es geht erstmal.
 Nur den fehler bei einfügen des Schriftfeldes den kann ch mir immer noch ni erklären? Weis da vielleicht jemand Rat?
 MfG Felix 
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Chris 31 Mitglied
 Konstrukteur und Mädchen für alles
 
    
 
      Beiträge: 575Registriert: 23.04.2013
 Inventor 2015 ProfessionalWindows 7 64 bit
 16GB RAM
 nVidia Quadro 600
 |    erstellt am: 17. Jun. 2015 08:16  <-- editieren / zitieren -->    Unities abgeben:           Nur für Fiedel93felix   
  Hallo Felix, ich hab mir deinen Code mal kopiert und das mit dem Schriftfeld ausprobiert. Bei mir funktioniert es reibungslos.
 Habe ein Schriftfeld genommen, was bei mir in den Zeichnungsressourcen vorhanden ist und das fügt er ohne zu meckern ein.
 Hast du eventuell einen Schreibfehler beim Namen des Schriftfeldes?
 
 ------------------MFG
 Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Chris 31 Mitglied
 Konstrukteur und Mädchen für alles
 
    
 
      Beiträge: 575Registriert: 23.04.2013
 Inventor 2015 ProfessionalWindows 7 64 bit
 16GB RAM
 nVidia Quadro 600
 |    erstellt am: 17. Jun. 2015 08:19  <-- editieren / zitieren -->    Unities abgeben:           Nur für Fiedel93felix   
  Ich glaube ich habe deinen Fehler gefunden. Du möchtest doch sicher auf dem neuen sheet ein Schriftfeld einfügen, oder? Dann musst du das auch in dem Code schreiben.
 Also nicht:
 
 Code:oTitleBlock = oSheet.AddTitleBlock(oTitleBlockDef)
 
 sondern: Code:oTitleBlock = oNewSheet.AddTitleBlock(oTitleBlockDef)
 
   ------------------MFG
 Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Fiedel93felix Mitglied
 Konstrukteur
 
    
 
      Beiträge: 501Registriert: 19.02.2014
 Autodesk Inventor 2025AutoCAD Mechanical 2025
 Microsoft Visual Basic  2022
 |    erstellt am: 17. Jun. 2015 08:54  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | Fiedel93felix Mitglied
 Konstrukteur
 
    
 
      Beiträge: 501Registriert: 19.02.2014
 Autodesk Inventor 2025AutoCAD Mechanical 2025
 Microsoft Visual Basic  2022
 |    erstellt am: 17. Jun. 2015 09:01  <-- editieren / zitieren -->    Unities abgeben:            
  Ok Chris hab grad eine neue Erkenntnis bekommen....deine Korrektur stimmt nicht. Es muss osheet heisen. Ich hab grad raus bekommenwie der Fehler entsteht. Es gibt in Schriftfeldern ja die möglichkeiten Eingaben zu fordern. (kennst ja bestimmt, das kleine Fenster was nach dem neu erstellen einer Zeichnung aufgeht) Wenn die drin sind entsteht ein Fehler:Falscher Parameter. (Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG))
 Also wenn man keine Angeforderten Eingaben drin hat klapt das einfügen.Das heißt man müsste die Eingaben irgendwie mit übergeben oder?
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | rkauskh Moderator
 Dipl.-Ing. (FH) Versorgungstechnik, Master Eng. IT-Security & Forensic
 
        
 
  
 
      Beiträge: 2933Registriert: 15.11.2006
 Windows 10 x64, AIP 2020-2025 |    erstellt am: 17. Jun. 2015 09:03  <-- editieren / zitieren -->    Unities abgeben:           Nur für Fiedel93felix   | 
                        | Fiedel93felix Mitglied
 Konstrukteur
 
    
 
      Beiträge: 501Registriert: 19.02.2014
 Autodesk Inventor 2025AutoCAD Mechanical 2025
 Microsoft Visual Basic  2022
 |    erstellt am: 17. Jun. 2015 09:05  <-- editieren / zitieren -->    Unities abgeben:            
  Ah okay das wusste ich nicht danke    Aber da ich eh gerade alle Vorlagen erneuer und die Daten nicht mehr über angefordete Eingaben in das Schriftfeld hole sondern direkt über die Properties sollten ja keine Fehler deswegen entstehen   MfG Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Fiedel93felix Mitglied
 Konstrukteur
 
    
 
      Beiträge: 501Registriert: 19.02.2014
 Autodesk Inventor 2025AutoCAD Mechanical 2025
 Microsoft Visual Basic  2022
 |    erstellt am: 19. Jun. 2015 11:04  <-- editieren / zitieren -->    Unities abgeben:            
  Also Ralf mit den Prompstrings komm ich noch nicht so ganz klar. Ich hab verschieden Schriftfelder wo Eingaben gefordert sind. Kann ich irgendwie abfragen wie viele Eingaben gefordert sind? Wenn ich die angeforderten Abfrage anlege gebe ich denen ja einen Name ( Bsp: Projektnummer)Kann ich jetzt mit Code suchen welcher Prompstring den Name hat?
 Und kann ich wenn bereits ein Schriftfeld angelegt ist die Eingaben auch auslesen? ----------------------------------------------------
 Mit freundlichen Grüßen
 Felix [Diese Nachricht wurde von Fiedel93felix am 19. Jun. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | rkauskh Moderator
 Dipl.-Ing. (FH) Versorgungstechnik, Master Eng. IT-Security & Forensic
 
        
 
  
 
      Beiträge: 2933Registriert: 15.11.2006
 Windows 10 x64, AIP 2020-2025 |    erstellt am: 19. Jun. 2015 12:37  <-- editieren / zitieren -->    Unities abgeben:           Nur für Fiedel93felix   
  Hallo Die Strings müssen im Array in der korrekten Anzahl und Reihenfolge stehen, wie sie beim normalen Einfügen abgefragt werden. Man kann leider keine andere Zuordnung vornehmen.Die Anzahl der Eingaben kann meines Wissens nicht direkt abgefragt werden. Dazu müßtest du vor dem Einfügen durch alle Textboxen der TitleBlockDefinition gehen und im Text-Property nachsehen ob da was mit <Prompt> drinsteht. Da es deine Schriftfelder sind, müßtest du doch aber wissen wie viele Eingaben erforderlich sind oder?
 Den Inhalt der jeweiligen TextBox kannst du mit der TitleBlock.GetPromptResultText Methode abfragen und mit TitleBlock.SetPromptResultText schreiben.
 ------------------MfG
 Ralf
  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Fiedel93felix Mitglied
 Konstrukteur
 
    
 
      Beiträge: 501Registriert: 19.02.2014
 Autodesk Inventor 2025AutoCAD Mechanical 2025
 Microsoft Visual Basic  2022
 |    erstellt am: 19. Jun. 2015 12:50  <-- editieren / zitieren -->    Unities abgeben:            
  Vielen dank für die Antwort Ralf ich hatte grad selbst eine Lösung gefunden, wie das abfragen der einzelnen Inhalte klappt.         Dim oSketch As DrawingSketchoSketch = oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch
         Dim oTextBox As TextBoxDim Projekt As String
         Dim i As Integeri = 0
         For Each oTextBox In oSketch.TextBoxesIf Left(oTextBox.FormattedText, 7) = "<Prompt" Then
 If oTextBox.Text = "Projekt" Then
                     Projekt = oTitleBlock.GetResultText(oTextBox)Exit For
                 Elsei = i + 1
 End If
 End If
 Next
 Frage:
 Um raus zu bekommem wie viele Eingaben nach dem Platzieren gefordert sind könnte man da alle Textboxen des Schriftfeldes durchlaufen?
 Also bevor das Schriftfeld platziert wurde. Geht das irgendwie?
 
 ----------------------------------------------------
 Mit freundlichen Grüßen
 Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | rkauskh Moderator
 Dipl.-Ing. (FH) Versorgungstechnik, Master Eng. IT-Security & Forensic
 
        
 
  
 
      Beiträge: 2933Registriert: 15.11.2006
 Windows 10 x64, AIP 2020-2025 |    erstellt am: 19. Jun. 2015 13:48  <-- editieren / zitieren -->    Unities abgeben:           Nur für Fiedel93felix   
  Hallo Das eingefügte Schriftfeld ist ja "nur" eine Art Verknüpfung zur TitleBlockDefinition. Wenn du vor dem Platzieren die Zahl der angeforderten Eingaben ermitteln willst, mußt du die TitleBlockDefinition untersuchen.
 ------------------MfG
 Ralf
  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Fiedel93felix Mitglied
 Konstrukteur
 
    
 
      Beiträge: 501Registriert: 19.02.2014
 Autodesk Inventor 2025AutoCAD Mechanical 2025
 Microsoft Visual Basic  2022
 |    erstellt am: 22. Jun. 2015 15:06  <-- editieren / zitieren -->    Unities abgeben:            
  Danke Ralf für deine Hilfe. Und für alle die mal in die Verlegenheit kommen ein Blatt mit Rahmen und Schriftfeld einzufügen hier mein Code:Er fügt das ausgewählte Blatt ein, dann den Ausgewählten Rahmen, dann das ausgewählte Schriftfeld und lässt dabei alle angeforderten Angaben erstmal leer.
 Die können ja ohne Probleme danach noch bearbeitet werden.
         Dim ThisApplication As Inventor.ApplicationThisApplication = GetObject(, "Inventor.Application")
         Dim oDrawDoc As DrawingDocumentoDrawDoc = ThisApplication.ActiveDocument
         Dim oNewSheet As SheetsoNewSheet = oDrawDoc.Sheets
         'Blatt erstellenCall oNewSheet.Add(DrawingSheetSizeEnum.kA3DrawingSheetSize, PageOrientationTypeEnum.kLandscapePageOrientation, "Test")
 ''                                                                  -> A3                                                                    ->Querformat                     ->Blattname
 'Neuen Rahmen einfügen
         Dim oSheet As SheetoSheet = oDrawDoc.ActiveSheet
         Call oSheet.AddBorder("A3 DIN")''                                   ->Name des Rahmens (muss existieren)
         'Neues Schriftfeld einfügen         Dim oTitleBlockDef As TitleBlockDefinitionoTitleBlockDef = oDrawDoc.TitleBlockDefinitions.Item("Schriftfeld A4")
 '                                                                               ->Name Schriftfeld(Muss existieren)
         Dim oSketch As DrawingSketchoSketch = oTitleBlockDef.Sketch
         Dim oTitleBlock As TitleBlockDim oTextBox As TextBox
         'Schriftfeld nach Anzahl angeforderten Angaben abfragenDim i As Integer
 i = 0
         For Each oTextBox In oSketch.TextBoxesIf Left(oTextBox.FormattedText, 7) = "<Prompt" Then
 i += 1
 End If
 Next
         'Schriftfeld einfügenIf i = 0 Then
 oTitleBlock = oSheet.AddTitleBlock(oTitleBlockDef)
 Else
 Dim sPromptStrings(i - 1) As String
 For z As Integer = 0 To i - 1
 sPromptStrings(z) = z
 Next
             oTitleBlock = oSheet.AddTitleBlock(oTitleBlockDef, , sPromptStrings)End If
 Wer Fragen hat oder manches vielleicht anders machen würde, einfach antworten.
 
 ------------------
 ----------------------------------
 Mit freundlichen Grüßen
 Felix [Diese Nachricht wurde von Fiedel93felix am 22. Jun. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Fiedel93felix Mitglied
 Konstrukteur
 
    
 
      Beiträge: 501Registriert: 19.02.2014
 Autodesk Inventor 2025AutoCAD Mechanical 2025
 Microsoft Visual Basic  2022
 |    erstellt am: 25. Jun. 2015 10:22  <-- editieren / zitieren -->    Unities abgeben:            
  Ich hätte da doch noch ne Frage zu den PromptString. Kann ich nach dem Platzieren auch noch auf die Propmpstring zugreifen.Also ich hab die Zahl die das Promptstring hat und will das jetzt editieren.
 ----------------------------------------------------
 Mit freundlichen Grüßen
 Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | rkauskh Moderator
 Dipl.-Ing. (FH) Versorgungstechnik, Master Eng. IT-Security & Forensic
 
        
 
  
 
      Beiträge: 2933Registriert: 15.11.2006
 Windows 10 x64, AIP 2020-2025 |    erstellt am: 25. Jun. 2015 11:11  <-- editieren / zitieren -->    Unities abgeben:           Nur für Fiedel93felix   
  Hallo Hatte ich oben schonmal geschrieben:
 Zitat:Den Inhalt der jeweiligen TextBox kannst du mit der TitleBlock.GetPromptResultText Methode abfragen und mit TitleBlock.SetPromptResultText schreiben.
 
 ------------------MfG
 Ralf
  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                       
 | Fiedel93felix Mitglied
 Konstrukteur
 
    
 
      Beiträge: 501Registriert: 19.02.2014
 Autodesk Inventor 2025AutoCAD Mechanical 2025
 Microsoft Visual Basic  2022
 |    erstellt am: 25. Jun. 2015 11:52  <-- editieren / zitieren -->    Unities abgeben:            
  Erstmal danke Ralf    Aber ich hab ein Teil in meiner Frage vergessen...   Kann man die Promptstring auch ändern, ohne alle Textboxen einers Schriftfeldes nach der gewünschten zu durchsuchen? Also beim erstellen des Schriftfeldes hat der gewünschte wert den SPrompString(2).Diesen String möchte ich jetzt erst aus dem platzierten Schriftfeld abfragen und dann evt. ändern.
 Aber dabei möchte ich eigentlich nicht den Weg gehen alle Textboxen des Schriftfeldes abzufragen... Ich hoffe jetzt ist es verständlicher formuliert    ----------------------------------------------------
 Mit freundlichen Grüßen
 Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |