Hot News:

Unser Angebot:

  Foren auf CAD.de
  VBasic / vb.net / vbs / wsh
  Bild in Richtextbox einfügen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2678
Registriert: 06.11.2000

erstellt am: 22. Feb. 2012 13:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz