Скачиваний:
11
Добавлен:
30.09.2018
Размер:
72.41 Кб
Скачать

5 5. Лекция: Макросы. Дальнейшая информация об объектах: версия для печати и PDA

В этих версиях Visual Basic отсутствует возможность работы с макросами, в данном учебном пособии с этой целью используется VBA. Во второй части лекции даётся дальнейшая информация об объектах Visual Basic, их свойствах, событиях, методах.   Макросы (макрокоманды) - это программы, позволяющие автоматизировать решение часто встречающихся задач.

  Создание макросов VBA (Visual Basic for Application) - Visual Basic для приложений встроен в приложения Microsoft Office; программист имеет возможность работать как с объектами текущего, так и с объектами других приложений. Приложение предоставляет свои функции в виде объектов, работа с которыми обеспечивается средствами VBA. Здесь рассматриваются элементы работы с макросами.

  Рассматриваются следующие этапы создания макроса:

  проектирование (определение последовательности действий), задание имени макрокоманды,

запись макрокоманды. Макрос может быть создан путeм: протоколирования действий пользователя в режиме записи макроса (запись) или программирования,

тестирование,

задание сочетания клавиш для вызова макрокоманды,

макрокоманде можно поставить в соответствие кнопку панели инструментов или команду меню.

  Протоколирование последовательности действий пользователя в режиме записи макроса (запись) Процесс записи макрокоманды рассматривается на примере создания макроса, подчеркивающего в тексте слова из латинских букв.

  Практическая работа 32 32a. Протоколирование действий пользователя в режиме записи макроса Ввести текст в приложении Word, содержащий русские слова и слова, написанные латинскими буквами, затем выполнить команду: меню Сервис Макрос Начать запись,

в выведенном диалоговом окне Запись макроса ввести имя макрокоманды (здесь макрос34), в поле Описание можно ввести краткое описание макрокоманды (Подчеркнуть слова из латинских букв), в поле Макрос доступен для: ввести - Всех документов (Обычный doc),

далее сделать щелчок на кнопке ОК. Выводится следующее диалоговое окно, где можно определить вид старта макрокоманды: щелчком на соответствующей кнопке панели инструментов,

выбором команды из меню,

использованием комбинации клавиш.

 

c использованием клавиатуры подвести курсор к слову введeнного текста, написанному латинскими буквами. С использованием клавиш Shift + a маркировать слово и с использованием соответствующей кнопки панели инструментов подчeркнуть слова,

использовать автоматически выведенную кнопку (вверху слева на экране): Остановить запись,

сохранить макрос: файл сохранить как Шаблон документа,

открыть файл, содержащий слова, написанные латинским шрифтом, поставить курсор перед словом из латинских букв. Далее нужно применить макрос: меню Сервис Макрос Макросы : Выбрать макрос 34 a щелчок на кнопке Выполнить; слово текста подчeркивается.

  Макрокоманда обрабатывает текст, находящийся между курсором и концом документа. Ниже приведeн текст созданного протоколированием макроса. Он создан (здесь) копированием сгенерированного в результате процедуры протоколирования макроса:

  Sub Макрос34 () ' Подчеркнуть слова из латинских букв Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend If Selection.Font.Underline = wdUnderlineNone Then Selection.Font.Underline = wdUnderlineSingle Else Selection.Font.Underline = wdUnderlineNone End If End Sub Программирование макроса Рассматривается пример создания макрокоманды, обеспечивающей подчеркивание слов из латинских букв. Последовательность действий: меню Сервис Макрос ввести имя Макроса ввести тип шаблона в поле Описания ввести комментарий назначение макроса сделать щелчок на кнопке Создать ввести текст макроса сохранить.

  32в. Программирование макроса Ввести код, данный ниже (пояснения даны под комментариями),

подвести курсор к слову текста в приложении Word, написанному латинскими буквами,

