- •1)Структурные особенности Visual Basic. Подпрограммы. Пример.
- •2. Диалоговые окна MsgBox и InputBox. Примеры.
- •3. Четыре принципа объектно-ориентированного программирования. Их реализация в Visual Basic.
- •4. Классы. Интерфейс классов. Создание динамических библиотек на основе классов в Visual Basic. Регистрация библиотек.
- •5. Способы объявления объектных переменных в Visual Basic.
- •6. Раннее и позднее связывание с объектом. Примеры.
- •7. Способы объявления событий классов. Примеры.
- •8. Создание элемента управления ActiveX в Visual Basic. Отображаемые и пользовательские свойств и методы ActiveX-компонент. Передача события приложению–контейнеру. Регистрация компонент.
- •9. Пример динамического способа формирования объектов на форме vb.
- •10)Пример работы с коллекцией объектов, свойствами и методами объектов.
- •11. Работа с отладчиком Visual Basic. Окна Watch, Immediate.
- •12. Оператор On Error. Методы объектов Debug. Условная компиляция. Примеры
- •13. Свойства и методы объектов Debug, Err. Примеры.
- •Объявление переменных
- •Математические операции
- •Строковые операции
- •Оптимизация приложений
- •Оптимизация скорости работы приложения
- •Оптимизация размера приложения
- •Оптимизация размера графики приложения
- •15. Основные свойства и методы объектов Screen. Примеры
- •Свойство ActiveControl
- •16. Основные свойства и методы объектов Clipboard. Примеры.
- •17. Основные свойства и методы объектов App. Примеры
- •18.Редактор меню Menu Editor. Оконные приложения.Основные свойства объекта Menu. Примеры.
- •Отображение контекстных меню
- •Изменения кода для отображения контекстных меню
- •19.Основные объекты (FileSystemObject, File, Drive, Folder и TextStream.), их свойства и методы библиотеки Scripting.FileSystemObject
- •20. Основные свойства, методы и события объекта UserControl.
- •26. История развития объектных моделей.
- •27. Компонентные приложения. Особенности компонент.
- •28. Интеграция приложений средством Automation.
- •29. Объектная модель ms Word. Свойства и методы объекта Application модели ms Word. Пример.
- •30. Примеры процедур на определение списка всех панелей инструментов и тем главного меню ms Word.
- •32. Свойства и методы объектов Options, Dialogs, Selection и Range объектной модели ms Word.
- •33. Объекты, свойства и методы семейства CommandBars
- •34. Объекты и семейства объекта vbe
- •Объект CodeModule .Представляет программу, определенную для таких компонентов проекта как форма, класс или документ. Дополнительные сведения
- •Объект CommandBarEvents
- •Семейство CommandBars
- •Объект vbComponent
- •Семейство vbComponents
- •Объект CodePane
- •Семейство CodePanes
- •Объект Events
- •Семейство LinkedWindows
- •Объект Property
- •Семейство Properties
- •Объект Reference
- •Семейство References
- •Объект ReferencesEvents
- •Объект vbe
- •Объект vbProject
- •Семейство vbProjects
- •Объект Window
- •Семейство Windows
- •Редактор Visual Basic
- •Библиотека объектов Office 2000 и Object Browser
- •37. Объектная модель ms Excel. Свойства и методы объекта Application.
- •38. Объектная модель ms Excel. Свойства, методы, события объекта WorkBook.
- •39. Объектная модель ms Excel. Свойства, методы, события объекта WorkSheet
- •40. Методы класса WorkSheetFunction объектной модели ms Excel. Пример на вычисление выражения.
- •41. Пример использования объекта SpreadSheet в проектах vb.
- •42. Функции работы с матрицами окна vba Excel. Пример решения системы линейных уравнений.
- •43. Свойства объекта Range объектной модели ms Excel.
- •44. Методы объекта Range объектной модели ms Excel. Примеры.
- •45. Пример сортировки слов в строке с использованием объектной модели ms Excel.
- •46. Пример вычисления корня нелинейного уравнения с использованием объектной модели ms Excel.
- •47. Свойства и методы объекта Chart объектной модели ms Excel. Пример.
- •Терминальные свойства объекта Chart
- •Методы объекта Chart
- •События объекта Chart
- •Построение обработчиков событий
- •48. Пример отображения на форме vb графика функции с использованием объектной модели ms Excel. Рассмотреть способ передачи графика через диск и через буфер обмена.
- •49. Методы SolverOk и SolverAdd библиотеки Solver.Xla.
- •50. Методы SolverOptions, SolverSolve и SolverDelete, SolverSave, SolverLoad библиотеки Solver.Xla.
- •52. Пример динамического способа формирования объектов на форме vba Excel.
- •51. Пример решения системы нелинейных уравнений с использованием объектной модели ms Excel.
- •53. Объектная модель (объекты и коллекции) ms Access.
- •54. Свойства и методы объекта Application объектной модели ms Access.
- •55. Интерфейсы объектов данных и интерфейсы прикладного уровня программирования.
- •56. Объектная модель dao рабочей области ms Jet. Объекты и семейства. Пример открытия бд Access.
- •57. Объектная модель dao рабочей области odbcDirect.
- •59.Ручной и программный способ установления связи с источником данных.
- •62.ActiveX-компонент WebBrowser и объект InternetExplorer для работы в www из проектов Visual Basic.
- •86.Особенности работы с логическим инструментом. Пример отображения в окне прямоугольника заданного размера, толщины и цвета.
- •87.Работа со строками в Windows. Изменение цвета и фона строки текста.
- •89.Пример работы с базовыми шрифтами.
- •95.Пример отображения базовых геометрических фигур, использующих api-функции.
- •96.Создание и заполнение произвольных областей. Пример.
16. Основные свойства и методы объектов Clipboard. Примеры.
Сейчас мы коротенько поговорим о довольно-таки нужных текстовых свойствах, тем более, что мы будем их использовать далее при работе с объектом Clipboard. Мы уже использовали свойство SelText в прошлой главе, но на этом не остановимся. Если мы выделим кусочек текста в Text, то мы можем получить (или установить) об этом выделенном фрагменте некоторую полезную информацию как раз с помощью этих свойств:
.SelLength — возвращает или устанавливает число выделенных символов. (синтаксис объект.SelLength [= число выбранных символов]) .SelStart — возвращает или устанавливает начало выделенного текста, а если текст не выбран, то указывает положение места вставки. (синтаксис объект.SelStart [= положение начала вставки]) .SelText — возвращает или устанавливает строку, в которой содержится выделенный текст. Если никаких символов не выбрано, то представляет строку нулевой длины ("").(синтаксис объект.SelText [= текст выделения]).
Наиболее часто эти свойства как раз и используются с объектом Clipboard для операций вставки и вырезания. Причем установка .SelLenght меньше нуля приводит к ошибке выполнения. Изменение .SelStart устанавливает .SelLength в значение ноль. Если установить .SelLength больше, чем длина текста, то оно автоматически станет равной длине текста. Установка .SelText в новое значение устанавливает .SelLength в ноль. Ну вот, теперь можно двигать дальше.
Объект Clipboard
С системным буфером обмена данных Clipboard мы сталкиваемся постоянно. Именно в него помещаются данные приложения при использовании операций Cut (Вырезать) и Copy (Копировать) и из него берутся при операции Paste (Вставить) в меню Edit, которое есть в практически любой виндусовой программе. Буфер обмена представляет своего рода промежуточное место для хранения данных, которое позволяет, не устанавливая связь между приложениями, тем не менее, переносить данные одного типа из одной программы в другую. Буфер обмена для всего Windows один. Забрав в буфер данные одного приложения, а затем другого, мы обнаружим, что в буфере хранятся лишь данные последней операции Cut или Copy. Это вызвано тем, что в большинстве случаев, чтобы в буфере не хранилось данных разных приложений, перед загрузкой данных в буфер программа-донор обычно производит его очистку. Посмотреть содержимое буфера можно с помощью утилиты CLIPBRD.EXE, которая обычно имеется в директории C:\Windows\System32 или аналогичной (в зависимости от Windows, установленной на твоем компьютере). В буфер обмена можно забрать и текст и картинку, потому что он поддерживает разные форматы данных. Из VB доступ к буферу организуется с помощью объекта Clipboard. Методы объекта практически те же, что и разобранные нами в главе 19 с объектом DataObject, однако повторенье - мать ученья (банальность). Они представлены в нижеследующей таблице:
Методы объекта Clipboard |
||
Clipboard.SetText data, format |
Помещает текстовые данные в буфер обмена, где data - строка данных, помещаемая в Clipboard |
Значение format для текстовых данных может принимать следующие значения: vbCFLink (&HBF00) - Диалоговая информация DDE vbCFRTF (&HBF01) - Текст в формате RTF(Rich Text Format) vbCFText (1) - Текст (Установка по умолчанию) |
Clipboard.GetText (format) |
Возвращает текстовые данные из буфера обмена. Необязательный. Если ожидаемого формата в буфере нет, то возвращается пустая строка. |
|
Clipboard.SetData data, format |
Помещает графические данные в буфер обмена, где data - графическое изображение, помещаемое в Clipboard. Устанавливается функцией LoadPicture либо свойствами Picture. |
Значение format для графических данных может принимать следующие значения: vbCFBitmap (2) - Растр (.bmp-файлы) vbCFMetafile (3) - Метафайл (.wmf-файлы) vbCFDIB (8) - Независимые от устройств растровые рисунки (DIB) vbCFPalette (9) - Цветовая палитра vbCFEMetafile (14) - Расширенный метафайл (.emf-файлы) vbCFFiles (15) - Список имен файлов (Microsoft Windows Explorer) |
Clipboard.GetData (format) |
Возвращает графические данные из буфера обмена. Если значение format опущено, то подбирается подходящий формат. Если графический формат не соответствует ожидаемому, то ничего не возвращается. |
|
Clipboard.GetFormat (format) |
Возвращает логические True или False, в зависимости от содержащихся в буфере данных. Для проверки более чем одного метод вызывается повторно. |
Значение format может принимать следующие значения: vbCFLink (&HBF00) - Диалоговая информация DDE vbCFText (1) - Текст vbCFBitmap (2) - Растр (.bmp-файлы) vbCFMetafile (3) - Метафайл (.wmf-файлы) vbCFDIB (8) - Независимые от устройств растровые рисунки (DIB) vbCFPalette (9) - Цветовая палитра vbCFEMetafile (14) - Расширенный метафайл (.emf-файлы) vbCFFiles (15) - Список имен файлов (Microsoft Windows Explorer) |
Clipboard.Clear |
Очищает содержание системного буфера обмена. |
|
Использовать эти методы очень просто. Для примера создадим новый exe-проект и положим на него два TextBox'а и два PictureBox'а. В качестве управления нашими процессами с помощью Редактора меню создадим простое меню Edit. Подробно о создании меню написано в Главе 9. Имя нашего меню будет mnuEdit, а строками mnuCut - Вырезать mnuCopy - Копировать mnuPaste - Вставить mnuDelate - Удалить Вообще-то у TextBox'а есть свое контекстное меню, но мы сделаем свое общее.
Ну сперва в процедуре Form_Load загрузим в Text1 и Picture1 данные, чтобы нам было с чем работать. В примере я использовал маленькую картинку P00027.jpg. (Кстати поставь свойства TextBox'ов Multiline=True) Option Explicit 'хоть у нас и не будет ни одной переменной, но дело принципа Private Sub Form_Load() Text1 = "Проще Visual Basic ничего нету" Picture1 = LoadPicture(App.Path & "\P00027.jpg") End Sub
Начнем с процедуры для первого пункта подменю "Вырезать" - mnuCut, которая должна копировать данные в буфер и затем очищать объект (Text или Picture):
Private Sub mnuCut_Click() Сперва нам надо очистить буфер, чтобы в нем не осталась другая информация. Используя метод .Clear это предельно просто. 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. Здесь все предельно просто, Мы ведь в буфер ничего на забираем, а проверяем наш активный элемент и очищаем его тем или иным методом. Кстати, пардон, за ошибку в слове mnuDelate (я просто не люблю это слово), но уж исправлять поздно, она в исходнике примера.
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() Сначала обязательно проверяем, на каком элементе фокус. If TypeOf Screen.ActiveControl Is TextBox Then В случае, если из текста ничего не выделено, мы должны сделать недоступными строки "Вырезать", "Копировать" и "Удалить". Для этого надо ее свойству .Enabled присвоить значение False. Если ничего не выделено, значит длина выделения (свойство .SelLength) равна нулю. Это можно было бы записать приблизительно так:
|
If Screen.ActiveControl.SelLength=0 Then mnuCut.Enabled = False |
Однако, для краткости записи мы можем напрямую присвоить свойству .Enabled значение длины выделения .SelLength, исходя из того, что значение ноль всегда соответствует для логических типов False, а любое положительное - True. В итоге то мы получаем более короткую, но по смыслу абсолютно такую же запись. Кроме того, при этом, нам не надо каждый раз в начале процедуры восстанавливать доступность строк, так как длина строки больше нуля сама переведет .Enabled в состояние True. mnuCut.Enabled = Screen.ActiveControl.SelLength аналогично две другие строки mnuCopy.Enabled = Screen.ActiveControl.SelLength mnuDelate.Enabled = Screen.ActiveControl.SelLength Далее мы должны запретить Вставить, если формат данных в буфере не соответствует требуемому. Здесь даже еще проще. Метод .GetFormat возвращает True, если формат соответствет проверяемому и False - если нет. Именно эти значения мы напрямую и присваиваем для свойства .Enabled строки mnuPaste. mnuPaste.Enabled = Clipboard.GetFormat(vbCFText) Абсолютно также мы поступаем с веткой для графических данных ElseIf TypeOf Screen.ActiveControl Is PictureBox Then mnuCut.Enabled = Screen.ActiveControl.Picture mnuCopy.Enabled = Screen.ActiveControl.Picture mnuDelate.Enabled = Screen.ActiveControl.Picture mnuPaste.Enabled = Clipboard.GetFormat(vbCFDIB) End If End Sub