PDA

Vollständige Version anzeigen : Inhalt in Zwischenablage löschen


Alexandra, die zweite
18.10.2001, 09:31
Hallöle

ich hab einen Button in einem Formular, mit dem ich über die Zwischenablage den aktuellen Datensatz kopiere, zu einem neuem springe und dort einfüge.

Funktioniert alles problemlos. Was ich aber jetzt noch gerne möchte, ist, nach erfolgreichem kopieren, den Inhalt der Zwischenablage löschen. Weiß jemand, wie ich das (mittels VBA) machen könnte?

gestern war heute noch morgen :-),
Alex

erwin
18.10.2001, 09:37
schau mal bei Reinhard (www.kraasch.de) in den Tipps/Beispielen da gibt's was zum Thema Zwischenablage...

so long erwin...

md
18.10.2001, 09:41
Hallo Alexandra!
Ich verwende folgendes Modul:


'----------------------------------------------------------------------------------
' Einsatz:
' dim Clipboard as new ClpBrd
'
' Methoden:
' Clipboard.SetData <Data>
'
' Daten in die Zwischenablage kopieren...
'
' <Data>= String-Konstante oder String-Variable
' Beispiel:
' X$= DLookUp("[Feld]","[Tabelle]",SQL$)
' Clipboard.SetData X$
' oder
' Clipboard.SetData "Testtext"
'
' X$ = Clipboard.GetData()
'
' Daten aus der Zwischenablage holen...
'
' X$= String-Variable oder direkt im Ausdruck
' Beispiel:
' X$= Clipboard.GetData()
' oder
' rs("Feld")= "Test: " & Clipboard.GetData()
'
' Clipboard.Clear
'
' Löscht den aktuellen Inhalt der Zwischenablage...
'
'
' Clipboard.ClpBrdEmpty()
'
' True, wenn Zwischenablage leer ist, sonst False
'
'----------------------------------------------------------------------------------

'API-Funktionen für Clipboard...
Private Declare Function CountClipboardFormats Lib "user32" () As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long

'API-Funktionen für Speicher-Operationen...
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function lStrCpy Lib "kernel32" Alias "lstrcpy" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long

Private Const GHND = &H42
Private Const CF_TEXT = 1
Private Const MAXSIZE = 32768

Sub Clear()
Dim lngRetVal As Long

If OpenClipboard(0&) <> 0 Then
lngRetVal = EmptyClipboard()
lngRetVal = CloseClipboard()
End If

End Sub

Function ClpBrdEmpty() As Boolean
Dim lngRetVal As Long

lngRetVal = CountClipboardFormats()
ClpBrdEmpty = (lngRetVal = 0) Or (IsClipboardFormatAvailable(CF_TEXT) = 0)

End Function

Function GetData()
Dim hClipMemory As Long
Dim lpClipMemory As Long
Dim strCBData As String
Dim lngRetVal As Long

strCBData = ""
If ClpBrdEmpty() Then
Beep
MsgBox "ClpBrd/Get: Zwischenablage ist leer...", vbCritical
Exit Function
End If

If IsClipboardFormatAvailable(CF_TEXT) = 0 Then
Beep
MsgBox "ClpBrd/Get: Zwischenablage enthält keinen Text...", vbCritical
Exit Function
End If

If OpenClipboard(0&) = 0 Then
Beep
MsgBox "ClpBrd/Get: Zwischenablage kann nicht geöffnet werden...", vbCritical
Exit Function
End If

hClipMemory = GetClipboardData(CF_TEXT)
If IsNull(hClipMemory) Then
Beep
MsgBox "ClpBrd/Get: Fehler beim Lesen der Zwischenablage..."
strCBData = ""
GoTo EndeFunc
End If

lpClipMemory = GlobalLock(hClipMemory)

If Not IsNull(lpClipMemory) Then
strCBData = Space$(MAXSIZE)
lngRetVal = lStrCpy(strCBData, lpClipMemory)
lngRetVal = GlobalUnlock(hClipMemory)

On Error Resume Next
strCBData = Mid(strCBData, 1, InStr(1, strCBData, Chr$(0), 0) - 1)
If Err <> 0 Then
Beep
MsgBox "ClpBrd/Get: Ungültiges Format ...", vbCritical
strCBData = ""
End If
Else
Beep
MsgBox "ClpBrd/Get: Fehler beim Kopieren aus Zwischenablage...", vbCritical
End If

EndeFunc:
lngRetVal = CloseClipboard()
GetData = strCBData

End Function


Function SetData(strCBData As String) As Boolean
Dim hGlobalMemory As Long
Dim lpGlobalMemory As Long
Dim hClipMemory As Long
Dim lngRetVal As Long

SetData = False
hGlobalMemory = GlobalAlloc(GHND, Len(strCBData) + 1)
lpGlobalMemory = GlobalLock(hGlobalMemory)
lpGlobalMemory = lStrCpy(lpGlobalMemory, strCBData)
If GlobalUnlock(hGlobalMemory) <> 0 Then
Beep
MsgBox "ClpBrd/Set: Fehler beim Kopieren in die Zwischenablage...", vbCritical
GoTo EndeFunc
End If

If OpenClipboard(0&) = 0 Then
Beep
MsgBox "ClpBrd/Set: Zwischenablage konnte nicht geöffnet werden...", vbCritical
GoTo EndeFunc
End If

lngRetVal = EmptyClipboard()
hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)
SetData = True

EndeFunc:
If CloseClipboard() = 0 Then
Beep
MsgBox "ClpBrd/Set: Fehler beim Zugriff auf die Zwischenablage...", vbCritical
SetData = False
End If

End Function
Grüße
MD

Alexandra, die zweite
18.10.2001, 10:59
Holla

danke für eure Tipps und Hinweise! Es scheint zu funktionieren (hab's (noch) nicht bei mir eingebaut), aber gibt es nicht auch einen einfacheren Weg?

Momentan mache ich das wie folgt

DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.RunCommand acCmdRecordsGoToNew
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste

Also aktuellen Datensatz auswählen, kopieren, zu neuem Datensatz gehen, den auswählen und einfügen. Ich hatte gehofft, dass es da auch etwas ganz einfaches gibt, um den Inhalt der Zwischenablage zu löschen. Alles was ich damit bezwecken will ist, dass beim verlassen der Datenbanken nicht die Meldung erscheint, dass sich noch Daten in der Zwischenablage befinden, und ob die gelöscht werden sollen

Danke!!,
Alex

Alexandra, die zweite
19.10.2001, 08:18
na, kennt keiner eine andere Möglichkeit? Schade eigentlich, bin doch nicht die einzige, die den einfacheren Weg gewählt hat, oder? ;-),

Alex