- •Сборник лекций по дисциплине «Объектно – ориентированное программирование»
- •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
- •Рекомендуемая литература
Лекция №28 Тема: Динамический обмен данными — dde
План:
1. Общие сведения
2. Установление контакта с сервером
3. Обмен данными между клиентом и сервером
3.1. Построение приложения-сервера
3.2. Построение приложения-клиента
4. Запрос данных сервера
5. Постоянное отслеживание информации на сервере
6. Передача информации от клиента к серверу
1. Общие сведения
Динамический обмен данными (Dinamical Data Exchange — DDE) — это технология, появившаяся в Windows ранее описанного выше OLE, но сохраняющая свое значение и до сих пор, поскольку предоставляет удобный способ обмена данными между программами. В этом диалоге программ одна, инициирующая диалог, называется клиентом, а другая, отвечающая на сообщения клиента — сервером. Диалог ведется на заданную тему (topic). Данные, передаваемые от одной программы к другой, называются элементами данных (items). В диалоге могут также передаваться серверу некоторые команды — макросы (macros). Этих основных понятий: клиент, сервер, тема, элемент данных и макрос достаточно, чтобы строить приложения, основанные на DDE. Всю сложную задачу обработки в процессе диалога множества сообщений Windows берет на себя Delphi, инкапсулируя все необходимые процедуры в четырех компонентах, расположенных в библиотеке на странице System: DdeClientConv, DdeClientltem, DdeServerConv и DdeServerltem. Первые два из них организуют работу клиента, а два вторые — работу сервера.
Основным компонентом, организующим взаимодействие, является компонент клиента DdeClientConv. Соответствующий ему компонент сервера DdeServerConv играет пассивную роль, сообщая только тему, которую может поддерживать сервер. Компоненты DdeClientltem и DdeServerltem нужны только для обмена информацией о конкретных элементах данных.
Взаимодействие DDE может выполнять следующие операции:
• Передача клиенту данных от сервера по инициативе клиента
• Передача клиенту данных от сервера при их обновлении
• Передача данных от клиента к серверу
• Передача команд (макросов) от клиента к серверу
• Установка клиентом данных на сервере
В последующих разделах будут рассмотрены способы решения каждой из этих задач.
2. Установление контакта с сервером
Начнем рассмотрение с компонента DdeServerConv, который располагается на форме приложения-сервера. Его единственное свойство — имя Name. Это имя является именем темы. Его должен знать клиент при установлении контакта с сервером. Некоторые методы компонента DdeServerConv мы рассмотрим в следующей теме, а теперь обратимся к компоненту DdeClientConv, который располагается на форме приложения-клиента и обеспечивает установление и разрыв контакта с сервером.
Два свойства компонента DdeClientConv — DdeService и DdeTopic определяют имена сервера и темы, соответствующих намеченному контакту. Имя сервера — это имя приложения-сервера, а имя темы — имя одного из компонентов DdeServerConv, расположенных на сервере. В процессе проектирования эти свойства задавать не обязательно, поскольку они могут быть установлены во время выполнения методом SetLink. Этот метод описан следующим образом:
function SetLink(Service: string; Topic: string): Boolean;
Параметры метода Service и Topic устанавливают соответственно значения свойств DdeService и DdeTopic. Установить значения этих свойств во время выполнения прямым присваиванием невозможно.
Способ установления контакта с сервером во время выполнения зависит от значения свойства ConnectMode, определяющего режим соединения. Это свойство может иметь значение ddeManual — ручной или ddeAutomatic — автоматический. При автоматическом режиме методом SetLink не только задает значения DdeService и DdeTopic, но и устанавливает сам контакт. При ручном режиме метод SetLink после установки значений DdeService и DdeTopic очищает элементы от прошлой информации, но самого соединения не устанавливает. Контакт с сервером в этом случае должен устанавливаться методом OpenLink, не имеющим параметров.
Если сервер в момент попытки установить контакт запущен, то контакт устанавливается описанными выше методами. Если это не удается, то делается попытка запустить программу, путь и имя которой указаны в свойстве ServiceApplicatiоn. Если в этом свойстве ничего не указано или запуск не удался, то метод OpenLink возвращает false.
Закрыть контакт с сервером можно методом CloseLink. Этот метод разрывает связь с сервером и очищает значения свойств DdeService и DdeTopic.
Исходя из сказанного выше, наиболее простой способ установления связи вашего приложения с сервером (если приложение будет обмениваться информацией только с одним сервером) заключается в следующем. Во время проектирования надо установить требуемые значения свойств DdeService и DdeTopic, а затем задать свойство ConnectMode = ddeAutomatic. Если сервер в данный момент запущен или он доступен, то с сервером установится связь. Доступность в данном случае означает, что выполняемый файл сервера находится в том же каталоге, в котором находится ваше приложение, или в свойстве ServiceApplication указан выполняемый файл сервера с полным путем к нему и с указанием типа файла (расширения). В этом случае свойство ConnectMode сможет установиться в ddeAutomatic. В противном случае вам будет выдано предупреждение о невозможности контакта.
Если все прошло нормально, то в дальнейшем при выполнении приложения связь с сервером будет устанавливаться автоматически. Если в момент запуска приложения сервер уже запущен, контакт установится сразу. Если же сервер не запущен к моменту запуска вашего приложения, но его выполняемый файл доступен для приложения (в указанном выше смысле), то сервер автоматически запустится и с ним будет установлен контакт. В обоих случаях вам не надо будет заботиться о контакте, т.е. не надо будет применять методы SetLink или OpenLink.
Если указанные выше условия не выполнены, т.е. сервер не запущен ни заранее, ни в момент запуска вашего приложения, то даже, если он потом будет запущен, перед установлением контакта с ним вам потребуется применить метод SetLink. Дело в том, что в этих условиях установленные при проектировании значения свойств DdeService и DdeTopic стираются, а повторно установить их можно только методом SetLink. To же самое надо иметь в виду, если вы в своем приложении закрыли соединение с сервером методом CloseLink или установили связь с другим сервером. После этого контакт прервется и его надо восстанавливать методом SetLink.
Если свойство ConnectMode компонента установлено в ddeManual, но в процессе проектирования вы установили свойства DdeService и DdeTopic, то для установления контакта вам достаточно выполнить метод OpenLink. Если же DdeService и DdeTopic не установлены или в процессе работы приложения вы хотите переключаться на связь с другими серверами, то прежде, чем начать работать с сервером, надо выполнить метод SetLink, устанавливающий имена сервера и темы. Если при этом ConnectMode = ddeAutomatic, то автоматически устанавливается контакт с сервером. Если же ConnectMode = ddeManual, то для установления контакта после SetLink надо применить метод OpenLink.
Таким образом, правила установления контакта с сервером доступным или уже запущенным к моменту запуска приложения можно представить следующей таблицей.
Таблица 74.
Правила установления контакта
ConnectMode |
DdeService и DdeTopic |
Контакт
|
ddeAutomatic |
Установлены при проектировании Не установлены при проектировании, или изменены, или контакт был прерван
|
Автоматический
SetLink
|
ddeManual |
Установлены при проектировании Не установлены при проектировании, или изменены, или контакт был прерван |
OpenLink
SetLink OpenLink
|
Приведем несколько примеров. Пусть ваше приложение будет обмениваться информацией только с одним заранее известным сервером, и пусть вы хотите в приложении иметь кнопку (назовем ее BExchange), при щелчке на которой, вы хотите выполнить какие-то операторы обмена данными с сервером. Вы должны разместить на своем приложении компонент DdeClientConv (назовем его DdeCIientConvl) и эту кнопку.
Далее наиболее простой путь заключается в следующем. Вы устанавливаете в DdeClientConv1 требуемые значения свойств DdeService и DdeTopic, а затем задаете свойство ConnectMode равным ddeAutomatic. Тогда в обработчике события OnClick кнопки BExchange вам достаточно просто написать операторы обмена данными с сервером.
Если по каким-то причинам во время проектирования сервер вам не доступен, то, задав при проектировании требуемые значения свойств DdeService и DdeTopic, вы оставляете свойство ConnectMode, равным ddeManual. В этом случае, например, в обработчике события формы OnCreate вы можете поместить оператор
if not DdeClientConvl.OpenLink then
ShowMessage('”Нет контакта с сервером”’ + DdeClientConvl.DdeService + ‘”по теме”' + DdeClientConvl.DdeTopic +' ');
Этот оператор обеспечит контакт с сервером в момент запуска приложения или соответствующее сообщение об ошибке. Другой путь — поместить в обработчик события OnClick кнопки BExchange операторы:
DdeClientConvl.SetLink(sServer, sTopic);
if not DdeClientConvl.OpenLink then
ShowMessage('”Нет контакта с сервером “' + DdeClientConvl.DdeService +’”по теме”' + DdeClientConvi.DdeTopic +' ’);
<операторы обмена данными с сервером>
В этих операторах предполагается, что параметры sServer и sTopic содержат соответственно имя сервера и имя темы. Отметим, что в этом случае нельзя ограничиться только вторым оператором OpenLink. Дело в том, что в первый раз он сработает нормально. Но при последующих щелчках на кнопке Exchange он будет выдавать ошибки, поскольку метод OpenLink возвращает false не только в случае невозможности связаться с сервером, но и в случаях, когда контакт в данный момент уже установлен. Впрочем, это относится только к возвращаемой величине. Если сообщения об ошибках вас не интересуют, то вы можете существенно сократить приведенный код:
DdeClientConvl.OpenLink;
< операторы обмена данными с сервером >
Аналогичное приведенному ранее последовательное обращение к методам SetLink и OpenLink надо применять и в приложениях, работающих с несколькими разными серверами с помощью одного компонента DdeClientConv. Такое же обращение используется и в случае, если вы не устанавливали в процессе проектирования свойства DdeService и DdeTopic.
Все сказанное ранее относилось к установлению контакта с определенным сервером по определенной теме. Но имеется еще одна возможность — установление контакта с заранее неизвестным сервером, который поместил информацию о себе в буфер обмена Clipboard. Приложение-сервер, разработанное с помощью Delphi, может сделать это методом CopyToClipboard компонента DdeServerltem (об этом методе и компоненте будет подробнее рассказано в следующем разделе). Чтобы установить контакт со стороны клиента с сервером, поместившим информацию в буфер обмена, надо выполнить метод PasteLink компонента DdeClientConv. Например:
if (not DdeClientConvl.PasteLink) then
ShowMessage('В буфере обмена не обнаружено данных, доступных обработке.');
Если в буфере обмена есть соответствующие данные, то метод PasteLink занесет имена сервера и темы в свойства DdeService и DdeTopic и установит контакт с этим сервером. Таким образом, этот метод заменяет рассмотренные ранее методы SetLink и OpenLink, устанавливая контакт с заранее неизвестным сервером.
