Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Диспетчеризация действий на основе компонента ActionList




1.Перенесите на форму со страницы Стандарт компонентActionList1. Перенесите также со страницы Win32 компонент ImageList1 и сошлитесь на него в свойстве Images компонентаActionList1.

2.Загрузите в компонент ImageList1 четыре изображения. Они загружаются в процессе проектирования с помощью редактора списков изображений. Окно редактора вызывается двойным щелчком на компоненте ImageList1 или щелчком правой кнопки мыши и выбором команды контекстного меню Редактор ImageList. В окне редактора Образы можно добавить в списки изображение (кнопка Добавить), удалить изображение из списка кнопкой Удалить, очистить весь список кнопкой Очистить. При добавлении изображения в список, которое начинается с нажатия кнопки Добавить, открывается окно открытия файлов изображений, в котором можно выбрать нужный файл. Множество изображений, размещаемых обычно на кнопках, содержится в папке …\Program Files\Common Files\Borland Shared\Images\Buttons. Следует помнить, что размер всех изображений в списке должен быть одинаковым. Как правило, это размер, используемый для пиктограмм в меню, списках, кнопках. При добавлении в список изображений для кнопок надо иметь в виду, что они часто содержат не одно, а два и более изображений. В этих случаях после выбора имени файла изображений при щелчке на кнопке Открыть задается вопрос: “Bitmap dimensions for … are greater then imagelist dimensions. Separate into … separate bitmaps?” (“Размерность изображения … больше размерности списка. Разделить на … отдельные изображения?”). Если ответить отрицательно, то все изображения уменьшатся в горизонтальном размере и лягут как одно изображение. Использовать его в дальнейшем будет невозможно. Поэтому на заданный вопрос надо ответить положительно. Тогда загружаемая битовая матрица автоматически разделится на отдельные изображения, а затем те из них, которые не нужны, удаляют. Каждое загруженное в список изображение получает индекс. Именно на эти индексы впоследствии ссылаются в соответствующих свойствах разделов меню, списков, кнопок и т.д., когда надо загрузить в них то или иное изображение. Чтобы изменить последовательность изображений в списке, перетаскивают изображение мышью на новое место. Итак, изображения добавляют из файлов clear, fontbold, tools, dooropen. Ненужные изображения в окне Образы выделяют щелчком мыши и удаляют, а когда все четыре изображения с соответствующими номерами будут находиться  в окне, их загружают нажатием клавиши Ок.

3.Сделайте на компоненте ActionList1двойной щелчок, чтобы попасть в Редактор Действий (окно Редактирование Form1->ActionList1), позволяющий вводить и упорядочивать действия. Колонка Категории: не имеет отношения к проектированию данного приложения. Щелчок правой кнопкой мыши или щелчок на маленькой кнопке со стрелкой вниз правее первой быстрой кнопки окна редактирования позволяет выбрать одну из команд: Новое действие или Новое стандартное действие. Первая из них относится к вводу нового действия любого типа. Будем пользоваться только командой Новое действие. Выберите эту команду четыре раза. В колонке Действия: появятся имена действий по умолчанию: Action1, Action2, Action3, Action4.

4.Выделите Action1. В Инспекторе Объектов указанным ниже свойствам объекта действия Action1присвойте следующие значения: Caption –Новое, Hint –очистка, ImageIndex –0, Name –ANew, ShortCut –Ctrl+A. Для Action2: Caption –Преобразование, Hint –преобразование, ImageIndex –1, Name –AMod, ShortCut –Ctrl+B. Для Action3: Caption –Преобразование и вычисление, Hint –преобразование и вычисление, ImageIndex –2, Name –ARun, ShortCut –Ctrl+C. И для Action4: Caption –Выход, Hint –выход, ImageIndex –3, Name –AExit, ShortCut –Ctrl+D.

5.На странице событий Инспектора Объектов для каждого действия определено три события: OnExecute, OnUpdateи OnHint. Событие OnExecuteвозникает в момент, когда пользователь инициализировал действие, например, щелкнув на компоненте (разделе меню, кнопке), связанном с данным действием. Обработчик этого события должен содержать процедуру, реализующую данное действие. Событие OnUpdate периодически возникает в промежутках между действиями. Возникновение этих событий прекращается только во время реализации события или во время, когда пользователь ничего не делает и компьютер находится в состоянии ожидания действий. Обработчик события OnUpdate может содержать какие-то настройки, подготовку ожидаемых дальнейших действий или выполнение каких-то фоновых операций. Событие OnHint возникает в момент, когда на экране отображается ярлычок подсказки в результате того, что пользователь задержал курсор мыши над компонентом, инициализирующим событие. Наличие в объекте действия событий OnUpdate и OnHint расширяет возможности по проектированию приложения. В выпадающем списке событияOnExecute содержатся значения FormCreate, N2Click, N3Click, N4Click, N6Click, т.е. имена написанных обработчиков событий – создание формы и щелчки на разделах меню Новое, Преобразование, Преобразование и вычисление, Выход. Для действия Anew примите N2Click, AMod - N3Click, ARun - N4Click, AExit - N6Click.

6.В свойствоImages компонента MainMenu1внесите ImageList1. Двойным щелчком на компоненте MainMenu1перейдите в окно Form1->MainMenu1 Конструктора Меню. В свойство Action разделов Новое, Преобразование, Преобразование и вычисление, Выход внесите соответственно значения Anew, AMod, ARun, AExit. Как показывает Инспектор Объектов, при этом в разделы меню переносятся свойства соответствующего объекта действия.

7.Со страницы Win32 перенесите на форму инструментальную панель - компонентToolBar. По умолчанию он расположится вверху, поскольку его свойство Align по умолчанию равно alTop. Установите Align=alNone, чтобы можно было придать любую форму и расположить ее в любом месте. Полезно также воспользоваться свойством Constraints.

8.В свойство Hint впишите инструментальная панель, в свойство Imagesвнесите ImageList1, в ShowHint – true. Щелкните правой кнопкой мыши на компоненте ToolBar1 и из всплывшего меню выберите команду Новая кнопка. В свойство Actionкнопки внесите ANew, а в свойство ShowHint – true. Повторите эту команду еще для трех кнопок, внося в свойство Actionсоответственно AMod, ARun, AExit, в свойство ShowHint – true. Отметим, что свойства и обработчики событий объекта действия будут перенесены на соответствующие кнопки инструментальной панели.

 

Тестирование и использование приложения

1.Запустите приложение на выполнение, нажав быстрые кнопки Сохранить все и Запуск.

2.Составьте тесты, которые проверят правильность сообщений об ошибках.

3.Выполните преобразования для исходного выражения в общем виде, содержащего не менее трех вложенных скобок и все арифметические операции. Вычислите значение подобного по сложности арифметического выражения.

4.Выделите в отдельный класс функции работы со стеком. Затем выполните отладку отредактированного приложения и получите результаты, представленные на рис.5.4 и 5.5.

 

Рис.5.4 – форма после пребразований выражения

 

Рис.5.5 – форма после пребразований и вычисления выражения



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

1.Внесите комментарии в файл LR_5.cpp.

2.Внесите комментарии в функции работы со стеком в файле f_5.cpp.

3.Внесите комментарии в функцию проверки исходного выражения.

4.Внесите комментарии в функцию расстановки пробелов в исходном выражении.

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

6.Внесите комментарии в функцию реверсирования исходного выражения с пробелами.

7.Внесите комментарии в функцию преобразования реверсированного исходного выражения с пробелами в постфиксную запись.

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

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

10.Где и как создается и разрушается объект класса Stack?

11.Как выделить функции работы со стеком в отдельный класс?

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

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

14.Расскажите о возможностях редактора диспетчера действий ActionList.

15.Каково назначение компонента ImageList? Как он используется?

16.Расскажите о последовательности шагов при формировании списка действий и проектирования меню и инструментальной панели в данной работе.

17.Как пользоваться Редактором Действий? Как задаются значения свойствам объекта действия?

18.Какие события определены для каждого действия? Какое событие и как используется в данной работе? Как еще можно использовать это событие?

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

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

21.Расскажите о компоненте ToolBar. Какие свойства и как используются в данной работе?

22.Поместите алгоритмы в обработчики щелчков на кнопках инструментальной панели и свяжите их с меню.



ЛАБОРАТОРНАЯ  РАБОТА  6

ОЧЕРЕДЬ ПРИОРИТЕТОВ

 

Введение

        Очередь (queue) – это структура данных, которая сохраняет элементы в стиске и обеспечивает доступ к данным только в двух концах списка. Элемент вставляется в конец списка и удаляется из начала списка. Приложения используют очередь для хранения элементов в порядке их поступления.

    Элементы удаляются из очереди в том же порядке, в котором они сохраняются и, следовательно, очередь обеспечивает FIFO(first-in/first-out) упорядочение. Обслуживание клиентов в очереди и буферизация задач принтера в системе входных и выходных потоков принтера – это классические примеры очередей.

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

    В очереди приоритетов элемент также вставляется в конец очереди, но удаляется элемент с наивысшим приоритетом, вне зависимости от его положения в очереди.

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

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

Проектирование приложения.










Последнее изменение этой страницы: 2018-05-29; просмотров: 200.

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