Einfügen von Bildern in RTF-Box verhindern

  • VB.NET

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von Mangafreak1995.

    Einfügen von Bildern in RTF-Box verhindern

    Moin Moin,

    ich möchte verhindern das Bilder aus der Zwischenablage in meine RTF-Box eingefügt werden. Ich habe es folgendermaßen probiert:

    VB.NET-Quellcode

    1. If e.Control = True And e.KeyCode = Keys.V Then
    2. Dim DataObjects As IDataObject = Clipboard.GetDataObject
    3. If DataObjects.GetDataPresent(DataFormats.Bitmap) Then
    4. MsgBox("Bitte fügen Sie keine Bilder ein!")
    5. End If


    Das funktionieret isofern gut, wenn sich nur ein Bild in der Zwischenablage befindet. Wenn sich aber Text und Bild in der Zwischenablage befindet wird es als Text erkannt und somit auch das Bild eingefügt. Wie kann man das verhindern?
    Guten Morgen,

    habe das Wochenende ein wenig herum experimentiert:

    Quellcode

    1. ElseIf (Clipboard.ContainsText And Clipboard.ContainsImage) Then
    2. MsgBox("Text und Bild")


    Leider bringt auch das nicht den erwünschten Erfolg. Es wird nur der Text erkannt! Weiß jmd wie die Bilder in der Zwischenablage gespeichert werden? So könnte man doch die Bilder herausfiltern, oder?
    Probier doch mal folgendes:
    Falls Bild und Text drin sind, füge sie in ein separates hidden RTF-Control ein und hole Dir von dort nur den Text.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Na ich speichere ja den RTF-Text in der Datenbank ab, somit weiß ich auch wie die Bilder gespeichert werden.
    Ich dachte mir, das es in der Zwischenablage einen festen Anfangs- und Endepunkt für Bilder gibt. Nach denen könnte man dann ja suchen und das Bild herausfiltern.
    In der Zwisxchenablage steht ja kein Klartext/"Klarbild", das sind vom System gehandelte Objekte. Die würde ich nicht anfassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es geht viel einfacher: :D

    VB.NET-Quellcode

    1. RichTextBox1.Rtf = Clipboard.GetData(System.Windows.Forms.DataFormats.Rtf).ToString
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ausprobieren.

    Es wird der RTF-Text übernommen, nicht aber ein Bild.
    RichTextBox1.Rtf = Clipboard.GetData(System.Windows.Forms.DataFormats.Rtf).ToString
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Klar. Bilder gehören zum RTF-Format.
    Hier mal mit Um-Speicherung, allerdings geht die Formatierung flöten.

    VB.NET-Quellcode

    1. If (Clipboard.ContainsData(System.Windows.Forms.DataFormats.Rtf)) Then
    2. Using rtf2 As New RichTextBox
    3. rtf2.Rtf = Clipboard.GetData(System.Windows.Forms.DataFormats.Rtf).ToString
    4. rtf2.SelectionStart = 0
    5. rtf2.SelectionLength = rtf2.Text.Length
    6. Clipboard.Clear()
    7. Dim data As New DataObject
    8. data.SetData(DataFormats.Text, rtf2.Text)
    9. Clipboard.SetDataObject(data)
    10. RichTextBox1.Text = Clipboard.GetData(System.Windows.Forms.DataFormats.Text).ToString
    11. End Using
    12. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    dann ist etwas an meinem Code falsch! Ich prüfe folgendermaßen, ob Text und Bild in der Zwischenablage sind:

    Quellcode

    1. If (Clipboard.ContainsText And Clipboard.ContainsImage) Then
    2. _rtf.Rtf = Clipboard.GetData(System.Windows.Forms.DataFormats.Rtf).ToString()


    oder wie würdest du das gestalten?
    ContainsImage => Ist ein Bild in der Ablage ala PDN/PS/Gimp/Paint->Markieren-Kopieren ... also ein Bitmap

    RodFromGermany schrieb:

    Klar. Bilder gehören zum RTF-Format.
    Hier mal mit Um-Speicherung, allerdings geht die Formatierung flöten.

    VB.NET-Quellcode

    1. If (Clipboard.ContainsData(System.Windows.Forms.DataFormats.Rtf)) Then
    2. Using rtf2 As New RichTextBox
    3. rtf2.Rtf = Clipboard.GetData(System.Windows.Forms.DataFormats.Rtf).ToString
    4. rtf2.SelectionStart = 0
    5. rtf2.SelectionLength = rtf2.Text.Length
    6. Clipboard.Clear()
    7. Dim data As New DataObject
    8. data.SetData(DataFormats.Text, rtf2.Text)
    9. Clipboard.SetDataObject(data)
    10. RichTextBox1.Text = Clipboard.GetData(System.Windows.Forms.DataFormats.Text).ToString
    11. End Using
    12. End If
    Auf den ersten Blick funktioniert das so wie Du schreibst ja. Allerdings löscht er den ganzen Inhalt der RTF-Box.... und fügt dann den unformatierten Text aus der Zwischenablge ein.
    hier wird zwar ein anderes Problem angesprochen (einfügen eines Bildes) aber dort kannst du den Aufbau gut rauslesen und mit RegEx kann man das ganze dann rausfiltern aus der RTF.