| |
VB & Windows APIDateien in die Zwischenablage kopieren mit DragDrop Effect | | | Autor: RalfPeter | Datum: 04.07.05 17:07 |
| Hallo vbler,
ich möchte Dateien in die Zwischenablage kopieren und den Drop Effect mitgeben. Also Ausschneiden oder Kopieren.
Bisher Verwende ich den API-Aufruf "SetClipboardData". Damit kann ich auch schon Dateien in die Zwischenablage setzen. Nur wie bekomme ich den Drop Effect ebenfalls rein?
Gruß
Ralf
P.S. Ich möchte kein Drag&Drop Durchführen
Ich verwende VB6 | |
Danke, ich konnte es selbst lösen | | | Autor: RalfPeter | Datum: 05.07.05 09:26 |
| Die Zwischenablage muß nur um das Format "Preferred DropEffect" erweitert werden.
Das reinschreiben funktioniert genauso wie bei den Dateien. | |
Hier die ausführliche Lösung: Preferred DropEffect. | | | Autor: RalfPeter | Datum: 05.07.05 13:01 |
| Als Basis sollte sich jeder zuerst den Tipp "Dateiliste in die Zwischenablage
kopieren " ansehen (http://www.vbarchiv.net/xtra/200202.php3)
Anschließend kann durch einen separaten Aufruf der "DropEffect "gesetzt werden:
Für die, die mit dem "DropEffect" nichts anfangen können: Der "DropEffect "
(Eigentlich "Preferred DropEffect" ) ist ein Format in der Zwischenablage und regelt u.a.
ob eine Datei kopiert oder ausgeschnitten werden soll.
Option Explicit
' API stuff
' Clipboard routines.
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function RegisterClipboardFormat Lib "user32" Alias _
"RegisterClipboardFormatA" (ByVal lpString As String) As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, _
ByVal hMem As Long) As Long
' Global memory routines. (Pointers)
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As _
Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef _
Destination As Any, ByRef Source As Any, ByVal Length As Long)
' Global Memory Flags
Private Const GMEM_MOVEABLE = &H2
Private Const GMEM_ZEROINIT = &H40
Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
' Register Clipboard Format
Private Const CFSTR_PREFERREDDROPEFFECT As String = "Preferred DropEffect" & _
vbNullChar
' DropEffect constants
Public Enum KdFileDropEffectConstants
kdDropEffectNone = vbDropEffectNone
kdDropEffectCopy = vbDropEffectCopy
kdDropEffectMove = vbDropEffectMove
kdDropEffectLink = 4
End Enum
' Copy the "DropEffect" into the clipboard. Return True if we succeed.
Public Function SetFilesDropEffect(ByVal lEffect As Long) As Boolean
Dim lMemoryHandle As Long
Dim lMemoryPointer As Long
Dim lFormat As Long
Dim lReturn As Long
' Open the clipboard.
If OpenClipboard(0) Then
' Get global memory pointer to hold the lEffect variable
lMemoryHandle = GlobalAlloc(GHND, Len(lEffect))
' If we have a memory handle
If lMemoryHandle Then
' Lock the memory while we initialize it.
lMemoryPointer = GlobalLock(lMemoryHandle)
' Copy the lEffect variable into the global memory.
Call MoveMemory(ByVal lMemoryPointer, lEffect, Len(lEffect))
' Unlock the memory
Call GlobalUnlock(lMemoryHandle)
' Register the format
lFormat = RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT)
' Copy the format to the clipboard.
lReturn = SetClipboardData(lFormat, lMemoryHandle)
' Check if we succeed
If lReturn Then
SetFilesDropEffect = True
End If
End If
' Close the clipboard.
Call CloseClipboard
End If
End Function Der Aufruf ist dann auch relativ einfach:
A. Um Dateien zu kopieren Call SetFileDropEffect(kdDropEffectCopy Or kdDropEffectLink) B. Um Dateien zu verschieben Call SetFileDropEffect(kdDropEffectMove) Leider funktioniert es nicht anschließend im Explorer eine Verknüpfung einzufügen.
Würde mich freuen, wenn dazu einer eine Lösung findet und diese hier posted.
Schöne Grüße
Ralf-Peter Baumann | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|