| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | |  | 7 Tipps für die Konstruktion von Kunststoffteilen und Spritzgussformen, ein Webinar am 27.06.2025
|
Autor
|
Thema: API - Textzeile im Schriftkopf gezielt ansprechen (399 / mal gelesen)
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2627 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 03. Jun. 2025 16:29 <-- editieren / zitieren --> Unities abgeben:         
Hallo, In einer Zeichnung gehe ich über Blattformat bearbeiten zu unserem Schriftfeld. Darin ist eine Textzeile für unsere Zeichnungsnummer hinterlegt. Öffne ich diese, wird der Code dahinter sichtbar. $PRPSHEET:"Auftragsnummer"$PRPSHEET:"Number"-$PRPSHEET:"SW-Konfigurationsname" Ich möchte nun gezielt diese Textzeile per VBA in der Schriftgröße manipulieren. Der Makrorecorder gibt mir da nur ein unbefriedigendes Ergebnis zurück. Code:
Sub main() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc boolstatus = Part.Extension.SelectByID2("Blatt1", "SHEET", 0, 0, 0, False, 0, Nothing, 0) Part.EditTemplate Part.EditSketch Part.ClearSelection2 True boolstatus = Part.Extension.SelectByID2("DetailItem12@Blattformat1", "NOTE", 0.382140227743212, 1.53427821531257E-02, 0, False, 0, Nothing, 0) Part.FontPoints 17 Part.ClearSelection2 True boolstatus = Part.Extension.SelectByID2("Blatt1", "SHEET", 0, 0, 0, False, 0, Nothing, 0) Part.EditSheet Part.EditSketch Part.ClearSelection2 True End Sub
Hier wird der Mausklick mit dem Selectionmanager verwendet, was ich vermeiden möchte. Wie kann ich gezielt diese Zeile ansprechen? Gibt es eine Schleife über alle Textzeilen auf dem Blattformat, um die richtige auszufiltern? Für Hilfe schon mal besten Danke. Grüße, Andi B. ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur

 Beiträge: 3862 Registriert: 21.06.2001 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 03. Jun. 2025 16:42 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2627 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 03. Jun. 2025 17:16 <-- editieren / zitieren --> Unities abgeben:         
Hallo Torsten, ja, aber wie? Wenn ich diesen Code durchlaufen lasse, wird die richtige Textzeile angesprochen. Ändere ich aber Mauspositionen wie hier: (X und Y auf 0 gesetzt) Code:
boolstatus = Part.Extension.SelectByID2("DetailItem12@Blattformat1", "NOTE", 0, 0, 0, False, 0, Nothing, 0)
Dann ändert er mir eine andere Zeile, in diesem Fall mein Format A4. Da die gesuchte Textzeile in A0 bis A4 jeweils auf einer anderen X / Y Position ist, sehe ich hier Probleme. Was meinst du? Grüße, Andi
------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur

 Beiträge: 3862 Registriert: 21.06.2001 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 03. Jun. 2025 17:37 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2627 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 03. Jun. 2025 17:44 <-- editieren / zitieren --> Unities abgeben:         
Hallo Torsten, das muss ich morgen irgendwann im Geschäft reinschieben, da ich den ganzen Tag in Besprechung bin. Für Zuhause habe ich jetzt nicht die Lizenz mitgenommen, blöde aber auch. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2627 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 04. Jun. 2025 12:19 <-- editieren / zitieren --> Unities abgeben:         
|
Lueghi Mitglied Admin für alle Systeme ....
 
 Beiträge: 464 Registriert: 01.07.2005 CAD...: SWX2022 SP5, ACAD 2019, Tacton / LINO PDM...: PRO.FILE 8.6 ERP...: proAlpha 6.2e / 7.1 BS....: Win10, HP ZBook G5