использовать команду меню Сервис Макрос Макросы маркировать в cписке требуемый макрос Выполнить.

  Описание некоторых используемых функций дано после кода макроса.

  Sub macrosm() ' программирование макроса Dim sw$ ' описание проверяемого слова текста Dim fc$ ' описание первой буквы проверяемого слова ' текст: подчеркнуть слова из латинских букв" r = MsgBox("lateinische Woerter" + Chr$(13) + "unterstreichen", 1) If r Then ' сравнение закладок While WordBasic.CmpBookmarks("\StartOfSel", "\EndOfDoc") <> 0 WordBasic.SelectCurWord ' выделить текущее слово ' возвратить строку - выделенный фрагмент текста sw$ = WordBasic.Selection$() fc$ = WordBasic.Mid$(sw$, 2, 1) ' возвратить символ If fc$ >= "A" And fc$ <= "z" Then ' подчеркнуть, если буквы лежат в заданном диапазоне WordBasic.Underline (-1) WordBasic.WordRight ' продвинуться дальше End If Wend End If End Sub Ниже приведeн список некоторых функций.

  CmpBookmarks(Закладка1$, Закладка2$) сравнивает положение двух закладок в документе. Возвращает значение, определяющее взаимное расположение сравниваемых закладок (табл. 5.1). Таблица 5.1. Значения, определяющие взаимное расположение закладок Значение Положение закладок 0 Положения совпадают 1 Закладка 1 ниже закладки 2 2 Закладка 1 выше закладки 2 3 Закладка 1 ниже и пересекается с закладкой 2 4 Закладка 1 выше и пересекается с закладкой 2 5 Закладка 1 включает закладку 2 6 Закладка 2 включает закладку 1 7 Закладки начинаются в одном месте, но закладка 1 длиннее закладки 2 8 Закладки начинаются в одном месте, но закладка 2 длиннее закладки 1 9 Закладки заканчиваются в одном месте, но закладка 1 длиннее закладки 2 10 Закладки заканчиваются в одном месте, но закладка 2 длиннее закладки 1 11 Закладка 1 ниже и смежная с закладкой 2 12 Закладка 1 выше и смежная с закладкой 2 13 Закладки не существуют  

  Имена некоторых закладок - параметры функции CmpBookmarks приведены ниже:

  \sel - текущее выделение или точка вставки,

  \EndOfDoc - конец документа,

  \Doc - целый документ, кроме символа конца документа.

  Mid$(Строка$,Начало[, Количество]) возвращает подстроку (часть строки) строки-аргумента,

SelectCurWord выделяет текущее слово,

Selection$() возвращает строку - выделенный фрагмент текста. Если фрагмент не выделен, то возвращает символ, следующий за курсором,

UnderLine, Underline() для выделенного фрагмента устанавливает или отменяет оформление подчeркиванием: 0 - ни один из символов не оформлен подчeркиванием,

1 - все символы фрагмента оформлены подчeркиванием,

-1 - часть символов оформлена подчeркиванием,

 

WordLeft [НаСколько], WordLeft(НаСколько) перемещает курсор влево на указанное количество слов. Если параметр "НаСколько" не задан, то выполняется перемещение на одно слово. WordLeft() возвращает 0, если курсор не может быть перемещeн и -1, если действие не может быть выполнено,

WordRight(НаСколько), WordRight[НаСколько] перемещает курсор вправо на указанное количество слов. Если параметр "НаСколько" не задан, то выполняется перемещение на одно слово. WordRight(), возвращает 0, если курсор не может быть перемещeн и -1, если действие не может быть выполнено.

  Сохранение макросов Макросы сохраняются в шаблоне документа. Для сохранения разработанной макрокоманды нужно выполнить команду: меню Файл Сохранить шаблон, которая доступна только в том случае, если активным является окно с текстом макрокоманды. Макросы могут сохраняться и в глобальном шаблоне Normal.dot; в последнем случае они доступны пользователю независимо от того, с каким документом он работает. После использования команды: меню Сервис Маkрос Макросы Организатор, можно копировать макросы в другие шаблоны документов.

  Вызов макросов Макрос можно вызвать, выбрав его имя из списка в диалоговом окне Макросы : (меню Сервис Макрос) или использовать назначенное макросу сочетание клавиш или соответствующую кнопку панели инструментов. Макросу можно поставить в соответствие команду меню.

  Для создания кнопки панели инструментов для созданной макрокоманды выполнить следующее:

  меню Сервис Настройка Панели,

в списке Категории маркировать строку Макро, найти имя макрокоманды (в списке Макро), для которой нужно создать кнопку,

установить на имя курсор мыши, нажать левую кнопку мыши и, удерживая еe нажатой переместить курсор мыши в поле панели инструментов, затем отпустить кнопку мыши. Выводится окно нестандартных кнопок, выбрать желаемую кнопку,

сделать щелчок на кнопке Назначить,

окно нестандартных кнопок закрывается и становится доступным окно Настройка,

сделать щелчок на кнопке Закрыть. В панели инструментов появляется новая кнопка; для старта макрокоманды нужно сделать щелчок на ней.

  Имеется возможность поместить на созданной кнопке рисунок, для этого в окне Нестандартная кнопка сделать щелчок на кнопке Правка. Открывается окно Редактор кнопок. Выполнив рисунок, щeлкнуть на кнопке ОК, затем на кнопке Закрыть окна Настройка.

  Для назначения макрокоманде кнопки панели инструментов перед записью макрокоманды выполнить слeдующее:

  меню Сервис Макрос Начать запись. Выводится окно Запись макроса,

ввести имя макроса,

в поле Назначить макрос выбрать кнопку Панели инструментов, выводится окно Настройка, в котором имеется регистр Команды,

в поле Категории по умолчанию задаeтся категория Макросы,

в поле списка Команды позиционировать указатель мыши над именем макрокоманды, нажать левую клавишу мыши и удерживать еe нажатой. Указатель мыши изменяет внешний вид: дополняется заштрихованным квадратом и символом +,

переместить указатель мыши в панель инструментов, отпустить клавишу мыши. На панели появляется новая кнопка с именем макрокоманды (надпись, при необходимости, можно заменить),

