VB 5/6-Tipp 0100: Dateihandling mit OLE Drag und Drop
von Jochen Wierum
Beschreibung
Wie einfach Drag and Drop in VB zu realisieren ist, zeigt dieses Beispiel. Hiermit können Dateien aus dem Explorer, Desktop, etc. in die eigene Anwendung gezogen werden. Zudem wird gezeigt, wie daraufhin die 'gedroppte' Datei als Textdatei eingelesen wird.
Dieser Tipp wurde am 07. April 2005 von Jochen Wierum mit Tipp 502 zusammgengeführt. Er zeigt nun das "Draggen" und das "Droppen" in einer Anwendung.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: keine | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Festplattenauswahlliste "Drive1" ' Steuerelement: Verzeichnisauswahlliste "Dir1" ' Steuerelement: Dateiauswahlliste "File1" ' Steuerelement: Listen-Steuerelement "List1" ' Steuerelement: Textfeld "Text1" Option Explicit Private Sub Command1_Click() List1.Clear Text1 = "" End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub File1_OLEStartDrag(Data As DataObject, AllowedEffects As Long) Dim i As Integer ' Puffer leeren Data.Clear ' Alle Ausgewählten Dateien einfügen For i = 0 To File1.ListCount - 1 If File1.Selected(i) Then Data.Files.Add File1.Path & IIf(Right(File1.Path, 1) = "\", "", _ "\") & File1.List(i) End If Next i ' Datentyp setzen Data.SetData , vbCFFiles End Sub Private Sub Form_Load() 'File1.MultiSelect = 2 'File1.OLEDragMode = 1 'Text1.OLEDropMode = 1 End Sub Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, _ Button As Integer, Shift As Integer, X As Single, Y As Single) Dim i As Integer If Data.GetFormat(vbCFFiles) Then For i = 1 To Data.Files.Count List1.AddItem Data.Files.Item(i) Next i End If End Sub Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, _ Button As Integer, Shift As Integer, X As Single, Y As Single) Dim FN As Integer Dim buf As String Text1.Text = "" If Data.GetFormat(vbCFFiles) Then FN = FreeFile Open Data.Files.Item(1) For Input As #FN Do Until EOF(FN) Line Input #1, buf Text1.Text = Text1.Text & buf & vbCrLf Loop Close FN End If End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB5 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB6 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 6 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Stefan Blum am 30.10.2007 um 10:14
Hallo Zusammen weiß jemand wie ich den Code umbauen muss so das der Dateiname in der Listbox erschein wenn ich die Datei nur auf den Rahmen der Form ziehe und nicht in die Listbox?
Gruß
Stefan
Option Explicit
Private Sub List1_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
Dim i As Integer
' Puffer leeren
Data.Clear
' Alle Ausgewählten Dateien einfügen
For i = 0 To File1.ListCount - 1
If File1.Selected(i) Then
Data.Files.Add File1.Path & IIf(Right(File1.Path, 1) = "\", "", _
"\") & File1.List(i)
End If
Next i
' Datentyp setzen
Data.SetData , vbCFFiles
End Sub
Private Sub Form_Load()
List1.OLEDropMode = 1
List1.OLEDragMode = 1
Form1.OLEDropMode = 1
End Sub
Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, _
Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i As Integer
If Data.GetFormat(vbCFFiles) Then
For i = 1 To Data.Files.Count
List1.AddItem Data.Files.Item(i)
Next i
End If
End Sub
Kommentar von Klaus Banek am 06.06.2002 um 17:17
Hallo, hätte noch eine Frage zu OLE Objekten. Wie kann man per Code auf die Objekteigenschaften wie z.B. Dateierstellungsdatum, Dateigröße, Dateiname und Pfad usw. zugreigen?
vielen Dank für die Hilfe!
mfg
Klaus B.
Kommentar von Vesa Järvensivu am 29.11.2001 um 16:19
Drag drop question: I use characters 0 to 255, and there is not format for Data that suits. If I use vbCFText then it's truncated when it arrives when chr(0) is found...I'm looking for Win API functions RegisterClipboardFormat examples...Thankful for help :)
Vesa, Sweden
Kommentar von Nadine Fassbender am 13.11.2001 um 22:01
Hab eine Frage zum FlexGrid!
Und zwar hab ich zwei Spalten.
In der einen steht zum Bsp.Wert;in der anderen Anzahl!
Wenn ich nun eine Zahl eingebe,die im Feld "Wert" steht, möchte ich automatisch die Anzahl dieser "Zahl" in der 2.Spalte erscheinen lassen.Wie sprech ich Spalte 2 an?
Kommentar von i.seika am 06.08.2001 um 22:03
Suche dringend eine Lösung zu Drag and Drop !!
Habe Windows 95, aber D+d funktioniert einfach nicht !!
Kann nichts "ziehen" oder bewegen-alles bleibt da, wo es ist...
gibt es eine "Aktivierung", die ich als einfacher Anwender durchführen kann ? War schon in "regedit.exe", kann
ich von dort etwas ändern ??
Bin für eine Lösung sehr dankbar...
Mfg
iris Seika
Kommentar von Michael Werner am 13.03.2001 um 04:31
schreiben Sie doch in ihren einleitenden kommentar rein, dass
voreingestellt sein muss:
OleDropMode=1 (Manuell) für List1 u. Text1
mfg
michael w.