Возможны ли?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Возможны ли?

Сообщение Ruslan Demidow » 23.11.2004 (Вт) 20:50

Вопрос: возможны ли в буфере обмена данные других форматов, отличных от:
vbCFBitmap
vbCFDIB
vbCFEMetafile
vbCFFiles
vbCFLink
vbCFMetafile
vbCFPalette
vbCFRTF
vbCFText
Я идиот! Убейте меня, кто-нибудь!????

У меня в программе в RTB смайлики вставляются через буфер обмена. При этом перед помещением изображения в буфер - приходится его очищать. А это может не понравиться пользователю.
Хочу: перед очисткой буфера и вставкой в RTB смайлика сделать сохранение содержимого буфера в переменную, а потом его восстановить.
Реально?
Хотя конечно же больше интересует ответ на первый вопрос.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 23.11.2004 (Вт) 23:33

В буфере может быть все, поскольку там могут быть текстовые и двоичные данные, а значит может быть все, что угодно, поскольку все что ни есть - либо текст, либо данные.
Вопрос не корректен.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 24.11.2004 (Ср) 10:27

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


Пока вроде бы работает. Но ещё не проверял во всех ситуациях.
Теперь вопрос корректен?
Надеюсь этот код достаточен?
Меня интересует в первую очередь способ сохранять данные клипборда и потом восстановить содержимое клипборда.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Возможны ли?

Сообщение tyomitch » 24.11.2004 (Ср) 16:10

Ruslan Demidow писал(а):Вопрос: возможны ли в буфере обмена данные других форматов, отличных от:

Да. Попробуй скопировать что-нибуть в Ворде, запусти clipbrd.exe и посмотри, сколько сразу форматов он туда суёт.
Сохранять буфер в переменную - имхо безнадёжное дело... Хотя EnumClipboardFormats может помочь.

Кстати, ты похоже вообще не учитываешь, что в буфере могут одновременно быть данные сразу во многих форматах, например - одновременно картинка и текст.
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 24.11.2004 (Ср) 16:35

tyomitch писал(а):
Ruslan Demidow писал(а):Вопрос: возможны ли в буфере обмена данные других форматов, отличных от:

Да. Попробуй скопировать что-нибуть в Ворде, запусти clipbrd.exe и посмотри, сколько сразу форматов он туда суёт.
Сохранять буфер в переменную - имхо безнадёжное дело... Хотя EnumClipboardFormats может помочь.

Кстати, ты похоже вообще не учитываешь, что в буфере могут одновременно быть данные сразу во многих форматах, например - одновременно картинка и текст.
Не учитываю. :( А очень хотелось бы...
Очень не хочется отпугивать пользователей потерей данных в буфере при выводе сообщения в RTB со смайлами. Но и от смайлов отказываться не хочется.
Что делать? (с) Чернышевский.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.11.2004 (Ср) 16:38

Вставлять смайлы, не используя буфер обмена.
Где-то на форуме уже проскакивал такой код.
Lasciate ogni speranza, voi ch'entrate.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 24.11.2004 (Ср) 18:34

alibek писал(а):Вставлять смайлы, не используя буфер обмена.
Где-то на форуме уже проскакивал такой код.
Окей. Поищу.
И всё-таки какая-то недоговорённость по теме осталась. :(
Я так понял, что vb не позволяет охватить все типы содержимого буфера обмена?
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.11.2004 (Ср) 18:41

Безусловно, потому что нет "предопределённого" списка форматов - любое приложение может добавлять свои.
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 25.11.2004 (Чт) 9:00

tyomitch писал(а):Безусловно, потому что нет "предопределённого" списка форматов - любое приложение может добавлять свои.
Артём, думается мне, что это твой код позволяет в RTB вставлять картинки не затрагивая буфер обмена? Если да, то, плиз, кинь ссылку на топик.
Или лучше сам код. (Не сочти за наглость. :) )
Это Ж-ж-ж-ж неспроста (с) Винни-Пух


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

    TopList