сделать щелчок а кнопке Закрыть; начинается запись макрокоманды. После создания макроса его можно вызвать с помощью этой кнопки.

  Для назначения сочетания клавиш для старта макроса выполнить следующее:

  меню Сервис Макрос Начать запись, выводится окно Запись макроса, ввести имя макроса,

в поле Назначить макрос выбрать кнопку Клавишам, выводится окно Настройка,

в поле Новое сочетание клавиш ввести нужное сочетание клавиш.

  Переименование макроса Меню Сервис Макрос Макросы, открыть диалоговое окно Макрос, сделать щелчок на кнопке Организатор,

маркировать макрокоманду, которую нужно переименовать,

сделать щелчок на кнопке Переименовать и ввести новое имя.

  Автомакросы Некоторые имена зарезервированы для макрокоманд, решающих специальные задачи, в табл. 5.2 приведeн список некоторых таких макрокоманд.

  Таблица 5.2. Примеры макрокоманд Имя макроса Использование AutoNew При создании нового документа с текущим шаблоном AutoOpen При открытии документа AutoExec При старте приложения AutoExit По окончании работы приложения AutoClose При закрытии документа   Объекты, свойства, методы, события (продолжение) ListBox, ComboBox, TextBox Использование списков предоставляет большие возможности пользователю. Элемент управления ListBox имеет более 50 свойств. Свойство List задаeт/возвращает содержимое строки списка; свойство ListCount возвращает число элементов списка, нумерация элементов списка проводится с 0. Свойство ListIndex задаeт/возвращает номер маркированной строки ( ListIndex = -1, если ни одна строка не маркирована). Если строки должны быть отсортированы по алфавиту, то свойству Sorted нужно присвоить значение True. Важнейшими из около 10 методов являются:

  AddItem элемент[, индекс] - включить элемент в список в позицию "индекс",

RemoveItem индекс_элемента - удалить элемент из списка,

Clear - очистить весь список.

  Основное событие - Click, которое вызывается при щелчке на некотором элементе списка; часто применяемое событие - DblClick (двойной щелчок на элементе списка), используемое, например, для программируемого перемещения элементов одного списка в другой список.

  В поле элемента управления ComboBox можно выбрать элемент списка как в ListBox, можно вводить данные в имеющееся поле ввода. ComboBox имеет многие свойства ListBox и TextBox. Свойство Style определяет функционирование и внешний вид ComboBox. В табл. 5.3 представлены функциональные возможности элемента управления ComboBox.

  Таблица 5.3. Функциональные возможности ComboBox Значение свойства Style Возможности 0 ComboBox представляет собой раскрывающееся комбинированное поле - текстовое поле для записи и раскрывающийся список 1 Текстовое поле и постоянно открытый список 2 Отличие от типа 0 состоит в том, что нет возможности вводить данные   Основными событиями являются: Click - используется для выбора элемента списка и Change - для изменения записи в поле ввода данных. Методы совпадают с методами поля списка.

  При работе со списками часто маркируют строку и затем делают щелчок на командной кнопке, процедура которой обрабатывает маркированную строку. Процедуру обработки элемента списка можно также создавать как процедуру события DblClick списка, выполняемую после двойного щелчка на элементе списка.

  Практическая работа 33. ListBox, TextBox, ComboBox 33a. ListBox, TextBox ListBox: Sorted Ввести в ListBox числа 9 - 0 (использовать окно свойств), присвоить свойству Sorted значение True, стартовать проект; убедиться, что элементы списка отсортированы по возрастанию.

  ListBox: ListCount, ListIndex, AddItem, RemoveItem: Создать на форме элементы управления Label и CommandButton, ввести код, данный ниже: Private Sub Command1_Click() Dim j As Integer Label1 = List1.ListCount Label2 = List1.ListIndex End Sub

Заполнить поле списка цифрами 0 - 9: стартовать проект; результат: Label1 = 10, Label2 = -1, т.к. не маркирован ни один элемент списка,

маркировать элементы списка, делать щелчки на командной кнопке - в поле метки 2 выводится номер выбранного элемента,

использовать метод AddItem для добавления элементов списка - дополнить процедуру инструкцией: For j = 10 To 20 List1.AddItem j Next j

стартовать проект - в список добавляются элементы,

для удаления элементов списка используется метод RemoveItem. Ввести код процедуры, стартовать проект, сделать щелчок на командной кнопке. Private Sub Command2_Click() Dim j As Integer For j = 0 To 10 List1.RemoveItem j Next j End Sub

  TextBox: GotFocus, LostFocus Событие LostFocus вызывается после того, как текстовое поле становится неактивным; при "входе" пользователя в текстовое поле вызывается событие GotFocus.

  Ввести код, данный ниже; стартовать проект, первая процедура выполняется при установке фокуса в поле Text1 - поле окрашивается и выводится сообщение о получении фокуса.

  Private Sub Text1_GotFocus() Text1.BackColor = RGB(255, 0, 0) Label3.Caption = "TextBox имеет фокус" End Sub Вторая процедура выполняется при переводе фокуса из этого поля; поле окрашивается в другой цвет и выводится соответствующее сообщение:

  Private Sub Text1_LostFocus() Text1.BackColor = RGB(0, 0, 255) Label3.Caption = "Потеря фокуса" End Sub 33b. Перемещение элементов списка Создать на форме: 3 элементa управления ListBox, элемент управления ComboBox (свойство Style - по умолчанию). Ввести код, данный ниже, стартовать проект, сравнить внешний вид ListBox и ComboBox после открытия пользователем списка ComboBox ; схема размещения элементов дана на рис. 5.1.  

