Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Clipboard.Clear




Далее мы будем использовать свойство .ActiveControl объекта Screen. С его помощью мы легко затащим в буфер содержимое объекта, которое в настоящий момент активно, т.е. по которой мы щелкнули мышью. Но сперва нам надо определить, а какой это объект, ведь для текста используется метод .SetText, а для графики - .SetData. Здесь мы снова, как и в Главе 18 используем ключевое слово TypeOf, которое поможет определить тип элемента управления, а значит и тип данных.

'итак, если это текст
If TypeOf Screen.ActiveControl Is TextBox Then
'забираем выделенный текст в буфер
Clipboard.SetText Screen.ActiveControl.SelText
'а затем удаляем этот выделенный текст из TextBox'а
Screen.ActiveControl.SelText = ""
'а теперь пишем ветвь, если это картинка

ElseIf TypeOf Screen.ActiveControl Is PictureBox Then
'забираем картинку из активного элемента в буфер
Clipboard.SetData Screen.ActiveControl.Picture
'и удаляем картинку
Screen.ActiveControl.Picture = LoadPicture()
End If
End Sub

Готово, наши данные в буфере обмена. Если у тебя открыт CLIPBRD.EXE, то ты можешь видеть, что творится в буфере. Теперь напишем процедуру для копирования mnuCopy. Единственное, чем она отличается от вырезания, так это тем, что мы не очищаем Text или Picture от копируемых данных.

Private Sub mnuCopy_Click()
'Очищаем буфер
Clipboard.Clear
'проверяем тип данных

'если если это текст
If TypeOf Screen.ActiveControl Is TextBox Then
'забор текста в буфер
Clipboard.SetText Screen.ActiveControl.SelText
'если это картинка

ElseIf TypeOf Screen.ActiveControl Is PictureBox Then
'забор картинки в буфер
Clipboard.SetData Screen.ActiveControl.Picture
End If
End Sub

Теперь нам хорошо-бы из буфера вставить данные в элемент управления. Для этого пишем процедуру Вставить - mnuPaste.

Private Sub mnuPaste_Click()
'Ну сперва, конечно, проверяем тип, куда мы хотим запихнуть содержимое буфера и если это текст

If TypeOf Screen.ActiveControl Is TextBox Then
'но все равно сразу не пихаем. А вдруг даные были забраны из PictureBox, поэтому мы еще и проверяем
'с помощью метода GetFormat, а текстовой ли тип в буфере
If Clipboard.GetFormat(vbCFText) Then
'вот если да, то тогда уж вставляем без сомнения
Screen.ActiveControl.SelText = Clipboard.GetText
End If

'а теперь проверка для графических данных
ElseIf TypeOf Screen.ActiveControl Is PictureBox Then
'и здесь мы проверяем тип данных буфера
If Clipboard.GetFormat(vbCFDIB) Then
'и если совпадает, то вставляем
Screen.ActiveControl.Picture = Clipboard.GetData
End If
End If
End Sub

Ну и для пущего сходства с приложениями Windows напишем еще процедурку для удаления данных - mnuDelate. Здесь все предельно просто, Мы ведь в буфер ничего на забираем, а проверяем наш активный элемент и очищаем его тем или иным методом. Кстати, пардон, за ошибку в слове mnuDel a te (я просто не люблю это слово), но уж исправлять поздно, она в исходнике примера.

Private Sub mnuDelate_Click()
'проверяем тип данных
'если это текст

If TypeOf Screen.ActiveControl Is TextBox Then
'удаление выделенного текста
Screen.ActiveControl.SelText = ""
ElseIf TypeOf Screen.ActiveControl Is PictureBox Then

'удаление картинки
Screen.ActiveControl.Picture = LoadPicture()
End If
End Sub

Казалось бы, вот оно счастье, рядом, но фик, дело не закончено. Если ты обратил внимание на фирменные программы, то не всегда все строки меню редактирования доступны юзеру. Например, если нет выделения в тексте, то и нечего копировать или вырезать. Или наоборот, в буфере нет данных? Поэтому в определенные моменты доступ к определенным строкам меню надо перекрыть! Для решения этой проблемы надо написать небольшую, но ответственную процедуру. И используем мы для этого самый верхний, казалось бы совершенно ненужный пункт меню mnuEdit. Именно по клику юзера по этой строчке нам будет очень удобно проверять, что можно делать из наших процедур, а что нельзя.

Private Sub mnuEdit_Click()

Сначала обязательно проверяем, на каком элементе фокус.




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 462; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.