| |
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 |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 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
|
|