Рис. 5.1.  Схема формы  

 

создать элементы списков и комбинированного списка в режиме выполнения процедуры Private Sub Form_Load() List1.AddItem "ручки" List1.AddItem "карандаши" List3.AddItem "бумага" List3.AddItem "тетради" Combo1.AddItem "бумага" Combo1.AddItem "тетради" Combo1.AddItem "клей" Combo1.AddItem "скрепки" End Sub

далее ввести код, данный ниже, стартовать проект, сделать повторно несколько двойных щелчков на каких-либо элементах первого списка - элементы перемещаются в другой список. Сделать двойной щелчок на элементах второго списка - происходит перемещение назад. Private Sub List1_DblClick() Label1 = "Перемещение элементов списков" List2.AddItem List1 ' включить элемент в другой список ' удалить строку из данного списка List1.RemoveItem List1.ListIndex End Sub Private Sub List2_ DblClick() List1.AddItem List2 ' включить элемент в другой список ' удалить строку из данного списка List2.RemoveItem List2.ListIndex End Sub

  33с. Дополнение списков, перемещение элементов списков Создать на форме элементы управления: ListBox (Name = lst), ComboBox (Name = cboLaden, Style=2), 2 элемента управления CommandButton, TextBox (Name = txt); cхема формы дана на рис. 5.2,

ввести код процедуры Form_Load () - заполнение ComboBox элементами списка, см. ниже,

ввести код процедуры Command1_Click () - дополнение ComboBox и ListBox новыми элементами, вводимыми в текстовое поле,

ввести код процедуры Command2_Click () - перемещение элементов из ComboBox в ListBox,

стартовать проект, открыть щелчком список ComboBox, маркировать строку ComboBox, сделать щелчок на кнопке Command2 - происходит перемещение элемента,

ввести в текстовое поле слово "кнопки",

сделать щелчок на первой командной кнопке (Дополнить) слово "кнопки" выводятся в поля элементов управления.

   

Рис. 5.2.  Схема формы  

  Рrivate Sub Form_Load() ' заполнение списков cboLaden.AddItem "тетради" cboLaden.AddItem "скрепки" cboLaden.AddItem "карандаши" End Sub ' дополнить поля новыми элементами Private Sub Command1_Click() cboLaden.AddItem txt.Text lst.AddItem txt.Text End Sub Private Sub Command2_Click() ' переместить элемент списка lst.AddItem cboLaden.Text End Sub CheckBox, OptionButton, Frame CheckBox - флажок Набор элементов управления CheckBox позволяет выбрать одновременно несколько опций. Важнейшим является событие Click; важным свойством является Value. Value принимает значения: 1 - флажок помечен, 0 - не помечен, 2 - помечен, но не доступен.

  Контейнер Frame - рамка Контейнер Frame (рамка) служит для группирования в нeм других объектов. Элементы управления CheckBox, помещeнные в рамку, работают независимо.

  OptionButton - переключатель Обеспечивается выбор одной опции из нескольких с помощью набора элементов управления OptionButton, помещаемых в контейнер , например в элемент управления Frame. Важным событием является Click, важным свойством - Value. Если Value есть True, то OptionButton включeн, иначе - выключен.

  Практическая работа 34. CheckBox, OptionButton, Frame 34а. CheckBox Создать на форме 2 элемента управления CheckBox и 2 поля метки,

ввести код, данный ниже, стартовать проект,

делать щелчки на 1 и 2 элементах управления CheckBox - при включении второго элемента первый не выключается Private Sub Check1_Click() If Check1 Then Label1.BackColor = RGB(255, 0, 0) Else Label1.BackColor = RGB(255, 255, 255) End If End Sub Private Sub Check2_Click() If Check2 Then Label2.BackColor = RGB(0, 255, 0) Label1.BackColor = RGB(0, 255, 255) Else Label2.BackColor = RGB(0, 0, 255) End If End Sub

  34в. OptionButton Создать на форме:

  элемент управления Frame, массив из двух элементов OptionButton, Name = Option1(0) и Option1(1) соответственно, Caption = "присоединить текст" и "заменить текст" соответственно; поместить элементы управления внутрь рамки,

два текстовых поля (Name = Text1 и Text2 соответственно) и CommandButton, схема формы дана на рис. 5.3.

ввести код, данный ниже; стартовать проект,

ввести текст в первое текстовое поле, выбрать щелчком одну из опций, сделать щелчок на командной кнопке, наблюдать результат. Если был сделан щелчок на элементе Option1(0), то проводится присоединение текста во втором текстовом поле, иначе - замена текста (см. процедуру Command1_Click ()).

   

Рис. 5.3.  OptionButton  

  Private Sub Command1_Click() If Option1(0) Then ' присоединить текст, если выбран первый переключатель Text2.Text = Text2.Text + Text1.Text Else ' заменить текст, если выбран второй' переключатель Text2.Text = Text1.Text End If Text1.Text = "" End Sub Элемент управления Animation Здесь рассматривается использование элемента управления Animation для воспроизведения файла с расширением .avi. Элемент управления Animation входит в состав набора Microsoft Windows Common Controls-2 6.0. Для того, чтобы поместить его на панель элементов управления нужно выполнить следующее: меню Проект Компоненты : Управления Microsoft Windows Common Controls-2 6.0 ОК. На панели элементов появляются пять новых элементов управления и среди них Animation. В работе нужно использовать объект CommonDialog ; в данном случае он обеспечивает вывод стандартного окна Windows Открытие файла.

  Практическая работа 35. Элемент управления Animation Создать на форме элементы управления Animation, CommonDialog, две командные кнопки и поле метки для надписи, см. рис. 5.4,

присвоить значения свойствам элемента CommonDialog: FileName, InitDir (используемый файл Filemove.avi находится в каталоге Videos); в данном случае проставляется путь и имя файла,

ввести код, данный ниже, стартовать проект, сделать щелчок на первой командной кнопке, в окне Open выбрать имя файла, см. рис. 5.4.  

Рис. 5.4.  Элемент управления Animation  

 

  (General) (Declarations) Dim FileName As String, Filemove As String Private Sub Command1_Click() ' воспроизведение файла CommonDialog1.ShowOpen Filemove$ = CommonDialog1.FileName Animation1.Open Filemove Animation1.Play End Sub Private Sub Command2_Click() ' закончить воспроизведение Animation1.Close End Sub Генерация текста - использование набора объектов Рассматривается конструирование строки текста, при этом составляющие строки выбираются с использованием набора элементов управления. Результирующая фраза образуется конкатенацией составляющих.

  Практическая работа 36. Генерация текста Ниже описано назначение элементов управления (рис. 5.5), используемых в примере:

  ListBox содержит список партий начала прошлого столетия (большевики, анархисты :), рис. 5.5, центр, слева,

массив из трeх элементов CheckBox предназначен для выбора одновременно возможных характеристик членов партий (например: растерянные, шумные :), здесь - определение1, см. рис. 5.5, центр,

массив их двух элементов OptionButton предназначен для выбора взаимоисключающих характеристик (например: респектабельные, оборванные), здесь - определение2, см. рис. 5.5, центр, справа,

соответственно вышеописанному используются 2 объекта Frame со свойствами Caption: определение1, определение2, см. рис. 5.5, центр и центр справа,  

Рис. 5.5.  Генерация текста; вид формы  

 

текстовое поле внизу служит для вывода сформированной фразы,

элемент управления HscrollBar - это элемент установки дискретных значений заданного диапазона (свойства Max, Min, Value устанавливают границы области значений и текущее значение; свойство LargeChange определяет шаг изменения данных при перемещении в выбранном диапазоне). На рис. 5.5 элемент управления HscrollBar находится вверху слева. Событие Change происходит при изменении положения ползунка на линейке прокрутки, событие Scroll генерируется при непрерывном перемещении ползунка,

элемент управления Label1 служит для вывода числа присутствующих на митинге, собрании (данные элемента управления HscrollBar ), см. рис. 5.5 слева, ниже элемента управления HscrollBar,

элемент управления ComboBox содержит список мест проведения митингов, партийных собраний (на Красной площади, на улицах, : ), см. рис. 5.5, справа,

несколько полей меток в верхней части формы и одна внизу над текстовым полем используются для надписей.

  табл. 5.4 содержит список используемых элементов управления и значений некоторых свойств.

  Таблица 5.4. Генерация текста; элементы управления и значения свойств Элемент управления Значение свойства TextBox Name=txt1   Multiline=Тrue ListBox Name=lstPartei ComboBox Name=cboOrt   Style=2 - DrogDownList Frame Name=Attr1   Caption=определение1 CheckBox(0) Name=chkAttribut   Caption=растерянных   Index=0 CheckBox(1) Name=chkAttribut   Index=   Caption=шумных CheckBox(2) Name=chkAttribut   Index=2   Caption=озабоченных Frame Name=Attr2   Caption= определение2 OptionButton(0) Name=optAussehen х Caption=респектабельны   Index=0 OptionButton(1) Name=optAussehen   Сaption=оборванных   Index=1 Label Name=lbl1 HScrollBar Name=hsbMenge   Max=100   Min=0   Value=100   LadgeChange=10   При выполнении процедуры Form_Load (), см. код ниже, создаeтся список (lstPartei - список названий партий) ListBox и список (мест проведения митингов, партсобраний) ComboBox (Name = cboOrt), см. две инструкции With : End With. Соответствие подлежащее - сказуемое обеспечивается соответствием нумерации элементов списков strVerb() и lstPartei(). Маркированные на экране после старта проекта элементы списков определяются заданием значений свойства ListIndex.

  Процедура Private Sub ausgeben () формирует текст (strausgabe) с использованием параметров набора управляющих элементов.

  Определениями в предложении могут быть одно, два или три значения свойства Caption элементов массива объектов CheckBox (i) (см. цикл For i = 0 To 2:); возможность обработки в цикле обеспечена наличием массива объектов. Далее в процедуре Private Sub ausgeben () проводится анализ состояния переключателей optAussehen(), что позволяет сделать выбор следующего (уже из группы взаимоисключающих) определения в искомом предложении.

  При конструировании искомого предложения (strausgabe) используются элементы списков ListBox (lstPartei - список имеющихся партий) и ComboBox (cboOrt - место проведения митингов, партсобраний). Для вывода на экран сказуемого используется конструкция ( lstPartei.ListIndex ), см. конец процедуры Private Sub ausgeben (), возвращающая номер выбранного элемента.

  Следующие процедуры служат для:

  Private Sub cboOrt_Click() - задания места проведения митинга, партсобрания,

