gaidar писал(а):В буфере может быть все, поскольку там могут быть текстовые и двоичные данные, а значит может быть все, что угодно, поскольку все что ни есть - либо текст, либо данные.
Вопрос не корректен.
Хорошо, попробую задать вопрос более корректно:
Сделал две процедурки: первая вызывается перед выводом сообщения (при этом в RTB через буфер обмена вставляются смайлы) и сохраняет данные находящиеся в буфере обмена в переменной типа Variant, вторая после вывода сообщения (по моей задумке восстанавливает данные в буфере обмена).
Вот код:
- Код: Выделить всё
Private vntClipboardData As Variant
Private intClpbrdDataFormat As Integer
Sub SaveClipboardData()
If IsEmpty(Clipboard.GetData) Then
vntClipboardData = -1
Exit Sub
End If
If Clipboard.GetFormat(ccCFBitmap) Then
Set vntClipboardData = Clipboard.GetData(ccCFBitmap)
intClpbrdDataFormat = ccCFBitmap
ElseIf Clipboard.GetFormat(ccCFDIB) Then
Set vntClipboardData = Clipboard.GetData(ccCFDIB)
intClpbrdDataFormat = ccCFDIB
ElseIf Clipboard.GetFormat(ccCFEMetafile) Then
Set vntClipboardData = Clipboard.GetData(ccCFEMetafile)
intClpbrdDataFormat = ccCFEMetafile
ElseIf Clipboard.GetFormat(ccCFFiles) Then
Set vntClipboardData = Clipboard.GetData(ccCFFiles)
intClpbrdDataFormat = ccCFFiles
ElseIf Clipboard.GetFormat(ccCFMetafile) Then
Set vntClipboardData = Clipboard.GetData(ccCFMetafile)
intClpbrdDataFormat = ccCFMetafile
ElseIf Clipboard.GetFormat(ccCFPalette) Then
Set vntClipboardData = Clipboard.GetData(ccCFPalette)
intClpbrdDataFormat = ccCFPalette
ElseIf Clipboard.GetFormat(ccCFRTF) Then
vntClipboardData = Clipboard.GetText(ccCFRTF)
intClpbrdDataFormat = ccCFRTF
ElseIf Clipboard.GetFormat(ccCFText) Then
vntClipboardData = Clipboard.GetText(ccCFText)
intClpbrdDataFormat = ccCFText
End If
End Sub
Sub RestoreClipboardData()
If intClpbrdDataFormat = -1 Then Exit Sub
If intClpbrdDataFormat = ccCFBitmap Then
Clipboard.SetData vntClipboardData, ccCFBitmap
vntClipboardData = Nothing
ElseIf intClpbrdDataFormat = ccCFDIB Then
Clipboard.SetData vntClipboardData, ccCFDIB
vntClipboardData = Nothing
ElseIf intClpbrdDataFormat = ccCFEMetafile Then
Clipboard.SetData vntClipboardData, ccCFEMetafile
vntClipboardData = Nothing
ElseIf intClpbrdDataFormat = ccCFFiles Then
Clipboard.SetData vntClipboardData, ccCFFiles
vntClipboardData = Nothing
ElseIf intClpbrdDataFormat = ccCFMetafile Then
Clipboard.SetData vntClipboardData, ccCFMetafile
vntClipboardData = Nothing
ElseIf intClpbrdDataFormat = ccCFPalette Then
Clipboard.SetData vntClipboardData, ccCFPalette
vntClipboardData = Nothing
ElseIf intClpbrdDataFormat = ccCFRTF Then
Clipboard.SetText vntClipboardData, ccCFRTF
ElseIf intClpbrdDataFormat = ccCFText Then
Clipboard.SetText vntClipboardData, ccCFText
End If
End Sub
Sub ShowMessage()
SaveClipboardData
' здесь выводим сообщение в RTB и вставляем смайлики
RestoreClipboardData
End Sub
Пока вроде бы работает. Но ещё не проверял во всех ситуациях.
Теперь вопрос корректен?
Надеюсь этот код достаточен?
Меня интересует в первую очередь способ сохранять данные клипборда и потом восстановить содержимое клипборда.