| |  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Bild in Richtextbox einfügen (5613 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ privat: ab 2024 Onshape seit 2025 SolidWorks for Makers
|
erstellt am: 22. Feb. 2012 12:05 <-- editieren / zitieren --> Unities abgeben:         
Hallo mal wieder Ich habe wie immer mal wieder ein Problem: Ich möchte in eine Richtextbox mit Text an einer bestimmten Stelle eine Grafik einfügen. Ich habe bisher keine andere Möglichkeit gefunden, als diese über die Zwischenablage reinzuholen. Eine direkte Platzierung eines Bildes scheint nicht möglich zu sein. Zur Definition der Position enthält der Text den Platzhalter "{BILD}". Ich suche nach diesem Platzhalter, setze den Cursor per .select an die entsprechende Position und füge das Bild aus der Zwischenablage ein. Das funktioniert auch- aber der komplette nachfolgende Text geht dabei verloren bzw. wird von der Zwischenablage überschrieben. Hier der entsprechende Code-Auszug:
Code: With rtfbox 'rtf-Datei ist bereits geladen ... PosStart = .Find("{BILD}") If PosStart > 0 Then 'Bild-Position gefunden PosEnd = .Find("}", PosStart, 0) .Select(PosStart, PosEnd) ' Platzhalter selektieren Clipboard.SetImage(pbSchema.Image) RTFBox.Paste() End If ... end with
Hat jemand ne Idee, wie ich da weiter kommen kann? ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000
|
erstellt am: 22. Feb. 2012 13:08 <-- editieren / zitieren --> Unities abgeben:         
EINE Lösung oder besser einen Workaround habe ich selber gefunden. Ich muss mir erst den Text der Richttextbox, der nach dem Platzhalter kommt, sichern. Nach dem Einfügen des Bildes kann ich diesen Text dann wieder nach dem Bild hinzufügen. Es geht- eine direkte Möglichkeit, Grafiken zu positionieren, wäre mir natürlich lieber, aber ich kann damit leben.
Code: With rtfbox 'rtf-Datei ist bereits geladen ... PosStart = .Find("{BILD}") If PosStart > 0 Then 'Bild-Position gefunden PosEnd = .Find("}", PosStart, 0) 'Erst mal alles nach {BILD} selektieren und bufferen Dim l As Integer = Len(.Text) 'Länge des RTF-Textes .Select(PosEnd + 1, l) Dim strDummy As String = .SelectedText Dim strDummy As String = .SelectedRtf .Select(PosStart, PosEnd) ' Platzhalter selektieren Clipboard.SetImage(pbSchema.Image) RTFBox.Paste() .Select(PosEnd, PosEnd) .SelectedText = strDummy .SelectedRtf = strDummy End If ... end with
[Edit]Der Textbuffer muss den restlichen Text als rtf bufferen, sonst geht die Formatierung verloren. Habe den Code entsprechend korrigiert[/Edit] ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim [Diese Nachricht wurde von KMassler am 24. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ privat: ab 2024 Onshape seit 2025 SolidWorks for Makers
|
erstellt am: 24. Feb. 2012 10:27 <-- editieren / zitieren --> Unities abgeben:         
Sorry for bothering you...aber das muss ich jetzt schon zu ende führen. Neues Problem: Wenn der gebufferte Richttextteil einfach wieder nach dem Bild angefügt wird, entsteht ein hässlicher großer Abstand. Lösung: Aus dem gebufferten rtf-Text muss der rtf-Header und der Teil bis zum "<BILD>" entfernt und durch einen rudimentären rtf-Header ersetzt werden. Außerdem habe ich {BILD} durch <BILD> ersetzt, da die geschweiften Klammern {} im RTF-Format als Steuersymbole verwendet werden: Code: ... Dim RTFFile As String = "" Dim Found As Boolean = True Dim PosStart As Integer = 0 Dim PosEnd As Integer = 0 Dim strDummy As String RTFFile = Application.StartupPath & "\rtfdatei.rtf" With rtfbox ' ... irgendwas tun 'dann Bild ersetzen: PosStart = .Find("<BILD>") If PosStart > 0 Then 'Bild-Position gefunden PosEnd = .Find(">", PosStart, 0) 'Erst mal alles nach {BILD} selektieren und bufferen .Select(PosStart, Len(.Text)) strDummy = .SelectedRtf.ToString .Select(PosStart, PosStart) Clipboard.SetImage(pbSchema.Image) .Paste() .Select(PosEnd, PosEnd) 'strDummy enthält den RTF-Text nach dem Platzhalter <BILD>. 'Dieser RTF-Text enthält den kompletten RTF-Header. W 'Wenn der einfach so wieder angefügt wird, 'entsteht ein großer hässlicher Abstand zwischen dem Bild und den folgenden Text. 'Daher muss dieser Wasserkopf entfernt und durch einen rudimentären RTF-header ersetzt werden 'strdummy.replace funktioniert hier nicht, also etwas umständlicher: PosStart = InStr(strDummy, "<BILD>") + Len("<BILD>") strDummy = Microsoft.VisualBasic.Right(strDummy, Len(strDummy) - PosStart - 3) strDummy = "{\rtf " & strDummy .SelectedRtf = strDummy 'Ich weiß nicht, ob der RTF-code damit formal fehlerfrei ist, auf jeden Fall funktioniert's End If ' ... End With ...
------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim [Diese Nachricht wurde von KMassler am 10. Dez. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |