- •Сборник лекций по дисциплине «Объектно – ориентированное программирование»
- •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
- •Рекомендуемая литература
1.3. Требования к меню
Практически любое приложение должно иметь меню, поскольку именно меню дает наиболее удобный доступ к функциям программы. Существует несколько различных типов меню: главное меню с выпадающими списками разделов, каскадные меню, в которых разделу первичного меню ставится в соответствие список подразделов, и всплывающие или контекстные меню, появляющиеся, если пользователь щелкает правой кнопкой мыши на каком-то компоненте.
В Delphi меню создаются компонентами MainMenu — главное меню, и Popup-Menu — всплывающее меню. Оба компонента расположены на странице Standard.
Основное требование к меню — их стандартизация. Это требование относится ко многим аспектам меню: месту размещения заголовков меню и их разделов, форме самих заголовков, клавишам быстрого доступа, организации каскадных меню. Цель стандартизации — облегчить пользователю работу с приложением. Надо, чтобы пользователю не приходилось думать, в каком меню и как ему надо открыть или сохранить файл, как ему получить справку, как работать с буфером обмена Clipboard и т.д. Для осуществления всех этих операций у пользователя, поработавшего хотя бы с несколькими приложениями Windows, вырабатывается стойкий автоматизм действий и недопустимо этот автоматизм ломать.
Начнем рассмотрение требований с размещения заголовков меню. Размещение общепринятых разделов должно быть стандартизированным. Все пользователи уже привыкли, что меню Файл размещается слева в полосе главного меню, раздел справки — справа, перед ним в приложениях MDI размещается меню Окно и т.д. Главное меню должно также снабжаться инструментальной линейкой, быстрые кнопки которой дублируют наиболее часто используемые команды меню. На этих кнопках надо использовать, по возможности, привычные картинки.
По возможности стандартным должно быть и расположение разделов в выпадающих меню.
Группы функционально связанных разделов отделяются в выпадающих меню разделителями.
Названия разделов меню должны быть привычными пользователю. Если вы не знаете, как назвать какой-то раздел, не изобретайте свое имя, а попытайтесь найти аналогичный раздел в какой-нибудь русифицированной программе Microsoft для Windows. Названия должны быть краткими и понятными. Не используйте фраз, да и вообще больше двух слов, поскольку это перегружает экран и замедляет выбор пользователя. Названия разделов должны начинаться с заглавной буквы. Применительно к английским названиям разделов существует требование, чтобы каждое слово тоже начиналось с заглавной буквы. Но применительно к русским названиям это правило не применяется.
Названия разделов меню, связанных с вызовом диалоговых окон, должны заканчиваться многоточием, показывающим пользователю, что при выборе этого раздела ему предстоит установить в диалоге еще какие-то параметры.
Разделы, к которым относятся каскадные, должны заканчиваться стрелкой, указывающей на наличие дочернего меню данного раздела. Delphi ставит эту стрелку автоматически, так что о ней вам думать не приходится. Вообще злоупотреблять каскадными меню не следует, так как пользователю не так просто до них добираться. Если в дочернем меню должно быть много разделов, например, связанных с какими-то опциями и настройками, то подумайте, не лучше ли вместо этого дочернего меню предусмотреть диалоговое окно, в котором эти опции будут более обозримыми и доступными. В каждом названии раздела должен быть выделен подчеркиванием символ, соответствующий клавише быстрого доступа к разделу (клавиша Alt плюс подчеркнутый символ). Хотя вряд ли такими клавишами часто пользуются, но традиция указания таких клавиш незыблема.
Многим разделам могут быть поставлены в соответствие «горячие» клавиши, позволяющие обратиться к команде данного раздела, даже не заходя в меню. Комбинации таких «горячих» клавиш должны быть традиционными. Например, команды вырезания, копирования и вставки фрагментов текста практически всегда имеют «горячие» клавиши Ctrl-X, Ctrl-C и Ctrl-V соответственно. Заданные сочетания клавиш отображаются в заголовках соответствующих разделов меню.
Начиная с Delphi 4 предусмотрена возможность включать в меню пиктограммы, соответствующие некоторым разделам. Это не входит в обязательные требования к меню и использование пиктограмм — дело вкуса.
Некоторые разделы меню, соответствующие выбору каких-то настроек, могут содержать индикаторы, показывающие, выбран или нет данный раздел, и могут содержать радиокнопки.
Не все разделы меню имеют смысл в любой момент работы пользователя с приложением. Например, если в приложении не открыт ни один документ, то бессмысленно выполнять команды редактирования в меню Правка. Если в тексте документа ничего не изменялось, то бессмысленным является раздел этого меню Отменить, отменяющий последнюю команду редактирования. Такие меню и отдельные разделы должны делаться временно недоступными или невидимыми. Это осуществляется заданием значения false свойствам раздела Enabled или Visible соответственно. Различие между недоступными и невидимыми разделами в том, что недоступный раздел виден в меню, но отображается серым цветом, а невидимый раздел просто исчезает из меню, причем нижележащие разделы смыкаются, занимая его место. Выбор того или иного варианта — дело вкуса и удобства работы пользователя. Вероятно, целиком меню лучше делать невидимыми, а отдельные разделы — недоступными. Например, пока ни один документ не открыт, меню Правка можно сделать невидимым, чтобы он не отвлекал внимания пользователя. Раздел Отменить этого меню в соответствующих ситуациях лучше делать недоступным, чтобы пользователь видел, что такой раздел в меню есть и им можно будет воспользоваться в случае ошибки редактирования.
Вот и все основные требования к главному меню приложения. Проектирование меню — не очень быстрый процесс и обидно повторять его снова и снова для каждого нового приложения, тем более что требование стандартизации приводит к тому, что одни и те же разделы с одинаковыми свойствами кочуют из приложения в приложение. Поэтому можно рекомендовать один раз потратить время, создать меню, содержащее большинство разделов, которые могут вам понадобиться в различных приложениях, и сохранить это меню как шаблон.
Пример проектирования меню и инструментальной панели
1. Перенесите на форму компонент диспетчеризации действий. Применение этого компонента не обязательно. Но, привыкнув к работе с ним, вы увидите, что его применение экономит вам много времени и делает код более прозрачным и простым в сопровождении.
2. Перенесите на форму компонент ImageList — список изображений для разделов меню и быстрых кнопок инструментальной панели.
3. С помощью редактора списка изображений, вызываемого двойным щелчком на ImageList, заполните список изображениями, символизирующими основные команды будущего меню.
4. Перенесите на форму компоненты стандартных диалогов типа «Открыть файл» (компонент OpenFileDialog), «Сохранить файл как» (компонент SaveFileDialog) и др. Перенесите также другие компоненты, к которым будут относиться действия.
5. Компонент диспетчеризации действий ActionList свяжите со списком изображений, установив его свойство Images равным ImageList 1 — имени компонента ImageList.
6. Двойным щелчком на компоненте ActionList вызовите редактор действий и занесите в него все действия, соответствующие будущим разделам меню.
7. После занесения в список очередного действия выделите его в правом окне и на странице свойств окна Редактора Кода задайте его свойства. Прежде всего, задайте Name (имя) — желательно осмысленное, связанное с введенным действием. Только не задавайте имена, которые могут оказаться тождественными именам каких-то функций, методов и т.д.
Помимо главного меню в приложении обычно должны быть контекстные всплывающие меню отдельных компонентов, например, окон редактирования. Эти меню обычно дублируют команды главного меню, используемые при работе с данным компонентом. Всплывающие меню желательно не перегружать разделами, вводя в них только действительно часто используемые команды. Вы можете также задать свойства: Shortcut — быстрые клавиши (если они должны назначаться для данного действия), Hint — надписи на ярлычках подсказок и в строке состояний, HelpContext — идентификатор темы контекстной справки (если для данного действия предусмотрена справка), Imagelndex — индекс изображения в ImageList, соответствующего данному действию. Можете также, при необходимости, задать свойства Enabled — доступность, Checked — занесение индикатора выделения и др.
8. Для каждого действия на странице событий Инспектора Объектов определено событие OnExecute. В обработчике этого события вам надо описать операции, соответствующие данному действию. Например, для действия AExit (выход из программы) обработчик может иметь вид
procedure TForml.AExitExecute(Sender: TObject) ;
begin
Close;
end;
Обратите внимание, что заголовок процедуры (AExitExecute) получается осмысленным — он указывает на характер действия. Такое название процедуры, конечно, много понятнее, чем ButtonSCIick или NIClick — имена, получающиеся без использования компонента ActionList.
9. После завершения списка действий перенесите на форму компонент MainMenu — главное меню. Установите его свойство Images равным ImageListl — имени компонента ImageList. Вызовите двойным щелчком на MainMenu редактор меню. Вы можете не задавать для вводимых вами разделов меню никаких свойств. Достаточно, выделив очередную пунктирную рамку в редакторе меню, задать в Инспекторе Объектов для очередного раздела свойство Action. Для этого достаточно щелкнуть в строке правее этого свойства и из выпадающего списка, в котором имеются все введенные вами действия, выбрать нужное. Вы увидите, что при этом автоматически заполнятся все свойства данного раздела меню: появится надпись, изображение (если оно предусмотрено), тексты подсказок в свойстве Hint и т.д. На странице событий Инспектора Объектов вы увидите, что в событие OnClick (щелчок) уже занесена ссылка на ранее написанный вами для этого действия обработчик. Таким образом, применение компонента ActionList существенно упростило разработку меню.
10. Перенесите на форму компонент инструментальной панели ToolBar. Щелкая на нем правой кнопкой мыши, выбирайте команды New Button (новая кнопка) или New Separator (новый разделитель). Для каждой новой кнопки так же, как ранее для разделов меню, устанавливайте свойство Action. Все остальные свойства перенесутся в кнопку автоматически.
11. Если необходимо обеспечить в приложении контекстные всплывающие меню, то перенесите на форму один или несколько (по числу различных контекстных меню) компонентов PopupMenu. Свяжите их с компонентом ImageList, задав свойство Images. Далее, сделав двойной щелчок на PopupMenu, вы попадете в тот же редактор меню, что и в случае MainMenu. Вы можете проектировать всплывающее меню так же, как главное. Но, поскольку всплывающее меню обычно дублирует какие-то разделы уже сформированного главного меню, то можно обойтись копированием соответствующих разделов. Для этого, войдя в конструктор меню из компонента PopupMenu, щелкните правой кнопкой мыши и из всплывшего меню выберите команду Select Menu (выбрать меню). Вам будет предложено диалоговое окно, в котором вы можете перейти в главное меню. В нем вы можете выделить нужный вам раздел или разделы (при нажатой клавише Shift выделяются разделы в заданном диапазоне, при нажатой клавише Ctrl можно выделить совокупность разделов, не являющихся соседними). Затем выполните копирование их в буфер обмена, нажав клавиши Ctrl-C. После этого опять щелкните правой кнопкой мыши, выберите команду Select Menu и вернитесь в контекстное меню. Укажите курсором место, в которое хотите вставить скопированные разделы, и нажмите клавиши чтения из буфера обмена — Ctrl-V. Разделы меню вместе со всеми их свойствами будут скопированы в создаваемое вами контекстное меню.
12. Когда контекстное меню сформировано, для привязки его к необходимому компоненту выделите этот компонент на форме, и в инспекторе объектов задайте его свойство PopupMenu равным имени компонента соответствующего PopupMenu.
Вот в общих чертах последовательность операций при проектировании меню и инструментальной панели с использованием компонентов ActionList, ImageList, MainMenu, PopupMenu и ToolBar. Как видите, это не очень быстрый процесс и обидно повторять его снова и снова для каждого нового приложения, тем более что требование стандартизации приводит к тому, что одни и те же разделы с одинаковыми свойствами кочуют из приложения в приложение.
