- •Сборник лекций по дисциплине «Объектно – ориентированное программирование»
- •2202 «Автоматизированные системы обработки информации и управления»
- •Рассмотрено
- •Рецензент:
- •Содержание
- •Пояснительная записка
- •Лекция №1 Тема: Введение
- •1. Определение объектно-ориентированного программирования
- •2. Свойства, события и методы объекта
- •3. Конструкторы
- •4. Компоненты: визуальные и невизуальные
- •5. Классы, наследование
- •Лекция №2 Тема: Язык Object Pascal
- •1. Синтаксические правила языка
- •2. Компилятор и его директивы
- •3. Файлы проекта Delphi
- •4. Области видимости и время жизни
- •Лекция №3 Тема: Константы, переменные, типизированные константы, процедуры и функции
- •1. Константы
- •2. Переменная
- •3. Типизированные константы
- •4. Процедуры и функции
- •1. Определение операций
- •2. Арифметические операции
- •3. Операции отношения
- •4. Булевы операции
- •5. Операции со строками
- •6. Операции с указателями
- •7. Операции с множествами
- •8. Операции с классами
- •9. Операция @
- •10. Приоритет и ассоциативность операций
- •Лекция №5 Тема: Операторы
- •1. Оператор присваивания и его соотношение с методом Assign
- •2. Оператор передачи управления goto
- •3. Оператор with
- •4. Условные операторы выбора if
- •5. Условный оператор множественного выбора case
- •6. Оператор цикла for
- •7. Оператор цикла repeat
- •8. Оператор цикла while
- •9. Прерывание цикла: оператор break, процедуры Continue, Exit и Abort
- •Лекция № 6 Тема: Динамическое распределение памяти. Исключения. Сообщения Windows.
- •1. Динамическое распределение памяти
- •2. Исключения
- •3. Последовательность обработки исключений
- •4. Преднамеренная генерация исключений
- •5. Сообщения Windows и их обработка
- •Лекция №7 Тема: Типы данных в языке Object Pascal
- •Символьные типы данных
- •Типы строк
- •1. Классификация типов данных
- •2. Порядковые типы данных
- •3. Целые типы данных
- •4. Действительные типы данных
- •5. Булевы типы данных
- •6. Символьные типы данных
- •7. Типы строк
- •8. Перечислимые типы
- •9. Ограниченные типы
- •10. Множества
- •Лекция №8 Тема: Структурные типы данных
- •1. Указатели
- •2. Файлы
- •3. Массивы
- •4. Записи
- •Лекция №9 Тема: Интегрированная Среда Разработки (иср) Delphi
- •1. Основные положения интегрированной среды разработки
- •2. Палитра компонентов
- •3. Редактор кода и инспектор объектов
- •4. Перетаскивание и встраивание окон в иср
- •5. Настройка инструментальной панели, палитры компонентов и редктора кода
- •6. Настройка интегрированной среды
- •7. Проекты Delphi
- •Лекция №10 Тема: Формы
- •1. Использование форм
- •2. Характеристики формы
- •3. Организация взаимодействия форм
- •4. Особенности модальных форм
- •5. Процедуры и функции, реализующие диалоги
- •Лекция №11 Тема: Компоненты ввода и отображения текстовой информации
- •1. Классификация компонентов ввода и отображения текстовой информации
- •2. Основные свойства, события и методы компонентов Label, StaticText и Panel
- •3. Основные свойства, события и методы окон редактирования Edit и MaskEdit
- •Символы шаблона маски:
- •4. Основные свойства, события и методов многострочных окон редактирования Memo и Richedit
- •Общие свойства окон редактирования:
- •5. Основные свойства, события и методы компонентов выбора из списков — ListBox, CheckListBox и ComboBox
- •6. Основные свойства, события и методы таблицы строк — компонент StringGrid
- •Лекция №12 Тема: Кнопки, индикаторы, управляющие элементы
- •1. Классификация компонентов кнопок, индикаторов и управляющих эелементов
- •2. Основные свойства, события и методы управляющих кнопок Button и BitBtn
- •3. Основные события и свойства кнопки с фиксацией SpeedButton
- •4. Основные свойства и события группы радиокнопок — компоненты RadioGroup, RadioButton и GroupBox
- •5. Основные свойства и события индикаторов CheckBox и CheckListBox
- •6. Основные свойства и события ползункиов и полос прокруток — компоненты TrackBar и ScrollBar
- •7. Основные свойства и события компонента Timer
- •Лекция №13 Тема: Компоненты меню
- •1. Основные свойства, события и методы главного меню — компонент MainMenu
- •2. Основные свойства, события и методы контекстного всплывающего меню — компонент PopupMenu
- •3. Горячие клавиши — компонент HotKey
- •Лекция №14 Тема: Системные диалоги
- •1. Общая характеристика компонентов — диалогов
- •2. Диалоги открытия и сохранения файлов — компоненты OpenDialog, SaveDialog, OpenPictureDialog, SavePictureDialog
- •3. Фрагменты диалогов — компоненты DriveComboBox, DirectoryListBox, FilterComboBox, FileListBox и DirectoryOutline
- •4. Диалог выбора шрифта — компонент FontDialog
- •5. Диалог выбора цвета — компонент ColorDialog
- •6. Диалоги печати и установки принтера — компоненты PrintDialog и PrinterSetupDialog
- •Лекция №15 Тема: Ввод и отображение чисел, дат и времени
- •1. Классификация компонентов ввода и отображения чисел, дат и времени
- •2. Основные свойства, события и методы компонентов UpDown и SpinEdit
- •3. Основные свойства, события и методы компонента DateTimePicker
- •4. Основные свойства, события и методы компонентов MonthCalendar и Calendar
- •5. Компонент f1Book
- •Лекция №16 Тема: Компоненты отображения заголовков и иерархических данных
- •1. Классификация компонентов отображения заголовков и иерархических данных
- •2. Основные свойства, события и методы компонентов Header HeaderControl
- •3. Основные свойства, события и методы компонентов TreeView и OutLine
- •4.Основные свойства, события и методы компонента ListView
- •Лекция №17 Тема: Отображение графической и мультимедиа информации
- •1. Классификация компонентов отображения графической информации
- •2. Основные свойства, события и методы таблиц изображений — компоненты DrawGrid и StringGrid
- •3. Основные свойства, события и методы компонента Shape
- •4. Основные свойства, события и методы компонента Chart
- •5. Основные свойства, события и методы компонентов страницы ActiveX — fiBook, Chartfx, Graph
- •6. Классификация компонентов отображения мультимедиа - компоненты Animate, MediaPlayer, ProgressBar, Gauge
- •7. Основные свойства, события и методы компонентов ProgressBar и Gauge
- •Лекция №18 Тема: Панели и компоненты внешнего оформления
- •1. Общая характеристика компонентов внешнего оформления
- •2. Панели общего назначения — компоненты Panel, GroupBox, Bevel, ScrollBox, Splitter
- •Некоторые свойства компонента Panel:
- •3. Многостраничные панели — компоненты TabControl, PageControl, TabSet, TabbedNoteBook, NoteBook
- •4. Инструментальные панели — компоненты ToolBar и PageScroller
- •5. Перестраиваемые панели - компоненты ControlBar и CoolBar
- •6. Полоса состояния StatusBar
- •7. Фреймы
- •Лекция №19 Тема: Компоненты организации управления приложением
- •1. Характеристика компонентов организации управления приложением
- •2. Диспетчеризация событий — компоненты, связанные с ActionList
- •3. Список изображений — компонент ImageList
- •4. Приложение — компонент ApplicationEvents и объект Application
- •Лекция № 20
- •1.8. Изменение размеров панелей при использовании выравнивания
- •1. Требования к интерфейсу пользователя приложений для Windows
- •1.1. Цветовое решение приложения
- •1.2. Шрифты текстов
- •1.3. Требования к меню
- •1.4. Компоновка форм
- •1.5. Последовательность фокусировки элементов
- •1.6. Подсказки и контекстно-зависимые справки
- •1.7. Проектирование окон с изменяемыми размерами
- •1.8. Изменение размеров панелей при использовании выравнивания
- •1.9. Изменение местоположения и размеров компонентов
- •1.10. Панели с перестраиваемыми границами
- •1.11. Ограничение пределов изменения размеров окон и компонентов
- •Контрольные вопросы:
- •Рекомендуемая литература: 1.1. Лекция № 21 Тема: Перетаскивание объектов
- •1. Перетаскивание информации об объектах — технология Drag&Drop
- •2. Перетаскивание и встраивание объектов — Drag&Doc. Плавающие окна
- •Лекция№22 Тема: Печать и разработка отчетов
- •1. Печать с помощью функций файлового ввода/вывода
- •2. Методы компонентов, обеспечивающие печать
- •3. Печать файлов средствами стандартных приложений Windows с помощью функции ShellExecute и обращения к серверам сом
- •4. Печать с помощью объекта Printer
- •5. Подготовка и печать отчетов с помощью QuickReport
- •5.1.Быстрый отчет (QuickRep)
- •Специфичные свойства
- •5.2. Специфичные методы
- •5.3.Специфичные события
- •5.4. Компоненты отчета
- •5.5. Основные свойства компонентов
- •Самостоятельная работа: Сформировать составной отчет.
- •Лекция № 23 Тема: Графика План:
- •2. Форматы графических файлов
- •3. Классы для хранения графических объектов tPicture, tBitMap, Tlcon и tMetafile
- •4. Редактор Изображений Image Editor
- •4.1. Создание файла изображения
- •4.2. Работа с файлами ресурсов
- •4.2.1.Создание файла ресурсов
- •4.2.2.Подключение файла ресурсов
- •5. Графические возможности Delphi
- •5.1. Холст
- •5.2. Карандаш и кисть
- •Карандаш
- •5.3. Вывод текста
- •5.4. Методы вычерчивания графических примитивов
- •5.4.1. Линия
- •5.4.2 Ломаная линия
- •5.4.3 Окружность и эллипс
- •5.4.4 Дуга
- •5.4.5 Прямоугольник
- •5.4.6 Многоугольник
- •5.4.7 Сектор
- •5.4.8 Точка
- •Самостоятельная работа: На поверхности диалогового окна, в точке нажатия левой кнопки мыши вычертить контур пятиконечной звезды.
- •Лекция № 24 Тема: Мультимедиа и анимация План:
- •1.1.2 Процедуры воспроизведения звуков Веер, MessageBeep и PlaySound
- •1.1.3. Универсальный проигрыватель MediaPlayer
- •1.1.4 Воспроизведение немых видео клипов — компонент Animate
- •2. Мультипликация
- •2.1. Метод базовой точки
- •3. Создание анимации
- •Лекция № 25 Тема: Взаимодействие приложения с внешними программами
- •2. Управление окнами внешних программ
- •1.1. Запуск внешней программы функцией WinExec
- •2. Управление окнами внешних программ
- •2.1. Определение дескриптора окна приложения
- •2.2. Некоторые функции api Windows для управления окнами
- •3. Создание динамически подключаемых библиотек (dll)
- •Лекция№26 Тема: Сообщения Windows и их обработка
- •2. Посылка сообщений
- •3. Обработка сообщений
- •4. Определение собственных сообщений
- •1. Сообщения Windows
- •2. Посылка сообщений
- •2.1. Функция SendMessage
- •2.2. Функция PostMessage
- •3. Обработка сообщений
- •4. Определение собственных сообщений
- •Лекция№27
- •1. Внедрение объектов
- •2. Технология связывания и внедрения объектов (ole)
- •3. Многопоточные приложения
- •4. Технология применения объектов com, dcom
- •Лекция №28 Тема: Динамический обмен данными — dde
- •1. Общие сведения
- •2. Установление контакта с сервером
- •3. Обмен данными между клиентом и сервером
- •3.1. Построение приложения-сервера
- •3.2. Построение приложения-клиента
- •4. Запрос данных сервера
- •5. Постоянное отслеживание информации на сервере
- •6. Передача информации от клиента к серверу
- •Лекция №29 Тема: Разработка собственных компонентов
- •1. Создание новых компонентов
- •2.Создание и установка ActiveX-элементов
- •3. Создание и установка пакетов
- •4. Использование пакетов
- •Лекция №30 Тема: Создание справочной системы. Разработка тестовых файлов
- •1. Этапы разработки
- •2. Планирование системы справок
- •3. Создание текстовых файлов
- •3.1. Задание идентифицирующей строки и организация перекрестных ссылок
- •3.2. Задание названия раздела
- •3.3. Определение ключевых слов
- •3.4. Определение условий компиляции
- •3.5. Указание порядка просмотра связанных разделов
- •3.6. Вставка графики
- •3.7. Выполнение макрокоманд
- •3.8. Отображение текста раздела в дополнительном окне
- •Лекция №31 Тема: Разработка проектного файла справочной системы
- •1. Разработка проектного файла
- •1.1. Секция options
- •1.2. Секция files
- •1.3. Секция windows
- •1.4. Секция map
- •3. Компиляция, тестирование и связывание Help-файла с программой
- •4. Макрокоманды WinHelp
- •Рекомендуемая литература
Лекция №13 Тема: Компоненты меню
План:
Основные свойства, события и методы главного меню — компонент MainMenu
Основные свойства, события и методы контекстного всплывающего меню — компонент PopupMenu
Горячие клавиши — компонент HotKey
1. Основные свойства, события и методы главного меню — компонент MainMenu
В Delphi имеется два компонента, представляющие меню: MainMenu — главное меню, и PopupMenu — всплывающее меню. Оба компонента расположены на странице Standard. Эти компоненты имеют много общего.
Компонент MainMenu- это невизуальный компонент, т.е. место его размещения на форме в процессе проектирования не имеет никакого значения для пользователя — он все равно увидит не сам компонент, а только меню, сгенерированное им. (см. рис. 25)
рис. 25. Компонент MainMenu
Обычно на форму помещается один компонент MainMenu. В этом случае его имя автоматически заносится в свойство формы Menu. Но можно поместить на форму и несколько компонентов MainMenu с разными наборами разделов, соответствующими различным режимам работы приложения. В этом случае во время проектирования свойству Menu формы присваивается ссылка на один из этих компонентов. А в процессе выполнения в нужные моменты это свойство можно изменять, меняя соответственно состав главного меню приложения.
Основное свойство компонента — Items. Его заполнение производится с помощью Конструктора Меню, вызываемого двойным щелчком на компоненте MainMenu или нажатием кнопки с многоточием рядом со свойством Items в окне Инспектора Объектов. В результате откроется окно, при работе в конструкторе меню новые разделы можно вводить, помещая курсор в рамку из точек, обозначающую место расположения нового раздела. Если при этом раздел ввелся не на нужном вам месте, вы можете отбуксировать его мышью туда, куда вам надо. (см. рис. 26)
рис. 26. Конструктор меню
Другой путь ввода нового раздела — использование контекстного меню, всплывающего при щелчке правой кнопкой мыши. Если вы предварительно выделите какой-то раздел меню и выберите из контекстного меню команду Insert, то рамка нового раздела вставится перед ранее выделенным. Из контекстного меню вы можете также выполнить команду Create Submenu, позволяющую ввести подменю в выделенный раздел.
При выборе нового раздела вы увидите в Инспекторе Объектов множество свойств данного раздела. Дело в том, что каждый раздел меню, т.е. каждый элемент свойства Items, является объектом типа TMenuItem, обладающим своими свойствами, методами, событиями.
Свойство Caption обозначает надпись раздела. Заполнение этого свойства подчиняется тем же правилам, что и заполнение аналогичного свойства в кнопках, включая использование символа амперсанта для обозначения клавиш быстрого доступа. Если вы в качестве значения Caption очередного раздела введете символ минус «—», то вместо раздела в меню появится разделитель.
Свойство Name задает имя объекта, соответствующего разделу меню. Очень полезно давать этим объектам осмысленные имена, так как иначе вы скоро запутаетесь в ничего не говорящих именах типа N21. Куда понятнее имена типа MFile, MOpen, MSave и т.п.
Свойство Shortcut определяет клавиши быстрого доступа к разделу меню — «горячие» клавиши, с помощью которых пользователь, даже не заходя в меню, может в любой момент вызвать выполнение процедуры, связанной с данным разделом. Чтобы определить клавиши быстрого доступа, надо открыть выпадающий список свойства Shortcut в окне Инспектора Объектов и выбрать из него нужную комбинацию клавиш. Эта комбинация появится в строке раздела меню.
Свойство Default определяет, является ли данный раздел разделом по умолчанию своего подменю, т.е. разделом, выполняемым при двойном щелчке пользователя на родительском разделе. Подменю может содержать только один раздел по умолчанию, выделяемый жирным шрифтом.
Свойство Break используется для длинных меню, чтобы разбить список разделов на несколько столбцов. Возможные значение Break: mbNone — отсутствие разбиения меню (это значение принято по умолчанию), mbBarBreak и mbBreak — в меню вводится новый столбец разделов, отделенный от предыдущего полосой (mbBarBreak) или пробелами (mbBreak).
Свойство Checked, установленное в true, указывает, что в разделе меню будет отображаться маркер флажка, показывающий, что данный раздел выбран.
Правда, сам по себе этот маркер не изменяется и в обработчик события OnClick такого раздела надо вставлять оператор типа
MAutoSave.Checked:= not MAutoSave.Checked;
(в приведенном операторе подразумевается, что раздел меню назван MAutoSave).
Еще одним свойством, позволяющим вводить маркеры в разделы меню, является Radioltem. Это свойство, установленное в true, определяет, что данный раздел должен работать в режиме радиокнопки совместно с другими разделами, имеющими то же значение свойства Grouplndex. По умолчанию значение Grouplndex равно 0. Но можно задать его большим нуля и тогда, если имеется несколько разделов с одинаковым значением Grouplndex и с Radioltem = true, то в них могут появляться маркеры флажков, причем только в одном из них.
Для каждого раздела могут быть установлены во время проектирования или программно во время выполнения свойства Enabled (доступен) и Visible (видимый). Если установить Enabled = false, то раздел будет изображаться серой надписью и не будет реагировать на щелчок пользователя. Если же задать Visible = false, то раздел вообще не будет виден, а остальные разделы сомкнутся, заняв место невидимого. Свойства Enabled и Visible используются для того, чтобы изменять состав доступных пользователю разделов в зависимости от режима работы приложения.
Начиная с Delphi 4 предусмотрена возможность ввода в разделы меню изображений. За это ответственны свойства разделов Bitmap и Imagelndex. Первое из них позволяет непосредственно ввести изображение в раздел, выбрав его из указанного вами файла. Второе позволяет указать индекс изображения, хранящегося во внешнем компоненте ImageList. Указание на этот компонент вы можете задать в свойстве Images компонента MainMenu. Индексы начинаются с 0. Если вы укажете индекс -1 (значение по умолчанию), изображения не будет.
Мы рассмотрели все основные свойства объектов, соответствующих разделам меню. Основное событие раздела — OnClick, возникающее при щелчке пользователя на разделе или при нажатии «горячих» клавиш быстрого доступа.
Рассмотрим теперь вопросы объединения главных меню вторичных форм с меню главной формы. Речь идет о приложениях с несколькими формами, в которых и главная, и вспомогательные формы имеют свои главные меню — компоненты MainMenu. Конечно, пользователю неудобно работать одновременно с несколькими окнами, каждое из которых имеет свое меню. Обычно надо, чтобы эти меню сливались в одно меню главной формы.
Приложения с несколькими формами могут быть двух видов: приложения с интерфейсом множества документов — так называемые MDI приложения, и обычные приложения с главной и вспомогательными формами. Типичными примерами приложений MDI являются программы Word и Excel. В MDI приложениях меню дочерних форм всегда объединяются с меню родительской формы. А в приложениях с несколькими формами наличие или отсутствие объединение определяется свойством AutoMerge компонентов TMainMenu. Если требуется, чтобы меню вторичных форм объединялись с меню главной формы, то в каждой такой вторичной форме надо установить Auto Merge в true. При этом свойство AutoMerge главной формы должно оставаться в false.
Способ объединения меню определяется свойством разделов Grouplndex. По умолчанию все разделы меню имеют одинаковое значение Grouplndex, равное нулю. Если требуется объединение меню, то разделам надо задать неубывающие номера свойств Grouplndex. Тогда, если разделы встраиваемого меню имеют те же значения Grouplndex, что и какие-то разделы меню основной формы, то эти разделы заменяют соответствующие разделы основного меню. В противном случае разделы вспомогательного меню встраиваются между элементами основного меню в соответствии с номерами Grouplndex. Если встраиваемый раздел имеет Grouplndex меньший, чем любой из разделов основного меню, то разделы встраиваются в начало.
Если в меню имеются разделы, работающие как радиокнопки, то нельзя забывать, что их взаимодействие также определяется свойствами Grouplndex.
Теперь остановимся на одном из вопросов, связанных с меню в упоминавшихся выше приложениях MDI. В них пользователь может открывать столько окон документов, сколько ему требуется. Обычно в подобных приложениях имеется меню Окно, которое содержит такие разделы, как Новое, Упорядочить и т.п. Последним идет обычно список открытых окон документов, в который заносятся названия открытых пользователем окон. Выбирая в этом списке, пользователь может переключаться между окнами документов.
Для включения в меню раздела списка открытых окон, надо в свойстве WindowMenu главной формы приложения MDI указать имя меню, в конец которого должен помещаться список. Указывается именно имя меню, а не разделов выпадающего списка.
Во второй главе приведены требования, предъявляемые к меню приложений для Windows. Одним из требований является стандартизация меню и их разделов. Этому помогает команда Save As Template... в контекстном меню, всплывающем при щелчке правой кнопкой мыши в окне Конструктора Меню. Эта команда вызывает диалог, в котором вы можете в верхнем окне указать описание (заголовок), под которым хотите сохранить ваше меню. Впоследствии в любом вашем новом приложении вы можете загрузить этот шаблон в меню, выбирая из всплывающего меню в окне Конструктора Меню команду Insert From Template.
