Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РАБ_C++BUILDER.doc
Скачиваний:
100
Добавлен:
02.06.2015
Размер:
7.07 Mб
Скачать

Контрольные вопросы

    1. Когда используется компонент ImageList? Как в процессе проектирования загружаются изображения? Какие свойства имеют изображения?

    2. Приведите примеры иерархических данных. Какие компоненты способны отображать такие данные и в каком виде?

    3. Как осуществляется доступ к отдельным узлам дерева?

    4. Как проектировать дерево?

    5. Какие свойства и как можно указать для каждого нового узла дерева?

    6. Расскажите о формировании дерева во время выполнения приложения.

    7. Какие методы позволяют вставлять в дерево новые узлы?

    8. Какие методы позволяют вставлять в дерево новые узлы, если с каждым узлом может быть связан некоторый объект?

    9. Как найти текст и объект, связанный с некоторым узлом дерева?

    10. Как удаляются узлы дерева?

    11. Как избежать мерцания изображения дерева при его реорганизации?

    12. Как узнать число узлов дерева, управляемых данным узлом?

    13. Какое свойство компонента TreeView указывает выделенный узел?

    14. Какие события происходят при выделении узла дерева? Какие параметры передаются в обработчики этих событий?

    15. Какие события компонента TreeView связаны с развертыванием и свертыванием узлов? Какие параметры передаются в обработчики этих событий?

    16. Как запретить и разрешить пользователю редактировать отображаемые деревом данные?

    17. Какие свойства компонента TreeView позволяют отображать или убирать из дерева кнопки, показывающие раскрытия узла, линии, связывающие узлы, и коренной узел?

    18. Какое свойство и как позволяет автоматически сортировать ветви и узлы дерева?

    19. Какой метод и как можно использовать для сортировки узлов?

    20. Как используются обработчики событий «нажать/отжать клавишу» для работы с деревом?

    21. Что представляет собой компонент StatusBar? Какие возможности предоставляют его свойства?

    22. Как задать свойства панелей?

    23. Как занести в панель текст в процессе проектирования и изменять его программно во время выполнения?

    24. На примере расскажите о применении технологии Drag&Drop.

    25. Какие свойства, общие для всех визуальных компонентов, связаны с процессом перетаскивания?

    26. Какие события и какой метод связаны с процессом перетаскивания?

    27. Расскажите о назначении компонента ListView.

    28. Расскажите о свойствах компонента ListView. Как пользоваться редактором элементов ListView? Редактором заголовков?

    29. Расскажите об использовании компонента ListView в процессе проектирования.

    30. Как с помощью меню можно изменять вид списка в окне ListView и перемещать пиктограммы?

    31. Как упорядочить расположение пиктограмм?

Библиографический список

  1. Архангельский АЯ Программирование в C++Builder 6. – М: ЗАО «Издательство БИНОМ», 2003 – 1152 с – С 176–186, 209–214, 229–230, 325–328.

  2. Шамис В.А. Borland C++Builder 6. Для профессионалов / В.А. Шамис.− СПб.: Питер, 2003. − 798 с. – С. 340−345.

  3. Архангельский АЯ Компоненты C++Builder. Справочное и методическое пособие. – М: ООО «Бином-Пресс», 2013 – 960 с: ил.

ЗАНЯТИЕ 6

Главное меню.

Контекстное всплывающее меню.

Горячие клавиши

Меню представляют два компонента, расположенные на странице Стандарт: MainMenuглавное меню и PopupMenuвсплывающее меню.

Компонент MainMenu является невизуальным компонентом, т.е. место его размещения на форме в процессе проектирования не имеет значения для пользователя – во время выполнения он увидит не сам компонент, а только меню, сгенерированное компонентом.

Обычно на форму помещается один компонент MainMenu. В этом случае его имя автоматически заносится в свойство формы Menu. Но в случае необходимости можно поместить на форму несколько компонентов MainMenu с разными наборами разделов, соответствующими различным режимам работы приложения. В этом случае во время проектирования свойству Menu формы присваивается ссылка на один из этих компонентов, а в процессе выполнения в нужные моменты это свойство можно изменять, меняя соответственно состав главного меню приложения.

