- •Сборник лекций по дисциплине «Объектно – ориентированное программирование»
- •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
- •Рекомендуемая литература
5. Постоянное отслеживание информации на сервере
Для постоянного наблюдения за сервером, осуществляя его оперативный мониторинг. При этом надо соединиться с сервером и, не закрывая этого соединения, установить свойство DDEItem компонента DdeClientltem равным имени того компонента DdeServerltem на сервере, информацию от которого требуется получать. До тех пор, пока соединение открыто, изменяющаяся информация с сервера постоянно будет поступать на компонент DdeClientltem клиента.
Чтобы осуществить это в вашем приложении-клиенте, в обработчик щелчка на кнопке SBLink с надписью Контакт вставьте следующий код:
if SBLink.Down then
begin
DdeClientltem1.DDEItem:='Items'+IntToStr(CBTopics.Itemlndex+l);
if not DdeClientConvl.SetLink(CBServer.Text, CBTopics.Text)
or not DdeClientConvl.OpenLink then
ShowMessage('Нет контакта с сервером "'+CBServer.Text+ '" по теме "'+CBTopics.Text+'"'); end
else begin
DdeClientConvl.CloseLink;
Editl.Text:='';
end;
Если кнопка SBLink нажата, то свойству DDEItem компонента DdeClientltem присваивается имя компонента Items1 или Items2 на сервере в зависимости от выбранной пользователем темы. Затем тем же способом, что и ранее, осуществляется связь с сервером. Эта связь разрывается только при отпускании кнопки SBLink. Запустите приложение, установите в списках сервер и тему, по которым хотите осуществить связь, и нажмите кнопку Контакт. В окне редактирования появится информация, переданная с сервера. Это все было и ранее. Теперь войдите в приложение-сервер, с которым вы связались, и попробуйте изменять информацию в его окне редактирования. Вы увидите, что все эти изменения немедленно отображаются в окне приложения-клиента. Таким образом между двумя приложениями установлен постоянный контакт. Он прервется только, когда вы отпустите в приложении-клиенте кнопку Контакт.
6. Передача информации от клиента к серверу
Имеется возможность передавать информацию и в обратном направлении — от клиента к серверу. Это может осуществляться методами PokeData, PokeDataLines, ExecuteMacro и ExecuteMacroLines компонента DdeClientConv.
Методы PokeData и PokeDataLines позволяют изменить информацию, хранящуюся в компоненте DdeClientltem на сервере. Их можно использовать, если компонент DdeClientConv уже связан с сервером. Методы определены следующим образом:
function PokeData(Item: string; Data: PChar): Boolean;
function PokeDataLines(Item: string; Data: TStrings): Boolean;
В обеих функциях параметр Item определяет имя компонента DdeServerltem на сервере, в который заносится информация, а параметр Data — тот текст, который должен заменить информацию на сервере. Различие между методами в том, что в PokeData в качестве параметра Data передается строка с нулевым символом в конце, а в функцию PokeDataLines — набор строк типа TStrings.
Функции возвращают true, если передача данных прошла успешно.
Реализовать подобное изменение информации на сервере в вашем приложении-клиенте можно, например, вставив в обработчик щелчка на кнопке PokeData оператор:
if not DdeClientConvl.PokeDataLines(DdeClientlteml.DDEItern, Memo1.Lines)
then
ShowMessage('Данные не переданы, нет контакта с сервером');
При записи этого оператора предполагается, что прежде, чем делать Щелчок на кнопке PokeData, пользователь войдет в контакт с сервером, нажав кнопку Контакт. В этом случае в свойстве DdeCIientltem1.DDEItem хранится имя компонента DdeServerltem на сервере, соответствующего теме, которая задана пользователем. В этот компонент DdeServerltem передается информация, которую пользователь задал в окне редактирования Memo1.
Запустите приложение, установите связь с сервером кнопкой Контакт, наберите строки в окне Memo1 и щелкните на кнопке PokeData. Вы увидите, что информация в окне Editl изменится. Это будет свидетельствовать об изменении информации на сервере. Вы можете в этом убедиться, прервав связь с сервером (отжав кнопку Контакт) и вновь установив связь кнопкой Контакт или Запрос.
Выполнение методов PokeData и PokeDataLines сопровождается событием OnPokeData того компонента DdeServerltem на сервере, в который передается информация. Вы можете использовать это событие в серверах, чтобы, например, отобразить пользователю полученную информацию. Для этого добавьте в серверы метку Label и в обработчик событий OnPokeData обоих компонентов DdeServerItem внесите оператор
Labell.Caption:='Получены данные: "'+ (Sender as TDdeServerltem) .Text+'"':
Этот оператор занесет в надпись метки информацию того компонента DdeServerltem, в который она поступила.
Другой способ передачи данных серверу — методы ExecuteMacro и ExecuteMacroLines компонента DdeClientConv. Эти методы не изменяют информацию на сервере, а просто передают на сервер некоторый текст — макрос. Сервер может анализировать переданный макрос и выполнять те или иные действия. Для этого анализа используется событие OnExecuteMacro компонента DdeServerConv сервера.
Методы ExecuteMacro и ExecuteMacroLines можно использовать, если компонент DdeClientConv уже связан с сервером. Методы определены следующим образом:
function ExecuteMacro(Cmd: PChar; WaitFlg: Boolean): Boolean;
function ExecuteMacroLines(Cmd: TStrings; WaitFlg: Boolean): Boolean;
Параметр Cmd содержит строку макроса (в ExecuteMacro) или набор макросов (в ExecuteMacroLines), которые должны передаваться на сервер. Параметр WaitFlg определяет, должен ли клиент ждать завершения выполнения сервером всех макросов. Если WaitFlg = true, то последующие вызовы методов ExecuteMacro, ExecuteMacroLines, PokeData, PokeDataLines и RequestData не будут успешными, пока сервер не обработает всех переданных ему макросов. Проверить, завершил ли сервер обработку предыдущих макросов, можно, обратившись к свойству WaitStat компонента DdeClientConv. Пока WaitStat = true, вызов методов ExecuteMacro, ExecuteMacroLines, PokeData, PokeDataLines и RequestData не имеет смысла, так как сервер занят, и эти методы все равно не будут выполнены.
Функции возвращают true при успешной передаче макросов серверу.
Обработчик события OnExecuteMacro компонента TDdeServerConv, которому передан макрос, имеет заголовок вида:
procedure ...(Sender: TObject; Msg: TStrings);
Параметр Msg содержит тексты переданных макросов.
Чтобы ввести передачу макросов в наш текстовый пример, сделайте следующее. В приложении-клиенте в обработчик щелчка на кнопке Выполнить вставьте код:
var Pch:array[0..20] of char; begin
StrPCopy(Pch,EMacro.Text);
if not DdeClientConvl.ExecuteMacro(Pch,false)
then ShowMessage('Макрос не выполнен, нет контакта с сервером'); end;
Первый оператор копирует строку, набранную пользователем в окне редактирования ЕМасго, в строку Pch с нулевым символом в конце. Следующий оператор передает макрос на сервер.
На серверах надо ввести обработчики событий OnExecuteMacro компонентов TDdeServerConv. Давайте в нашем текстовом примере просто ограничимся отображением переданного макроса в надписи метки Label 1. Тогда обработчик события OnExecuteMacro обоих компонентов TDdeServerConv сервера может иметь вид:
procedure TFServer.TopiclExecuteMacro(Sender: TObject; Msg: TStrings);
begin
if (Msg.Count = 0) then
ShowMessage(Application.Exename+': Макрос не получен') else
Labell.Caption:='Получен макрос "'+Msg.Strings[0] + '"';
end;
Теперь запустите вне Delphi ваши серверы, запустите на выполнение приложение-клиент и проверьте его работу по передаче макросов и во всех остальных режимах.
Контрольные вопросы:
Для чего предназначен динамический обмен данными?
Какие функции выполняет динамический обмен данными?
Перечислите этапы создания приложения-сервера.
Перечислите этапы создания приложения-клиента.
Рекомендуемая литература: 1.1, 1.7, 1.10.