Private Sub chkattribut_Click(index As Integer) - выбора одновременно возможных определений;

Private Sub hsbMenge_Change() - задания количества присутствующих на митинге, собрании,

Private Sub hsbMenge_scroll() - задания количества присутствующих;

Private Sub lstPartei_Click() - выбора партии из списка имеющихся;

Private Sub optAussehen_Click(index As Integer) - выбора взаимоисключающих определений.

  Во всех случаях вызывается процедура Private Sub ausgeben (), что позволяет при выборе пользователем значений параметров элементов управления/элементов списков конструировать предложение. Учeт особенностей построения предложения в английском, немецком, русском и т.д. языках может быть реализован в данном примере при конструировании строки strausgabe.

  Последовательность действий:

  создать на форме необходимые элементы управления,

задать значения их свойств,

ввести код, данный ниже, стартовать проект,

сделать выбор партии в списках партий,

задать число присутствующих (элемент управления HscrollBar ),

выбрать определения в полях определение1 и определение2,

выбрать место проведения митинга, собрания (список ComboBox),

наблюдать результат, рис. 5.5.

  (General) (Declarations) Dim strausgabe As String, strattribut As String, i As Integer ' описание массива сказуемых с дополнениями Dim strVerb(6) As String Private Sub Form_Load() With lstPartei .AddItem ("большевиков") .AddItem ("меньшевиков") .AddItem ("эсеров") .AddItem ("бундовцев") .AddItem ("кадетов") .AddItem ("анархистов") .ListIndex = 0 End With With cboOrt .AddItem ("на Красной площади") .AddItem ("на улицах") .AddItem ("в подъездах") .AddItem ("в пивной") .AddItem ("в переулках") .ListIndex = 0 End With strVerb(0) = "выкрикивают "Да здравствует Коммунизм !!"" strVerb(1) = "порицают большевиков" strVerb(2) = "произносят пламенные речи" strVerb(3) ="поносят всех" strVerb(4) = "кричат "Ура !!" strVerb(5) = "кричат: "Анархия - мать порядка !!" lbl1.Caption = "Присутствовало: " & Str(hsbMenge.Value) End Sub Private Sub ausgeben() strattribut = "" For i = 0 To 2 If chkattribut(i).Value = 1 Then If strattribut = " Then strattribut = chkattribut(i).Caption Else strattribut = strattribut &", " & chkattribut(i).Caption End If End If Next i If optAussehen(0).Value Then If strattribut = "" Then strattribut = "респектабельных" Else strattribut = strattribut & ", " &"респектабельных" End If Else If strattribut = " Then strattribut = "оборванных" Else strattribut = strattribut & ", " & "оборванных" End If End If strausgabe = Str(hsbMenge.Value) & " " strausgabe = strausgabe & strattribut & " " strausgabe = strausgabe & lstPartei.List(lstPartei.ListIndex) & " " strausgabe = strausgabe & cboOrt.List(cboOrt.ListIndex) & " " strausgabe = strausgabe & strVerb(lstPartei.ListIndex) & " " txt1.Text = strausgabe End Sub ' задание места проведения митинга, партсобрания Private Sub cboOrt_Click() ausgeben End Sub ' задание одновременно возможных характеристик членов ' партий Private Sub chkattribut_click(index As Integer) ausgeben End Sub ' задание количества присутствующих на митинге, собрании Private Sub hsbMenge_Change() lbl1.Caption = "Присутствовало: " & Str(hsbMenge.Value) ausgeben End Sub ' задание количества присутствующих на митинге, собрании Private Sub hsbMenge_scroll() lbl1.Caption = "Присутствовало: " & Str(hsbMenge.Value) End Sub Private Sub lstPartei_Click() ' выбор из списка имеющихся ' партий ausgeben End Sub ' задание взаимоисключающих характеристик членов партий Private Sub optAussehen_Click(index As Integer) ausgeben End Sub Объект меню Объект меню имеет около 15 свойств; действия, выполняемые при выборе команды меню должны быть запрограммированы в процедуре меню события Click; объект не имеет методов. Свойства доступны в режиме конструирования, но только при использовании редактора меню (см. ниже). Элементы первого уровня меню могут содержать список меню второго уровня и т.д.

  Имеется редактор меню для создания меню, для работы с всплывающими меню. Редактор можно стартовать щелчком на соответствующей кнопке панели инструментов Стандартная, с помощью команды Инструменты Редактор меню или с использованием комбинации клавиш CTRL + E, рис. 5.6. Объект меню может быть выведен на форму в том случае, если она маркирована. При создании меню должны быть определены свойства меню Name - имя меню в коде программы и Caption - надпись, рис. 5.6. Свойство Index (см. рис. 5.6) используется при создании массива меню. Если в рассматриваемой ситуации некоторая команда меню не имеет смысла, то свойству Enabled нужно присвоить значение False. Если свойству Visible присвоить значение False, то пункт меню становится невидимым.

  Структура создаваемого меню отображается при его формировании в нижней части окна редактора меню, рис. 5.6; кнопки с вертикальными стрелками позволяют переместить выбранный пункт меню на одну позицию вверх/вниз, при этом остаeтся неизменным уровень вложенности, кнопка со стрелкой вправо перемещает пункт на один уровень вложенности вниз, кнопка со стрелкой влево перемещает пункт на один уровень вложенности вверх. Команда Next включает в меню ещeодин пункт, команда Insert вставляет новый пункт меню перед текущим, команда Delete удаляет текущий элемент меню. Символ & в названии пункта меню обеспечивает подчeркивание первой буквы названия команды меню (возможность использования горячей клавиши для вызова команды).

  Private Sub Form_MouseDown(button As Integer, shift As Integer, x As Single, y As Single) If button = 2 Then frmStudium.PopupMenu mnuBeruf End If End Sub  

Рис. 5.6.  Редактор меню  

  Практическая работа 37. Меню Создать меню, команда которого позволяет вывести системную информацию Мicrosoft; ниже дана последовательность действий:

  маркировать форму, стартовать редактор меню,

cоздать меню, задав: Name = mnuSysInfMicrosoft (Caption = SystInfMicrosoft) и Name = mnuEnd,

добавить в проект форму About Dialog, для этого использовать меню Проект Добавить форму About Dialog Открыть,

ввести код, данный ниже: Private Sub mnuSysInfMicrosoft_Click() frmAbout.Show vbModal End Sub Private Sub mnuEnd_Click() End End Sub

после старта проекта выбрать команду меню SysInfMicrosoft, сделать щелчок на этой кнопке, выводится диалоговое окно About, после щелчка на нижней кнопке выведенного диалогового окна выводится системная информация Microsoft.

  Клавиатура и мышь - генераторы событий для других объектов Клавиатура и мышь обеспечивают взаимодействие пользователя с операционной системой и приложением. Клавиатура - средство ввода данных. Мышь позволяет пользователю управлять средой разработки.

  Мышь Основные события, связанные с мышью даны, в табл. 5.5

  Таблица 5.5. События, связанные с мышью Событие Пояснения Click Щелчок клавишей мыши. Может наступать также и при изменении значений свойств объекта; для поля списка Click наступает при выборе элемента списка DblClick Двойной щелчок MouseDown Нажатие клавиши мыши MouseUp Отпускание клавиши мыши; параметры те же, что и в случае события MouseDown MouseMove Передвижение курсора мыши над некоторым объектом, параметры те же, что и в случае события MouseDown DragDrop Сбрасывание перетаскиваемого мышью объекта; используется параметр source - объект. Синтаксис: Private Sub Command1_ DragDrop (source As Control, x As Single, y As Single) DragOver Протаскивание объекта мышью над элементом; используется параметр source - объект, синтаксис: Private Sub Command1_dragover(source As Control, x As Single, y As Single, state As Integer) state=0 - объект входит в границы источника, state=1 - объект покидает источник, state=2 - объект перетаскивается внутри границ источника   Практическая работа 38. Мышь 38а. Мышь; некоторые события Cоздать на форме: текстовое поле (Name = txt1), 2 поля метки (Name = lbl1 и lbl2 соответственно), рис. 5.7, ввести код, данный ниже,

стартовать проект, протаскивать первую метку над формой и текстовым полем, наблюдать появляющуюся при этом запись в текстовом поле, например: "Label above the TextBox" и т.д. Наблюдать, как при перемещении курсора мыши изменяются его координаты, выводимые в поле второй метки, рис. 5.7

  Должно быть установлено значение свойства одной из меток DragMode = 1, что обеспечивает возможность еe перемещения после старта проекта (альтернативное значение - 0). Свойство Tag, см. код, используется в данном случае для вывода названия объекта. В двух процедурах обработки события DragOver (см. код Form_DragOver(:) и txt1_DragOver(:) используется параметр source - объект).

   