Основное свойство компонента MainMenuItems. Его заполнение производится с помощью Конструктора Меню, вызываемого двойным щелчком на компоненте MainMenu или нажатием кнопки с многоточием рядом со свойством Items в окне Инспектора Объектов. При работе в окне Конструктора Меню вводят новые разделы и помещают их в нужное место.

При выборе нового раздела (щелчком на разделе) в Инспекторе Объектов появится множество свойств данного раздела, поскольку каждый раздел меню, т.е. каждый элемент свойства Items является объектом типа TMenuItem, обладающим своими свойствами, методами, событиями. Рассмотрим основные свойства раздела.

Свойство Caption обозначает надпись раздела. Правила заполнения этого свойства следующие.

В надписи можно предусмотреть использование клавиши ускоренного доступа, выделяя для этого один из символов надписи. Перед символом, который должен соответствовать клавише ускоренного доступа, ставится символ амперсанда '&’. Этот символ не появляется в надписи, а следующий за ним символ оказывается подчеркнутым. Тогда пользователь может вместо щелчка на кнопке нажать в любой момент клавишу Alt совместно с клавишей выделенного символа.

Если в качестве значения Caption очередного раздела ввести символ минус, то вместо раздела в меню появится разделитель.

Свойство Name задает имя объекта, соответствующего разделу меню. Рекомендуется давать этим объектам осмысленные имена.

Свойство ShortCut определяет клавиши быстрого доступа к разделу меню – «горячие» клавиши, с помощью которых пользователь, даже не заходя в меню, может в любой момент вызвать выполнение действий, связанных с данным разделом. Чтобы определить клавиши быстрого доступа, надо открыть выпадающий список свойства ShortCut в окне Инспектора Объектов и выбрать из него нужную комбинацию клавиш. Эта комбинация появится в строке раздела меню.

Свойство Default определяет, является ли данный раздел разделом по умолчанию, т.е. разделом, выполняемым при двойном щелчке пользователя на головном разделе. Подменю может содержать только один раздел по умолчанию, выделяемый жирным шрифтом.

Свойство Break используется в длинных меню, чтобы разбить список разделов на несколько столбцов. Возможные значения Break: mbNone – отсутствие разбиения меню (это значение принято по умолчанию), mbBarBreak и mbBreak – в меню вводится новый столбец разделов, отделенный от предыдущего полосой (mbBarBreak) или пробелами (mbBreak).

Свойство Checked, установленное в true, указывает, что в разделе меню будет отображаться маркер флажка, который можно использовать для показа того, что данный раздел выбран. Однако при выборе и отсутствии выбора маркер сам по себе не переключается, и поэтому в обработчик события OnClick раздела нужно вставлять оператор типа

<имя_раздела>->Checked =! <имя_раздела>->Checked;

Свойство AutoCheck, установленное в true, обеспечивает при каждом выборе пользователем данного раздела автоматическое переключение маркера, указывая то на выбранное состояние, то на отсутствие выбора.

Еще одним свойством, позволяющим вводить маркеры в разделы меню, является RadioItem. Это свойство, установленное в true, определяет, что данный раздел должен работать в режиме радиокнопки совместно с другими разделами, имеющими то же значение свойства GroupIndex. По умолчанию значение GroupIndex равно нулю. Если же при RadioItem = true для нескольких разделов задать значение GroupIndex большим нуля и одинаковым, то все эти разделы могут быть отмечены маркерами флажков, но только в выбранном разделе появится маркер флажка. Если задать программно в одном из этих разделов Checked = true, то в остальных разделах Checked автоматически сбросится в false.

Для подобных групп разделов, работающих как радиокнопки, можно установить в true свойство AutoCheck. Тогда при щелчке пользователя на невыбранном разделе все будет работать нормально: этот раздел включится, а ранее включенный выключится. Но если пользователь щелкнет на выбранном разделе, то он выключится и окажется, что все разделы данной группы выключены. Если по смыслу это допустимое состояние, то все можно оставить без изменений. Но если в любом случае один из разделов должен быть включен, то надо отказаться от использования свойства AutoCheck (установить его в false) и переключать свойство Checked программно. Например, в обработчики щелчков этих разделов можно ввести оператор:

if(! ((TMenuItem *) Sender)->Checked)

((TMenuItem *) Sender)->Checked) = true;

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

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

Для каждого раздела могут быть установлены пользователем во время проектирования или программно во время выполнения свойства Enabled (доступен) и Visible (видимый). Если установить Enabled = false, то раздел будет изображаться серой надписью и не будет реагировать на щелчок пользователя. Если же задать Visible = false, то раздел вообще не будет виден, а остальные разделы сомкнутся, заняв место невидимого. Свойства Enabled и Visible используются для того, чтобы изменять состав доступных пользователю разделов в зависимости от режима работы приложения.

Имеется также возможность ввода в разделы меню изображений. Для этого используют свойства разделов Bitmap и ImageIndex. Первое из них позволяет непосредственно ввести изображение в раздел, выбрав его из указанного пользователем файла. Второе позволяет указать индекс изображения, хранящегося во внешнем компоненте ImageList. Указание на этот компонент задается в свойстве Images компонента MainMenu. Индексы начинаются с нуля. Если указать индекс -1 (значение по умолчанию), изображения не будет.

Основное событие раздела – OnClick, возникающее при щелчке пользователя на разделе или при нажатии «горячих» клавиш быстрого доступа.

В общем случае приложения имеют одну главную и несколько вспомогательных форм. И главная, и вспомогательная формы имеют свои главные меню – компоненты MainMenu. Обычно нужно, чтобы эти меню сливались в одно меню главной формы, так как пользователю неудобно работать одновременно с несколькими окнами, каждое из которых имеет свое меню. Возникает вопрос объединения главных меню вспомогательных форм с меню главной формы.

Наличие или отсутствие объединения определяется свойством AutoMerge компонентов MainMenu. Если требуется, чтобы меню вспомогательных форм объединялись с меню главной формы, то в каждой такой вспомогательной форме надо установить AutoMerge в true. При этом свойство AutoMerge главной формы должно оставаться в false.

Способ объединения определяется свойством разделов GroupIndex. Если требуется объединение меню, то разделам надо задать большие нуля и неубывающие значения GroupIndex. Тогда, если разделы встраиваемого (вспомогательного) меню имеют те же значения GroupIndex, что и какие-то разделы основного меню (меню главной формы), то разделы встраиваемого меню заменяют соответствующие разделы основного меню. В противном случае разделы вспомогательного меню встраиваются между элементами основного меню в соответствии с номерами GroupIndex. Например, в главной и вспомогательной формах структуры меню имеют следующие значения GroupIndex:

Форма 1 Форма 2

2 – 4 1 – 3

| | | |

2 4 1 3

| | |

2 4 1

Тогда в момент, когда активизируется вторая форма, в первой появляется меню со структурой:

1 – 2 – 3 – 4

| | | |

1 2 3 4

| | |

1 2 4

В этом примере отсутствовали разделы, имеющие в обеих формах одинаковые значения GroupIndex. Если бы такие были, то при активизации второй формы соответствующие разделы ее меню заменили бы аналогичные разделы первой формы .

Если в меню имеются разделы, работающие как радиокнопки, то их взаимодействие также определяется свойствами GroupIndex.

Рассмотрим пример использования компонента MainMenu и варианты объединения главного меню вспомогательной формы с главным меню главной формы.

  1. Создайте новое приложение и командой Сохранить все сохраните файл модуля и проект под предложенными по умолчанию именами – Unit1 и Project1 в созданной для приложения папке (каталоге).

  2. В свойство Caption формы Form1 впишите ГЛАВНАЯ ФОРМА.

  3. Со страницы Стандарт на форму перенесите компонент MainMenu1, двойным щелчком на нем перейдите в Конструктор Меню (окно Form1-> MainMenu1) и сконструируйте меню с двумя головными разделами Формирование квадратных матриц, Операции с матрицей.