Учебник по Visual Basic - 3.2. Создание контекстно-зависимого меню

E-mail Печать PDF
Рейтинг пользователей: / 434
ХудшийЛучший 
Индекс материала
Учебник по Visual Basic
1.2. Преймущества и недостатки VB
1.3. Запуск VB.
1.4. Интегрированная среда разработки (IDE - Integrated Development Environment)
1.5. Основные конструкции языка.
2. Типы данных. Переменные и процедуры, их области видимости. Массивы.
2.2. Переменные и процедуры, их области видимости.
2.3. Объявление массивов и работа с ними.
3. Создание меню
3.1. Создание статического меню
3.2. Создание контекстно-зависимого меню
5. Реализация технологии Drag&Drop средствами VB
5.1. Объекты Drag&Drop
5.2. События Drag&Drop
5.3. Автоматическое перетаскивание
5.4. Перетаскивание с использованием OLE
5.5. Автоматическое перетаскивание с использованием OLE
5.5. Программируемое перетаскивание с использованием OLE
6. Работа с классами в Visual Basic.
6.1.1. Добавление в класс свойств.
6.1.2. Добавление в класс методов.
6.1.3.Добавление в класс событий.
6.1.4.Объявление и использование объектов.
6.1.5. Удаление объекта класса.
6.2. Самостоятельная работа - доработка класса Splitter.
7. Технология OLE
7.1. Элемент управления OLE Container
7.2. Объекты OLE как элементы управления
7.3. OLE Automation
7.4. Создание объекта OLE
7.5. Использование объекта OLE
7.6. Работа с объектами Word
8. Создание элементов управления Active X.
Создание элементов управления ActiveX
Создание элементов управления Active X на примере ZigZag.
9. Использование функций Windows API в VB.
API-вызовы
10. Файловые функции в Visual Basic.
10.2. Обработка текстовых документов (файлы последовательного доступа).
10.3. Файлы произвольного (прямого) доступа.
10.4. Файлы инициализации.
10.5. Использование FSO (File System Object).
11. Использование элемента управления WinSock Control для создания сетевых приложений.
12. Доступ к базам данных из VB с помощью ADO.
12.2. Объект управления данными - ADO Data Control.
12.3. Связанные с данными элементы управления.
12.4. Использование Data Grid Control.
12.5. Доступ к базам данных через объекты ADODB.
13. Практика
Все страницы

2. Создание контекстно-зависимого меню

Контекстно-зависимое меню вызывается при нажатии правой клавиши мыши на каком-либо элементе управления.

Для формы это событие MouseDown. При возникновении события MouseDown, происходит проверка, какая клавиша нажата (параметр функции). В том случае, если нажата правая кнопка мыши, то необходимо вызвать функцию PopupMenu с указанием пункта меню верхнего уровня, которое необходимо вызвать.

Например:

Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)

   If Button = 2 Then

      PopupMenu mnuFile

   End If

End Sub

Button - возвращает целое число, которое определяет, какая кнопка мыши была нажата;

Shift - определяет состояние клавиш SHIFT, CTRL, и ALT при нажатии на кнопку мыши;

Х, Y - координаты указателя мыши.

Лекция №4: MDI-интерфейс.

1. Понятие MDI-приложения.

Большинство создаваемых в VB приложений состоят из независимых форм. Каждая из этих форм выводится на экран отдельно от других и так же независимо от других может перемещаться, разворачиваться и сворачиваться. В интерфейсе такого типа тяжело организовать формы и работать с ними как с группой. Этот тип интерфейса называется SDI-интерфейс (Single Document Interface).
Альтернатива стандартному интерфейсу - многодокументный интерфейс, или MDI-интерфейс (Multiple Document Interface). В приложении этого типа есть одна родительская форма. Остальные формы могут быть дочерними, т.е. содержаться внутри родительской. Родительская форма представляет собой контейнер для всех дочерних форм приложения. Примеры MDI-приложений - Excel, Word и т.д. В них можно открыть несколько окон, перемещаться между ними с помощью меню и минимизировать все документы одновременно одним щелчком мыши.
Стандарт MDI позволяет совершенствовать программы в двух направлениях:
1.    возможность ограничиться одной формой-контейнером, которая станет рабочим фоном приложения;
2.    возможность одновременно работать с несколькими документами.
MDI-приложения позволяют использовать несколько экземпляров одной и той же формы, что увеличивает производительность и гибкость программ. Кроме того, интерфейс программы будет более аккуратным, поскольку находящиеся в нем формы не будут разбросаны по всему экрану.

Характеристики родительских MDI-форм:

  • Приложение может иметь только одну MDI-форму.
  • MDI-форма может содержать элементы управления, имеющие свойство Align, например, такие как PictureBox или Toolbar. Другие элементы в MDI-форме распологать нельзя.
  • Для отображения информации в MDI-форме нельзя использовать метод Print и другие графические методы.
  • Родительское и дочерние окна представлены в Windows одной пиктограммой. Если родительское окно минимизируется, а затем восстанавливается, восстанавливаются все дочерние окна.
  • Родительское и дочерние окна могут иметь свои меню. Определенное для дочерней формы меню отображается в строке меню родительской формы. Определенное для родительской формы меню не появляется вообще, если активная дочерняя форма имеет собственное меню.