Рис. 5.7.  Мышь, некоторые события  

  Private Sub Form_Load() lbl1.Tag = "Label1" End Sub Private Sub Form_DragOver(source As Control, x As Single, y As Single, state As Integer) txt1.Text = source.Tag & "above the Form" End Sub Private Sub txt1_DragОver(source As Control, x As Single, y As Single, state As Integer) txt1.Text = source.Tag & "above the TextBox" End Sub Private Sub Form_MouseMove(button As Integer, shift As Integer, x As Single, y As Single) lbl2.Caption = Str(x) & ";" & Str(y) End Sub 38в. Мышь; перетаскивание элементов списков Создать на форме два текстовых поля,

свойствам DragIcon обoих полей списка присвоить одно из значенией: :\Program File\Microsoft Visual Studio\Common\Graphics\Icons\DragDrop\Drag1pg.ico, : \Drag3pg.ico, : \Drop1pg.ico,

ввести код, данный ниже,

стартовать проект, маркировать элементы первого поля списка, перетаскивать их поочерeдно во второе поле списка и наоборот, рис. 5.8.

  Пояснения: процедура Form_Load () обеспечивает создание элементов списка первого поля списка. Две процедуры Private Sub lstK_DragDrop(Source As Control, X As Single, Y As Single) обеспечивают возможность перетаскивания элемента списка в другое поле списка и удаление его из первого поля. В процедурах:

  Private Sub lstК_MouseDown(Button As Integer, Shift As Integer,_ X As Single, Y As Single), см. ниже, используется параметр 1 ("ListК.Drag 1").

   

Рис. 5.8.  Мышь; перетаскивание элементов списков  

  Private Sub Form_Load() lst1.AddItem "Buch" lst1.AddItem "Heft" lst1.AddItem "Bleistift" End Sub Private Sub lst1_DragDrop(Source As Control, X As Single, Y As Single) If Source = lst2 Then lst1.AddItem lst2 lst2.RemoveItem lst2.ListIndex End If End Sub Private Sub lst1_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) lst1.Drag 1 End Sub Private Sub lst2_DragDrop(Source As Control, X As Single, Y As Single) If Source = lst1 Then lst2.AddItem lst1 lst1.RemoveItem lst1.ListIndex End If End Sub Private Sub lst2_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) lst2.Drag 1 End Sub Клавиатура События, генерируемые клавиатурой, получает объект, имеющий фокус (форма получает событие, если ни один объект не имеет фокуса). Нажатие клавиши ТАВ игнорируется, т.к. она служит для перемещения фокуса . В табл. 5.6 представлены события, связанные с клавиатурой.

  Таблица 5.6. События, связанные с клавиатурой Событие Пояснение KeyPress Вызывается только при нажатии клавиш, имеющих ANSI-код. Возвращается код ANSI нажатой клавиши; синтаксис: Control_KeyPress(KeyAscii As Integer) KeyDown Возникает при нажатии любой клавиши; синтаксис: Control_KeyDown(KeyCode As Integer, Shift As Integer) KeyUp Возникает при отпускании любой клавиши; синтаксис: Control_KeyUp(KeyCode As Integer, Shift As Integer)   Параметр Shift даeт информацию о состоянии клавиш Shift, Ctrl, Alt.

  При обработке 2-х последних событий используются клавишные константы (например, vbKeyLeft, vbKeyUp и.т.д), а не ANSI-код. Список KeyCodeConstants находится в каталоге объектов (Members of KeyCodeConstants; Class: KeyCodeConstans).

  Практическая работа 39. Клавиатура; обработка событий KeyPress, KeyDown Последовательность действий:

  Создать на форме элементы управления Image и два поля Label: у первого значение Name = lbl1, второе используется для надписи, рис. 5.9 внизу, см. также код, данный ниже,

ввести код, стартовать проект,

нажимать клавиши клавиатуры со стрелками, наблюдать перемещение объекта Image (см. использование метода Move: img1.Move x, y в процедуре Private Sub Form_KeyDown(keycode As Integer, shift As Integer)),

нажимать клавиши с символами, наблюдать смену данных в поле метки (обработка события КeyРress), см. процедуру Private Sub Form_KeyPress(keyascii As Integer).

  (General) (Declarations) Dim x As Integer, y As Integer Private Sub Form_KeyPress(keyascii As Integer) lbl1.Caption = Chr(keyascii) End Sub Private Sub Form_KeyDown(keycode As Integer, shift As Integer) Select Case keycode Case vbKeyLeft x = x - 350 If x <= 0 Then x = frm.Width - img1.Width End If Case vbKeyUp y = y - 350 If y <= 0 Then y = frm.Height - img1.Height End If Case vbKeyRight x = x + 350 If x >= frm.Width Then x = 0 End If Case vbKeyDown y = y + 350 If y >= frm.Height Then y = 0 End If End Select img1.Move x, y End Sub  

Рис. 5.9.  Клавиатура; Event KeyPress, Evens KeyDown, KeyUp

Соседние файлы в папке INTUIT Лекции Visual Basic