Rubrik: Maus & Tastatur · Drag & Drop | VB-Versionen: VB.NET | 09.04.08 |
Grafik aus PictureBox nach Word / Corel Photo Paint o.ä. ziehen Das Beispiel ermöglicht es eine Grafik aus einer VB Anwendung nach z.B. MS Word, Corel Photopaint o.ä. zu "ziehen". | ||
Autor: Heinz Prelle | Bewertung: | Views: 13.763 |
www.visual-basic5.de | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Nachfolgendes Beispiel zeigt, wie man das Bild einer PictureBox via Drag & Drop in eine andere Anwendung schieben kann (bspw. Word, Corel Photopaint etc.).
Erstellen Sie ein neues Projekt und platzieren auf die Form eine PictureBox (PictureBox1). Laden Sie über den Eigenschaften-Dialog ein beliebiges Bild in die PictureBox. Fügen Sie jetzt folgenden Code in den Codeteil der Form ein:
Imports System.IO Imports System.Drawing.Imaging Public Class Form1
Private Sub PictureBox1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown ' Drag & Drop einleiten Me.DragPictureBoxContentTo(Me.PictureBox1) End Sub
''' <summary> ''' Drag + Drop von PictureBox nach MS Word / Corel Photo Paint o.ä. ''' </summary> Private Sub DragPictureBoxContentTo(ByVal pb As PictureBox) Const INDEPENDENT_BITMAP As String = "DeviceIndependentBitmap" Dim save As New MemoryStream Dim write As New MemoryStream Const OFFSET As Integer = 14 Try Dim dt As New DataObject If pb IsNot Nothing Then ' Inhalt der PictureBox in MemoryStream speichern pb.Image.Save(save, ImageFormat.Bmp) ' Memory-Stream als Byte-Array Dim content As Byte() = save.GetBuffer() ' die ersten 14 Bytes abschneiden und in neues ' MemoryStream-Objekt speichern write.Write(content, OFFSET, CInt(save.Length - OFFSET)) save.Position = 0 ' MemoryStream dem DataObject zuweisen ' Format: DeviceIndependentBitmap dt.SetData(INDEPENDENT_BITMAP, write) ' Daten des DataObjekts für den Drag&Drop Kopiervorgang verwenden pb.DoDragDrop(dt, DragDropEffects.Copy) End If Catch ex As Exception MessageBox.Show(ex.Message.ToString(), "Info") Finally ' Objekte wieder freigeben If save IsNot Nothing Then save.Dispose() If write IsNot Nothing Then write.Dispose() End Try End Sub
End Class