Характеристики дочерних MDI-форм:
  • Каждая дочерняя форма располагается во внутренней части родительского окна. Дочернюю форму нельзя переместить за границы родительской MDI-формы.
  • Когда минимизируется дочернее окно, его пиктограмма появляется в родительском окне, а не на панели задач Windows.
  • Когда максимизируется дочерняя форма, она заполняет все внутреннее окно родительской формы. В строке заголовка родительской формы указывается название родительской формы и максимизированной дочерней.
  • Когда максимизируется одна дочерняя форма, максимизируются все остальные дочерние формы.


2. Создание простой программы с MDI-интерфейсом.
1.    Создать новый проект - File\New Project.
2.    После создания проекта, необходимо добавить к нему родительскую MDI-форму. Для этого необходимо выбрать меню Project\Add MDI Form, или воспользоваться командой MDI Form из раскрывающегося меню кнопки Add Form.
3.    В браузере проекта MDI-форма будет находиться в папке Forms, как и обычные формы, однако будет иметь другую пиктограмму.
4.    После того, как создана новая форма, необходимо задать ей значащее имя и установить значения других, необходимых свойств. Большинство свойств MDI-формы аналогичны свойствам стандартной формы. Есть только два характерных только для нее свойства - AutoShowChildren и ScrollBars. Свойство AutoShowChildren задает, появится ли дочерняя форма автоматически при загрузке родительской, или нет. По умолчанию установлено значение TRUE. Свойство ScrollBars определяет, будут ли отображаться по необходимости полосы прокрутки. По умолчанию установлено значение TRUE. Еще одно свойство, на которое стоит обратить внимание - Picture, позволяющее поместить на задний фон формы какое-либо фоновое изображение.
5.    Теперь необходимо добавить дочернюю форму. Дочерняя форма - это обычная стандартная форма, только значение свойства MDIChild у нее установлено True. Для добавления дочерней формы необходимо выбрать стандартную форму (которая создалась автоматически при создании проекта) в браузере проекта, а затем в окне свойств установите значение MDIChild=True. В окне браузера проекта у формы изменится пиктограмма.
6.    После этого необходимо разместить в дочерней форме необходимые элементы управления.
7.    Для того чтобы при старте приложения открылась пустая родительская форма, необходимо установить стартовую форму через пункт меню Project\Project Properties, поле Startup Object.
Размер дочерней формы при ее первом появлении во время выполнения отличается от размера, заданного в процессе разработки. Это происходит потому, что Windows сама по умолчанию задает определенные размеры и место расположения всем выводимым на экран дочерним формам. Чтобы заставить дочернюю форму открываться в нужном размере, необходимо написать обработчик события Load для дочерней формы, где программно задать необходимые размеры и расположение относительно левого - верхнего угла рабочей области родительской формы. Вначале необходимо подобрать подходящий размер дочерней формы в режиме разработки, а затем полученные значения свойств Height и Width установить программно. Например:
Private Sub Form_Load()
Me.Height=2745
Me.Width=3690
Me.Top=(mdiMain.ScaleHeight - Me.Height) / 2
Me.Left=(mdiMain.ScaleWidth - Me.Width) / 2
End Sub
После того как создан шаблон дочерней формы, необходим инструмент для создания экземпляров этой формы во время выполнения программы и вывода их на экран MDI-приложения. Это делается с помощью двух строк программного кода:
Dim NewFrm As New имя_дочерней_формы
NewFrm.Show
Например, данный программный код необходим в функции обработки событий при выборе одного из пунктов меню (например, New). Если подобный программный код указан в качестве обработки события, после запуска проекта, при выборе пункта меню New создается новая дочерняя форма.
Для работы с MDI-приложениями широко используются два особых ключевых слова - Me и ActiveForm. Эти слова позволяют создать процедуры, которые будут работать со всеми создаваемыми дочерними формами.
Ключевое слово Me используется в любой форме для ссылки на нее саму. Таким образом, если программный код в дочерней форме написан с использованием ключевого слова Me, он будет работать в любом активном на данный момент экземпляре дочерней формы.
Свойство родительской формы ActiveForm подобно по назначению Me. В свойстве ActiveForm хранится ссылка на активную в данный момент дочернюю форму. Т.е. с помощью свойства ActiveForm вы можете ссылаться на любое свойство, метод или событие активной в настоящий момент дочерней формы, даже не зная ее имени.
Например, пусть открыто более одной дочерней формы. Щелчок мыши на пустом пространстве родительской формы, приведет к тому, что в активную дочернюю форму будет выведен некий текст.
MdiMain.ActiveForm.Print «эта форма сейчас активна»
Если необходимо создать программный код, который должен работать в момент создания дочерней формы, его надо поместить в событие Activate для дочерней формы. Это событие возникает до события Load.

3. Работа с меню.
MDI-формы также могут иметь меню, которое создается аналогично стандартным формам, - с помощью редактора меню (диалогового окна Menu Editor). С помощью меню родительской формы пользователи обычно получают доступ ко всем командам многодокументного приложения.
В MDI-приложениях дочерние формы также могут иметь меню. Как и меню родительской формы, оно создается с помощью редактора меню. Однако, при выводе на экран дочерней формы, содержащей меню, оно отображается не как часть дочерней формы, а замещает меню родительской. Поэтому, из-за того, что меню активной дочерней формы в действительности располагается в родительской MDI-форме, могут возникнуть некоторые проблемы, а именно: когда активна какая-то дочерняя форма, пользователь не имеет доступа к меню родительской MDI-формы.
Существуют два способа преодолеть проблему, связанную с заменой меню. Один из них заключается в дублировании всех пунктов главного меню в меню дочерней формы, однако, этот подход малоэффективен в том случае, если в приложении несколько дочерних форм, имеющих собственные меню, из-за чрезмерного потребления системных ресурсов.
Второй вариант - включить в меню родительской формы все пункты, необходимые дочерним формам и оставить последние без меню. Для активизации нужных пунктов меню следует использовать события Activate и Deactivate, а также событие Unload (при закрытии дочернего окна).
Предположим, необходимо добавить пункт меню Edit для дочернего окна. Необходимо при создании меню задать для пункта Edit свойство Visible False. Предположим, имя пункта меню mnuEdit. Необходимо:

1.    В обработчике события Activate дочернего окна написать следующий код: имя_MDI_формы.mnuEdit.Visible = True
2.    В обработчике Deactivate дочернего окна обратный код: имя_MDI_формы.mnuEdit.Visible = False
3.    В обработчике Unload дочернего окна обратный код: имя_MDI_формы.mnuEdit.Visible = False


4. Работа с дочерними формами.
Еще одно преимущество MDI-приложений состоит в том, что в программе легко можно управлять дочерними формами. В Visual Basic предусмотрены средства, упрощающие доступ пользователя к дочерним окнам, открытым в MDI-форме. В вашей программе легко можно предусмотреть средства автоматического упорядочивания дочерних окон. Можно также создать меню, в котором будет находиться список всех открытых дочерних окон.
Один из методов обеспечения удобного доступа ко всем находящимся на экране формам - особый способ их размещения на экране. Это позволяет пользователю переходить к любой форме с помощью щелчка мыши. Для реализации упорядочивания дочерних окон внутри родительской используется метод MDI-формы Arrange, который имеет один параметр - константу, указывающую каким способом необходимо упорядочить дочерние окна.
MdiMain.Arrange vbCascade
Значения констант:
1.    vbCascade - расположение «каскадом» - каждая неминимизированная форма немного выступает из-за предыдущей.
2.    vbTileVertical - каждая неминимизированная форма принимает высоту родительской, а все вместе занимают ширину родительской. Если дочерних форм очень много, они могут располагаться в несколько рядов.
3.    vbTileHorizontal - аналогично, но по горизонтали.
4.    vbArrangeIcons - пиктограммы всех минимизированных окон располагаются по нижнему краю родительской формы.
Обычно опции расположения окон помещаются в меню Window MDI-формы. Каждая опция расположения, которая поддерживается в программе, вынесена в отдельный пункт меню.
Еще один способ облегчения доступа к дочерним окнам приложения - создания списка открытых дочерних окон. Автоматическая поддержка списка дочерних окон включается во время создания меню родительской MDI-формы. Это делается установкой свойства пункта меню WindowList в True (отметить).

5. Оптимизация MDI-приложений.
1.    Каждое загруженное дочернее окно занимает некоторый объем оперативной памяти. Если необходимо несколько окон, то надо свести к минимуму количество элементов управления и программный код.
2.    Если дочерние и родительское окна имеют одни команды меню, необходимо хранить код их обработки в родительской форме. При этом изменить атрибут Private на Public. Тогда код этого события может использовать как родительское, так и дочерние окна.
3.    Помещать все невидимые элементы управления в родительскую MDI-форму. Это позволит дочерним окнам совместно использовать указанные элементы управления, не вызывая неоправданного перерасхода оперативной памяти.

6. Самостоятельная работа: создание MDI-приложения.
Задание: Создать MDI-приложение - простейший текстовый редактор (с помощью элемента TextBox), предусмотреть изменения в меню при активизации дочерних окон, список дочерних окон, переименование (изменение заголовка) дочерних окон через меню родительского окна, автоматическое изменение размеров TextBoxа вслед за изменением размеров дочернего окна. Пункты меню - File (New, *Close, Exit), *Edit (Change caption), *Window. Помеченные звездочкой пункты меню должны пропадать или появляться в зависимости от наличия дочернего окна. Change Caption меняет заголовок дочерней формы через модальный не-MDI диалог, в котором заголовок редактируется в EditBoxе. Сохраните ваш проект для дальнейшей модернизации.