|
erstellt am: 04. Jun. 2025 13:04 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
Hallo Andi, welch ein Zufall: ich habe gerade das gleiche Problem  . Ich finde mein Element so ähnlich wie Du:
Code: ' Variable im Schriftkopf suchen und korrigieren Part.ClearSelection2 True boolstatus = Part.Extension.SelectByID2("Detailelement1@Blattformat1", "NOTE", 0, 0, 0, False, 0, Nothing, 0) If boolstatus Then Set myNote = Part.SelectionManager.GetSelectedObject6(1, 0) alteZGNr = myNote.GetText 'MsgBox "alte Variable: " & myNote.GetText If Not myNote.GetText = "Artikel-Nr." Then myNote.SetText "$PRPSHEET:""Artikel-Nr.""" ' korrigiere Bezug zur Dateieigenschaft End If End If
In meinen (begrenzten) Testdaten hat das gut funktioniert. Wenn ich aber eine größere Datenmenge habe, dann wird auch teilweise ein falsches Element selektiert. Bin da auch noch nicht weiter aber ich habe einen Verdacht: Wenn die Formate unterschiedlich sind dann wird das falsche Element selektiert. Eine weitergehende Prüfung habe ich aber noch nicht gemacht. Vielleicht können wir uns ja gegenseitig befruchten ....😁🤣. ------------------ Gruß Stefan [Diese Nachricht wurde von Lueghi am 04. Jun. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wybren Mitglied Maschinenbau Techniker

 Beiträge: 36 Registriert: 19.06.2009 Solidworks 2024SP5
|
erstellt am: 04. Jun. 2025 13:51 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
Hallo, um an die Notes zu kommen, würde ich einen allgemeineren Ansatz wählen. Code:
Option Explicit Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDrawDoc As SldWorks.DrawingDoc Dim swView As SldWorks.View Dim swNote As SldWorks.Note Dim sheetCount As Long Dim viewCount As Long Dim noteCount As Long Dim i As LongSub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swDrawDoc = swModel Dim viewCount As Long viewCount = swDrawDoc.GetViewCount Dim ss As Variant ss = swDrawDoc.GetViews For sheetCount = LBound(ss) To UBound(ss) Dim vv As Variant vv = ss(sheetCount) For viewCount = LBound(vv) To UBound(vv) Debug.Print (vv(viewCount).GetName2()) Dim vNotes As Variant noteCount = vv(viewCount).GetNoteCount If noteCount > 0 Then vNotes = vv(viewCount).GetNotes For i = 0 To noteCount - 1 Debug.Print " Note text: " & vNotes(i).GetText 'An dieser Stelle eine Abfrage auf den Inhalt um zu prüfen, ob man die richtige Note erwischt hat. Next End If Next viewCount Next sheetCount End Sub
------------------ Freundliche Grüße Bernd Homepage: solidworks.berndhornemann.de YouTube: https://www.youtube.com/@SWMP Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Volkmar Grube Mitglied Konstrukteur
 
 Beiträge: 134 Registriert: 31.01.2009 WIN11 64Bit, SWX 2024, Delphi 10
|
erstellt am: 04. Jun. 2025 14:48 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
Ah, Bernd war schneller, mein Quelltext ist sehr ähnlich. Deshalb nur eine Anmerkung: Um im konkreten Fall den Inhalt beurteilen zu können, müsste man INote.PropertyLinkedText auswerten und nicht INote.gettext Das liefert den "wirklichen" Inhalt zurück. z.B. If Inhalt = "$PRP:""Benennung""" then .... ------------------ Grüße aus Dresden Volkmar Grube Es gibt keine Probleme, es gibt nur Aufgaben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2627 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 04. Jun. 2025 20:44 <-- editieren / zitieren --> Unities abgeben:         
Hallo Bernd und Volkmar, besten Dank für die Schnipsel, so geht es. Ich habe etwas ergänzt und so kann ich die Textgröße anpassen. Code:
Option Explicit Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDrawDoc As SldWorks.DrawingDoc Dim swView As SldWorks.View Dim swNote As SldWorks.Note Dim sheetCount As Long Dim viewCount As Long Dim noteCount As Long Dim Zeileninhalt As String Dim i As Long Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swDrawDoc = swModel Dim viewCount As Long viewCount = swDrawDoc.GetViewCount Dim ss As Variant ss = swDrawDoc.GetViews For sheetCount = LBound(ss) To UBound(ss) Dim vv As Variant vv = ss(sheetCount) For viewCount = LBound(vv) To UBound(vv) Debug.Print (vv(viewCount).GetName2()) Dim vNotes As Variant noteCount = vv(viewCount).GetNoteCount If noteCount > 0 Then vNotes = vv(viewCount).GetNotes For i = 0 To noteCount - 1 Debug.Print " Note text: " & vNotes(i).GetText Debug.Print " Note text: " & vNotes(i).PropertyLinkedText Zeileninhalt = "$PRPSHEET:""Auftragsnummer""$PRPSHEET:""Number""-$PRPSHEET:""SW-Konfigurationsname""" 'An dieser Stelle eine Abfrage auf den Inhalt um zu prüfen, ob man die richtige Note erwischt hat. If vNotes(i).PropertyLinkedText = Zeileninhalt Then Debug.Print " Das ist es! " Set swNote = vNotes(i) swNote.SetHeightInPoints 17 swModel.EditRebuild3 Exit For End If Next End If Next viewCount Next sheetCount End Sub
Grüße aus dem Schwabenland Andi Beck ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) [Diese Nachricht wurde von Andi Beck am 04. Jun. 2025 editiert.] [Diese Nachricht wurde von Andi Beck am 04. Jun. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lueghi Mitglied Admin für alle Systeme ....
 
 Beiträge: 464 Registriert: 01.07.2005 CAD...: SWX2022 SP5, ACAD 2019, Tacton / LINO PDM...: PRO.FILE 8.6 ERP...: proAlpha 6.2e / 7.1 BS....: Win10, HP ZBook G5
|
erstellt am: 05. Jun. 2025 11:18 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
Zitat: Original erstellt von wybren: Hallo, um an die Notes zu kommen, würde ich einen allgemeineren Ansatz wählen. ...
Mit Deinem Beispiel gehst Du ja durch alle Ansichten. Wenn ich jetzt NUR die Einträge im Schriftkopf finden und bearbeiten möchte dann komme ich - bei mir - nicht weiter da der zu suchende Text auch in Bemerkungen in der Zeichnung selber vorhanden sein kann. Hast Du da auch einen Tipp für mich? ------------------ Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wybren Mitglied Maschinenbau Techniker

 Beiträge: 36 Registriert: 19.06.2009 Solidworks 2024SP5
|
erstellt am: 05. Jun. 2025 12:11 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2627 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 05. Jun. 2025 12:49 <-- editieren / zitieren --> Unities abgeben:         
Hallo, jetzt habe ich das oben beschriebene Makro auch über eine Zeichnung mit 2 Blättern laufen lassen. Jedes Blatt hat den selben Schriftkopf und so kommt meine gesuchte Textzeile 2 x vor. Die Schleife findet auch 2 Blätter und die gesuchte Textzeile 2 x. Allerdings wird nur auf dem aktiven Blatt die Schriftgröße geändert. Code:
swNote.SetHeightInPoints 17 swModel.EditRebuild3
Auf der inaktiven Blatt passiert nichts, auch nicht nach STRG-Q. Wechsel ich das Blatt, lass das Makro dort laufen, wird auch dort geändert, dafür nicht mehr auf dem inaktiven Blatt. Der Grund dafür erschließt sich mir noch nicht. Evtl. muss man dann noch einen Blattwechsel mit einbauen. Grüße, Andi B. ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Volkmar Grube Mitglied Konstrukteur
 
 Beiträge: 134 Registriert: 31.01.2009 WIN11 64Bit, SWX 2024, Delphi 10
|
erstellt am: 05. Jun. 2025 16:12 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
Am Besten ist, wenn du durch alle Blätter durchgehst, in jedem Blatt für den View[0] alle Notes suchst und dann den Filter anwendest. Dim swDraw As SldWorks.DrawingDoc Dim aSheet As SldWorks.Sheet dim swModel as ModelDoc2 set swdraw = swModel If swDraw.GetSheetCount > 0 Then ' nach Blättern suchen For i = 0 To swDraw.GetSheetCount - 1 SheetName = swDraw.GetSheetNames(i) ' Name ermitteln swDraw.ActivateSheet (SheetName) ' Blatt aktivieren Set aSheet = swDraw.GetCurrentSheet ' aSheet die aktuelle Adresse zuweisen
dann 1. View ermitteln und dort die INotes analysieren
------------------ Grüße aus Dresden Volkmar Grube Es gibt keine Probleme, es gibt nur Aufgaben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2627 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 06. Jun. 2025 10:23 <-- editieren / zitieren --> Unities abgeben:         
Hallo, Danke Volkmar für die Rückmeldung. Ich habe den Code überarbeitet und jetzt werden auch andere Blätter berücksichtigt. Wen es Interessiert, hier der Code: Code:
Option Explicit Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDrawDoc As SldWorks.DrawingDocSub main() Dim vSheetNames As Variant Dim sSheetName As String Dim swView As SldWorks.View Dim swNote As SldWorks.Note Dim lSheetCount As Long Dim lViewCount As Long Dim lNoteCount As Long Dim sZeileninhalt As String Dim ss As Variant Dim vv As Variant Dim vNotes As Variant Dim i As Long Dim j As Long Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swDrawDoc = swModel 'nach Blättern suchen vSheetNames = swDrawDoc.GetSheetNames For i = 0 To UBound(vSheetNames) sSheetName = swDrawDoc.GetSheetNames(i) 'Blattname ermitteln swDrawDoc.ActivateSheet (sSheetName) 'Blatt aktivieren lViewCount = swDrawDoc.GetViewCount ss = swDrawDoc.GetViews 'Ruft alle Ansichten, einschließlich der Blätter, in diesem Zeichnungsdokument ab. lSheetCount = LBound(ss) vv = ss(lSheetCount) lViewCount = LBound(vv) Debug.Print (vv(lViewCount).GetName2()) lNoteCount = vv(lViewCount).GetNoteCount If lNoteCount > 0 Then vNotes = vv(lViewCount).GetNotes 'Ruft die Notizen in dieser Zeichnungsansicht ab. For j = 0 To lNoteCount - 1 'Debug.Print " Note text: " & vNotes(j).GetText Debug.Print " Note text: " & vNotes(j).PropertyLinkedText sZeileninhalt = "$PRPSHEET:""Auftragsnummer""$PRPSHEET:""Number""-$PRPSHEET:""SW-Konfigurationsname""" 'An dieser Stelle eine Abfrage auf den Inhalt um zu prüfen, ob man die richtige Note erwischt hat. If vNotes(j).PropertyLinkedText = sZeileninhalt Then Debug.Print " Das ist es! " Set swNote = vNotes(j) swNote.SetHeightInPoints 13 '19Pt ist Standard swModel.EditRebuild3 Exit For End If Next End If Next End Sub
Euch ein schönes Pfingstwochenende Grüße, Andi Beck ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2627 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 10. Jun. 2025 15:34 <-- editieren / zitieren --> Unities abgeben:         
Hallo in die Runde, jetzt habe ich doch noch diverse Probleme gefunden. Diese Codezeile
Code:
Debug.Print " Note text: " & vNotes(j).PropertyLinkedText
gibt mir im Idealfall diesen Inhalt zurück: $PRPSHEET:"Auftragsnummer"$PRPSHEET:"Number"-$PRPSHEET:"SW-Konfigurationsname" Jetzt gibt es Varianten, da dort noch mehr steht: <FONT size=14PTS>$PRPSHEET:"Auftragsnummer"$PRPSHEET:"Number"-$PRPSHEET:"SW-Konfigurationsname" oder <FONT size=3.8>$PRPSHEET:"Auftragsnummer"$PRPSHEET:"Number"-$PRPSHEET:"SW-Konfigurationsname" Diese anderen Ergebnisse kommen immer dann zustande, wenn die Schriftgröße nicht mit der Voreinstellung in der Blattvorlage übereinstimmt. (So vermute ich) Jetzt habe ich entsprechend meine Abfrage angepasst:
Code:
'von If vNotes(j).PropertyLinkedText = sZeileninhalt Then 'zu If InStr(1, vNotes(j).PropertyLinkedText, sZeileninhalt, vbTextCompare) > 0 Then
So komme ich wieder in meinen Bearbeitungsmodus, wenn ich die richtige Zeile gefunden habe. Leider funktioniert die Schriftgrößenanpassung unter diesen beiden Varianten nicht mehr. Nur wenn die Schriftgröße auf 19pt eingestellt ist, kommt FONT size=xxxx nicht, und ich kann die Schriftgröße anpassen:
Code:
'swNote.SetHeightInPoints (HeightInPoints) 'In Points ist zu grobe Einteilung swNote.SetHeight (HeightInMeter) swModel.EditRebuild3
Kennt jemand diese Problematik und weiß evtl. eine Abhilfe? Grüße, Andi Beck ------------------ Hast du kein Problem? Such dir eins. ( Und löse es )
[Diese Nachricht wurde von Andi Beck am 10. Jun. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur

 Beiträge: 3862 Registriert: 21.06.2001 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 10. Jun. 2025 18:19 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
Hi Andi, ich denke, da hast Du zwei Möglichkeiten: Wenn der Text bzgl. Font-Size da ist: 1. Den Text hinsichtlich Deiner Erfordernisse umschreiben. (Scheint allerdings in mm zu sein!) 2. Den Textabschnitt löschen und dann Deine übliche Einstellung durchführen. Gruß, Torsten [Diese Nachricht wurde von Torsten Niemeier am 10. Jun. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Volkmar Grube Mitglied Konstrukteur
 
 Beiträge: 134 Registriert: 31.01.2009 WIN11 64Bit, SWX 2024, Delphi 10
|
erstellt am: 10. Jun. 2025 21:39 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
Hallo Andi, Diese Fontangaben entstehen, wenn jemand im vorhandenen Text einen Block markiert und dem neue Angaben zur Schriftart und -größe verpasst (das ist so eine Art RTF-Syntax). Ich würde also den Text erstmal saubermachen, d.h. den vorhandenen Text gegen " $PRPSHEET:"Auftragsnummer"$PRPSHEET:"Number"-$PRPSHEET:"SW-Konfigurationsname" " ersetzen (vNotes(j).PropertyLinkedText = sZeileninhalt), ohne jede Schriftgrößenangabe und dann die Schriftgröße verändern (swNote.SetHeight ...). Ich kanns jetzt nicht ausprobieren. Es kann auch sein dass man den Bezugshinweis erstmal temporär auf "Dokumentenstandard" zurücksetzen muss, damit die Änderung wirkt. ------------------ Grüße aus Dresden Volkmar Grube Es gibt keine Probleme, es gibt nur Aufgaben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2627 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 11. Jun. 2025 08:55 <-- editieren / zitieren --> Unities abgeben:         
Hallo Torsten, Hallo Volkmar, besten Dank für eure Anmerkungen. Der Vorschlag von Volkmar war ein Volltreffer, so funktioniert es, da hätte ich auch selber drauf kommen können. Das eigenartige ist, dass das mit dem "Font size" angezeigt wird, wenn man mit der Maus darauf zeigt. Lasse ich aber den Inhalt der Zeile per Textfenster anzeigen, wird "Font size" nicht angezeigt. Jetzt kann ich also die Schriftgröße in allen Varianten verändern. Genauer gesagt verkleinere ich die Schriftgröße, wenn der Text nicht mehr in sein Feld passt. Dazu zähle ich die Anzahl der Ziffern und Buchstaben und definiere die Schriftgröße in Abhängigkeit der Anzahl. Nur leider wird das Ergebnis nicht optimal, da die Ziffern und Buchstaben unterschiedlich Platz benötigen. Beispiel: 11111 ..... IIIII = 17 Stellen = 25,6 mm bei 19 pt WWWWW OOOOO MMMMM = 17 Stellen = 56 mm bei 19 pt Frage: Lässt sich die benötigte Textlänge in mm per API abfragen? Wenn ja, dann könnte ich die Textgröße viel besser an den vorhanden Platz anpassen. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Volkmar Grube Mitglied Konstrukteur
 
 Beiträge: 134 Registriert: 31.01.2009 WIN11 64Bit, SWX 2024, Delphi 10
|
erstellt am: 12. Jun. 2025 11:04 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
Hallo Andi, die reale Textbreite für ein Wort zu errechnen, ist immer ein bisschen schwierig. Ich habe mich darum immer gedrückt. Das errechnet sich nämlich nicht nur aus der Textgröße, sondern da spielen auch noch die Schriftarten mit rein. Vielleicht mal googeln unter "Schriftbreite errechnen" u.ä. Da muss man aus dem Wort, der Schriftart und der zur Verfügung stehenden Breite in mm die Schrifthöhe errechnen. Im konkreten Fall steht der reale Text zur Programmierzeit ja auch noch nicht wirklich zur Verfügung, sondern nur die Platzhalter. Wenn jemand den Eigenschaftstext ändert, ändert sich wieder alles. ------------------ Grüße aus Dresden Volkmar Grube Es gibt keine Probleme, es gibt nur Aufgaben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2627 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 12. Jun. 2025 14:35 <-- editieren / zitieren --> Unities abgeben:         
Hallo Volkmar, ich habe ein wenig getüftelt und einen ganz brauchbaren Weg gefunden, die Textlänge zu optimieren. Ich erzeuge einen Rahmen um den Text, vermesse ihn, passe solange an, bis meine Wunschlänge erzeugt ist, und entferne den Rahmen wieder. Code:
Dim bRet As Boolean Dim value As Variant Dim Textlänge As Double bRet = swNote.SetBalloon(4, 0) 'Rahmen um den Text anbringen value = swNote.GetBalloonInfo() Debug.Print " Balloon Info x center point = " & value(0) Debug.Print " Balloon Info x arc point = " & value(3) Debug.Print " Balloon Info radius = " & value(6) Debug.Print " Textlänge = " & (value(0) - value(3)) * 2Textlänge = (value(0) - value(3)) * 2 'Startwert 'Schleife bis Textlänge bei 74 mm ist Do While Textlänge <= 0.0743 HeightInMeter = HeightInMeter + 0.0001 swNote.SetHeight (HeightInMeter) bRet = swNote.SetBalloon(0, 0) 'Rahmen um den Text entfernen bRet = swNote.SetBalloon(4, 0) 'Rahmen um den Text erneut anbringen value = swNote.GetBalloonInfo() Textlänge = (value(0) - value(3)) * 2 Debug.Print "Textlänge: " & Textlänge Loop bRet = swNote.SetBalloon(0, 0) 'Rahmen um den Text entfernen
Evtl. kann damit jemand etwas anfangen oder hat auch noch Verbesserungsvorschläge. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |