- •Сборник лекций по дисциплине «Объектно – ориентированное программирование»
- •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
- •Рекомендуемая литература
Лекция №10 Тема: Формы
План:
1. Использование форм
2. Характеристики формы
3. Организация взаимодействия форм
4. Особенности модальных форм
5. Процедуры и функции, реализующие диалоги
1. Использование форм
Форма является важнейшим визуальным компонентом. Формы представляют собой видимые окна Windows и являются центральной частью практически любого приложения. Термины "форма" и "окно" являются синонимами и обозначают одно и то же.
Форма представляется компонентом Form класса TForm, на основе формы начинается конструирование приложения. На форме размещаются визуальные компоненты, образующие интерфейсную часть приложения, и системные (невизуальные) компоненты. Таким образом, форма представляет собой компонент Delphi, служащий контейнером для всех других компонентов. Т.о. создание нового приложения начинается с того, что Delphi автоматически предлагает пустое окно — форму Form. В принципе возможно создание и безоконного приложения, однако большинство приложений имеет видимое на экране окно, содержащее его интерфейсную часть.
Каждое приложение может иметь несколько форм, одна их которых является главной и отображается первой при запуске программы. При закрытии главного окна (формы) приложения прекращается работа всего приложения, при этом также закрываются все другие окна приложения. В начале работы над новым проектом Delphi по умолчанию делает главной первую форму (с первоначальным названием Form). В файле проекта (DPR) эта форма создается первой, например:
Application.Initialize;
Application.CreateForm(TForml, Formi);
Application.CreateForm(TForm2, Form2);
Application.Run;
Программно можно сделать главной любую форму приложения, указав вызов метода createForm создания этой формы первым. Например, для задания Form2 в качестве главной формы можно записать следующий код:
Application.Initialize;
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForml, Forml);
Application.Run;
При конструировании приложения более удобно указать главную форму в окне параметров проекта, вызываемом командой Project | Options (Проект | Параметры). Главная форма выбирается в раскрывающемся списке Main Form на странице Form, после этого Delphi автоматически вносит в файл проекта соответствующие изменения.
Форма может быть модальной и немодальной. Немодальная форма позволяет переключиться в другую форму приложения без своего закрытия. Модальная форма требует обязательного закрытия перед обращением к любой другой форме приложения.
2. Характеристики формы
Как и любой другой визуальный компонент, форма имеет свойства, методы и события, наиболее общие из которых рассмотрены в главе, посвященной интерфейсным элементам. Например, форма имеет такие свойства, как Caption и Color, событие onKeyPress. Кроме общих для всех визуальных компонентов. Форма имеет и специфические, определяемые ее особым значением, свойства, методы и события. Часть их характеризует форму как главный объект приложения, например, свойство Bordericons, другая часть присуща форме как контейнеру других компонентов, например, свойства AutoScroli и ActiveControl.
При добавлении новой формы в проект Delphi по умолчанию автоматически создает один экземпляр класса (Forml, Form2 и т. д.), внося соответствующие изменения в файл проекта, например
Application.CreateForm(TForml, Forml);
Управлять процессом автоматического создания форм можно, непосредственно редактируя файл проекта, что не рекомендуется делать неопытным программистам, или выполняя настройки в окне параметров проекта (список Autocreate forms на странице Form). Если форма переведена из этого списка в список доступных форм проекта (список Available forms), то оператор ее создания исключается из файла проекта, и программист в ходе выполнения приложения должен динамически создать экземпляр этой формы.
Для создания экземпляров форм служит метод Create. Конструктор Create создает экземпляр класса формы, сам класс формы обычно предварительно описывается при конструировании приложения, и соответственно для формы существуют файлы формы (DFM) и программного модуля (PAS).
Пример. Создание экземпляра формы.
procedure TForml.ButtonlClick(Sender: TObject);
begin
// Форма создается, однако на экране не отображается
Form2 := TForm2.Create(Application);
Form2.Caption := 'Новая форма';
end ;
Форма Form2 принадлежит объекту приложения и имеет заголовок Новая форма.
При создании и использовании формы происходят следующие события типа TNotifyEvent, указанные в порядке их возникновения:
OnCreate;
OnShow;
OnResize;
OnActivate;
OnPaint.
Событие OnCreate при создании формы возникает один раз, остальные события происходят каждый раз при отображении формы, при ее активизации и прорисовке соответственно.
В обработчик события OnCreate обычно включается код, устанавливающий начальные значения свойств формы, а также ее управляющих элементов, то есть выполняющий начальную инициализацию формы в дополнение к установленным на этапе разработки приложения параметрам. Кроме того, в обработчик включаются дополнительные операции, которые должны происходить однократно при создании формы, например, чтение фамилий сотрудников и загрузка их в список.
Пример. Процедура обработки события OnCreate формы Form2.
procedure TForm2.FormCreate(Sender :TObject);
begin
Form2.Caption := 'Пример формы';
ComboBox2.Items.LoadFromFile('list.txt') ;
Buttons.Enabled := false;
end;
При создании форма получает новый заголовок пример формы, в комбинированный список ComboBox2 загружаются данные из файла list.txt, а кнопка Buttons блокируется.
Из всех созданных форм Delphi при выполнении приложения автоматически устанавливает видимой главную форму, для этого свойству visible этой формы устанавливается значение True. Для остальных форм значение этого свойства по умолчанию равно False, и после запуска приложения другие формы первоначально на экране не отображаются. Программист после создания форм по мере необходимости сам должен обеспечивать их отображение и скрытие в процессе работы приложения, управляя свойством visible.
Даже если форма не видима, ее компонентами можно управлять, например, из других форм.
Другим способом управления видимостью форм на экране являются соответственно методы show и Hide. Процедура show отображает форму в немодальном режиме, при этом свойству visible устанавливается значение True, а сама форма переводится на передний план. Процедура Hide скрывает форму, устанавливая ее свойству visible значение False.
Если окно уже видимо, то вызов метода show переводит форму на передний план и передает ей фокус управления.
Пример. Отображение и скрытие форм.
procedure TFormi.btnShowFormsClick(Sender rTObject);
begin
Form2.Visible := true;
Form3.Show;
end;
procedure TFormi.btnHideFormsClick(Sender :TObject);
begin
Form2.Visible := false;
FormS.Hide;
end;
Нажатие кнопок btnShowForms и btnHideForms, расположенных на форме Form, приводит соответственно к отображению и скрытию форм (удалению с экрана) Form2 и Form3.
В момент отображения формы на экране, когда ее свойство visible принимает значение True, возникает событие onshow. Соответственно при скрытии формы, когда ее свойство visible принимает значение False, возникает Событие OnHide.
Каждый раз при получении фокуса ввода формой, например, при нажатии кнопки мыши в области формы, происходит ее активизация и возникает событие onActivate. При потере фокуса формой возникает событие OnDeActivate.
Событие OnPaint возникает при необходимости перерисовки формы, например, при активизации формы, если до этого часть ее была закрыта другими окнами.
Для закрытия формы используется метод close, который удаляет форму с экрана. Процедура close делает форму невидимой, не уничтожает созданный ее экземпляр, и форма может быть снова вызвана на экран, например, с помощью методов show или showModal.
В случае закрытия главной формы прекращается работа всего приложения.
Пример. Закрытие формы
procedure TForm2.btnCloseClick(Sender: TObject);
begin
Form2.Close;
end;
Кнопка btnclose закрывает форму Form2. Для этой кнопки полезно задать соответствующий заголовок (свойство caption), например, Закрыть.
Уничтожение формы можно выполнить с помощью метода Free, после чего работа с этой формой невозможна, и любая попытка обратиться к ней или ее компонентам вызовет исключительную ситуацию (ошибку). Необходимость уничтожения формы может возникнуть при оформлении заставок или при разработке больших приложений, требующих экономии оперативной памяти.
Пример. Удаление экземпляра формы.
procedure TForm3.btnDestroyClick(Sender: TObject};
begin
Form3.Free;
end;
Кнопка btnDestroy уничтожает форму Forms. Для этой кнопки полезно задать соответствующий заголовок, например, Удалить.
При закрытии и уничтожении формы происходят следующие события, указанные в порядке их возникновения:
OnCloseQuery;
OnClose;
OnDeActivate;
OnHide;
OnDestroy.
Событие ondoseQuery типа TdoseQueryEvent возникает в ответ на попытку закрытия формы. Обработчик события получает логическую переменную-признак candose, определяющую, может ли быть закрыта данная форма. По умолчанию эта переменная имеет значение True, и форму можно закрыть. Если установить параметру candose значение False, то форма остается открытой. Такую возможность можно использовать, например, для подтверждения закрытия окна или проверки, сохранена ли редактируемая информация на диске. Событие OnCloseQuery вызывается всегда, независимо от способа закрытия формы.
Пример. Процедура закрытия формы
procedure TForm2.FormCloseQuery(Sender: TObject; var Candose: Boolean);
begin
Candose := MessageDlg('Вы хотите закрыть форму?', mtConfirmation,
[mbYes, mbNo], 0) = mrYes;
end;
Здесь при закрытии формы Form2 выдается запрос на подтверждение операции, который представляет собой модальное диалоговое окно с текстом "Вы хотите закрыть форму?" и двумя кнопками — Yes и No. В случае подтверждения нажатием кнопки Yes форма закрывается, в противном случае закрытия формы не происходит.
Событие OnClose типа TCloseEvent возникает непосредственно перед закрытием формы. Обычно оно используется для изменения стандартного поведения формы при закрытии. Для этого обработчику события передается переменная Action типа TdoseAction, которая может принимать следующие значения:
caNone — форму Закрыть Нельзя;
caHide — форма делается невидимой;
caFree — форма уничтожается, а связанная с ней память освобождается;
caMinimize — окно формы минимизируется.
При закрытии окна методом close переменная Action по умолчанию получает значение caHide, и форма делается невидимой. При уничтожении формы, например, методом Destroy, переменная Action по умолчанию получает значение caFree, и форма уничтожается.
Когда закрывается главная форма приложения, все остальные окна закрываются без вызова события OnClose.
Пример. Процедура закрытия формы.
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Memo1.Modified then Action := caNone else Action := caHide;
end;
При закрытии формы Form2 проверяется признак модификации содержимого редактора Memoi. Если информация в Memoi была изменена, то форма не закрывается.
При каждом изменении размеров формы в процессе выполнения приложения возникает событие onResize типа TNotifyEvent. В обработчике этого события может размещаться код, например, выполняющий изменение положения и размеров управляющих элементов окна, не имеющих свойства Align.
Стиль формы определяется свойством Formstyle типа TFormStyle, принимающим следующие значения:
fsNormai — стандартный стиль, используемый для большинства окон, в том числе и диалоговых;
fsMDichild — дочерняя форма в многодокументном приложении;
fsMDiForm — родительская форма в многодокументном приложении;
fsStayOnTop — форма, которая после запуска всегда отображается поверх других окон. Обычно используется при выводе системной информации или информационной панели программы (заставки).
Каждая форма имеет ограничивающую рамку. Вид и поведение рамки определяет свойство Borderstyle типа TFormBorderstyie. Оно может принимать следующие значения:
bsDialog — диалоговая форма;
bssingie — форма с неизменяемыми размерами;
bsNone — форма не имеет видимой рамки и заголовка и не может изменять свои размеры. Часто используется для заставок;
bssizeabie — обычная форма с изменяемыми размерами (по умолчанию). Имеет строку заголовка и может содержать любой набор кнопок;
bsTooiwindow — форма панели инструментов;
bssizeiooiwin — форма панели инструментов с изменяемыми размерами.
Видимое отличие между диалоговой и обычной формой заключается в том, что диалоговая форма может содержать в своем заголовке только кнопки закрытия и справки. Кроме того, пользователь не может изменять размеры диалоговой формы.
Невозможность изменения размеров форм некоторых стилей относится только к пользователю — нельзя с помощью мыши передвинуть границу формы в ту или другую сторону. Программно при выполнении приложения для формы любого стиля можно устанавливать различные допустимые размеры окна, а также изменять их.
Пример. Изменение размеров формы.
procedure TForm2. btnResizeFormClick(Sender: TObject);
begin
Form2.Width := Form2.Width + 100;
end;
При нажатии на кнопку btnResizeForm ширина формы Form2 увеличивается на 100 пикселов, даже если для этой формы свойство Borderstyle имеет Значение, равное bsDialog, bsSingle ИЛИ bsNone.
Если установить диалоговый стиль формы, то она не становится модальной и позволяет пользователю переходить в другие окна приложения. Для запуска формы, в том числе и любой диалоговой, в модальном режиме следует использовать метод ShowModal. Таким образом, стиль определяет внешний вид формы, но не ее поведение.
В области заголовка могут отображаться 4 вида кнопок. Возможный набор кнопок определяет свойство Bordericons типа TBordericons, которое может принимать комбинации следующих значений:
biSystemMenu — окно содержит кнопки системного меню;
biMinimize — окно содержит кнопку минимизации (свертывания);
biMaximize — окно содержит кнопку максимизации (восстановления);
biHе1р — окно содержит кнопку справки, которая отображает вопросительный знак и вызывает контекстно-зависимую справку.
Системное меню представляет собой набор общих для всех окон Windows команд, например, Свернуть или Закрыть. При наличии у окна системного меню в области заголовка слева отображается пиктограмма приложения, при щелчке на которой и появляются команды этого меню, а в области заголовка справа имеется кнопка закрытия формы (рис. 4).
Различные значения свойства BorderIcons не являются независимыми друг от друга. Так, если отсутствует системное меню, то ни одна кнопка не отображается. Если имеются кнопки максимизации и минимизации, то не отображается кнопка справки. Возможность появления кнопок также зависит от стиля формы. Например, отображение кнопок максимизации и минимизации возможно только для обычной формы и формы панели инструментов с возможностью изменения размеров.
Рис. 4. Системное меню формы
Обычно стиль формы и набор кнопок заголовка задаются на этапе разработки приложения через Инспектор объектов. При этом на проектируемой форме всегда видны обычная рамка и три кнопки (минимизации, максимизации и закрытия формы), независимо от значения свойств FormStyle и Bordericons. Заданные стиль формы и набор кнопок становятся видимыми при выполнении программы.
Форма включает клиентскую и неклиентскую области. Неклиентская область занята рамкой, заголовком и строкой главного меню. В клиентской области обычно размещаются различные управляющие элементы, происходит вывод текста или отображение графики. При необходимости в клиентской области могут появляться полосы прокрутки. Аналогично тому, как свойства Width и Height определяют размеры всей формы, свойства Clientwidth и ClientHeight типа integer задают соответственно ширину и высоту в пикселах клиентской части формы.
Форма включает клиентскую и неклиентскую области. Неклиентская область занята рамкой, заголовком и строкой главного меню. В клиентской области обычно размещаются различные управляющие элементы, происходит вывод текста или отображение графики. При необходимости в клиентской области могут появляться полосы прокрутки. Аналогично тому, как свойства width и Height определяют размеры всей формы, свойства Clientwidth и ClientHeight типа integer задают соответственно ширину и высоту в пикселах клиентской части формы.
Пример. Вывод в заголовке формы информации о размерах ее клиентской области.
procedure TForml.FormCreate(Sender: TObject);
begin
Forml.Caption := 'Клиентская область — ' + IntToStr(Forml.ClientWidth) +' x '+ IntToStr(Forml.CiientHeight);
end;
Отображаемое формой меню задается свойством Menu типа TMainMenu. При разработке приложения размещение компонента MainMenu главного меню на форме вызывает автоматическое присвоение нужного значения (Menu:=MainMenui) свойству Menu формы, что отображается в Инспекторе объектов.
Каждая форма отображает в левой стороне области заголовка свою пиктограмму, определяемую свойством icon типа TIcon. Если форма не является главной в приложении, то эта пиктограмма отображается при минимизации формы. Для любой формы свойство icon можно задать с помощью Инспектора объектов или динамически (при выполнении приложения). Если пиктограмма не задана, то форма использует пиктограмму, указанную в свойстве icon объекта Application. Последняя выводится также при минимизации и отображении в панели задач Windows значка главной формы приложения.
Пример. Динамическая загрузка пиктограммы.
procedure TForml.FormCreate(Sender: TObject);
begin
Forml.Icon.LoadFromFile('с:\Picturel.ico');
end;
Здесь при создании формы Forml пиктограмма загружается из файла c:\Picturel.ico.
Размещение и размер формы при отображении определяет свойство Position типа TPosition. Свойство имеет следующие основные значения:
poDesigned — форма отображается в той позиции и с теми размерами, которые были установлены при ее конструировании (значение по умолчанию). Положение и размеры формы определяются свойствами Left, Tор, Width и Height. Если приложение запускается на мониторе с более низким разрешением, чем тот, на котором оно разрабатывалось, часть формы может выйти за пределы экрана;
poScreenCenter — форма выводится в центре экрана, ее высота и ширина (свойства Height и width) не изменяются;
poDefault — Windows автоматически определяет начальную позицию и размеры формы, при этом программист не имеет возможность контролировать эти параметры. В связи с отмеченным, это значение не допускается для форм многодокументных приложений;
poDefauitPosOnly — Windows определяет начальную позицию формы, ее размеры не изменяются;
poDefaultsizeOniy — Windows определяет начальные ширину и высоту формы и помещает форму в позицию, определенную при разработке.
Свойство Active типа Boolean позволяет определить активность формы. В любой момент времени активной может быть одна форма, при этом ее заголовок выделяется цветом, чаще всего синим. Если свойство Active имеет значение True, то форма активна (находится в фокусе ввода), если False — то неактивна. Это свойство относится ко времени выполнения и доступно для чтения. Если требуется активизировать форму программно,
Следует использовать свойство windowstate или метод Show (showmodal).
Свойство windowstate типа Twindowstate определяет состояние отображения формы и может принимать одно из трех значений:
wsNormli — обычное состояние (по умолчанию);
wsMinimized — минимизация;
wsMaximized — максимизация.
Пример. Управление состоянием формы.
procedure TForml.btnMiniFormClick(Sender: TObject);
begin
Form2.WindowState := wsMinimized;
end;
procedure TForml.btnNormalFormClick(Sender: TObject);
begin
Form2.WindowState := wsNormai;
end;
Кнопки btnMiniForm и btnNormaiForm на форме Formi соответственно минимизируют и восстанавливают нормальное состояние формы Form2. Форма, для которой изменяется состояние отображения на экране, предварительно должна быть создана методами createForm или create. Если форма не создана, то при работе с ней произойдет исключительная ситуация, несмотря на то, что переменная формы объявлена в модуле. Если форма создана, но не отображается на экране, то изменения ее состояния (свойство WindowState) вступают в силу, однако пользователь этого не видит до тех пор, пока форма не будет отображена на экране. Форма, как контейнер, содержит в себе другие управляющие элементы. Оконные элементы управления (потомки класса TwinControl) могут получать фокус ввода (фокус). Свойство ActiveControl типа TwinControl определяет, какой элемент на форме находится в фокусе управления. Для выбора элемента, находящегося в фокусе ввода (активного элемента), можно устанавливать этому свойству нужное значение в процессе выполнения программы, например:
Forml.ActiveControl := Edit2;
Эту же операцию выполняет метод setFocus, который устанавливает фокус ввода на оконный элемент управления, например:
Edit2.SetFocus;
В случае, когда размеры окна недостаточны для отображения всех содержащихся в форме интерфейсных компонентов, у формы могут появляться полосы прокрутки. Свойство AutoScroll типа Boolean определяет, появляются ли они автоматически. Если свойство AutoScroll имеет значение True (по умолчанию), то полосы прокрутки появляются и исчезают автоматически, и программист может не заботиться об этом. Необходимость в полосах прокрутки может возникнуть, если пользователь уменьшит размеры формы так, что не все элементы управления будут полностью видимы. В случае, когда программист установит свойству AutoScroll значение False, он сам должен решать проблему просмотра информации, управляя горизонтальной и вертикальной полосами прокрутки через свойства HorzscrollBar и VertScrollBar Типа TControlScrollBar формы.
Для программного управления полосами прокрутки можно использовать метод ScrollInView. Процедура ScrollInView (AControl: TControl) aвтомaтически изменяет позиции полос прокрутки так, чтобы заданный параметром AControl управляющий элемент стал виден в отображаемой области.
Свойство KeyPreview типа Boolean определяет, будет ли форма обрабатывать события клавиатуры, прежде чем их обработают элементы управления формы. Если свойство имеет значение False (по умолчанию), то клавиатурные события поступают к активному элементу управления (находящемуся в фокусе ввода). При установке свойству KeyPreview значения True форма получает сообщения о нажатии клавиш в первую очередь и может на них реагировать, что обычно используется для обработки комбинаций клавиш, независимо от активности управляющих элементов формы.
Форма не может обрабатывать нажатие клавиши <Таb> в связи с ее особым назначением.
Пример. Обработка нажатия клавиш.
// Не забудьте установить свойству KeyPreview значение True procedure TForml. FormKeyPress (Sender: TObject; var Key: Char);
begin
MessageDlg ('Нажата клавиша ' + Key, mtlnformation, [itibOK] , 0) ;
end;
Форма Formi обрабатывает нажатие алфавитно-цифровых клавиш, отображая введенный символ в диалоговом окне.
Пример. Приложение — цифровые часы.
Приложение похоже на часы, входящие в состав Windows, и состоит из одной формы (рис. 5), на которой размещены надпись Label, таймер Timer1 и главное меню MainMenu1. Таймер используется для отсчета времени, его интервал задан равным 1000, и событие onTimer генерируется один раз в секунду. В обработчике этого события текущее значение времени отображается в надписи Label1.
Рис. 5. Вид формы при разработке
Меню состоит из трех пунктов: Заголовок (mnuCaption), Исходный размер (mnuinitiaisize) и Закрыть (mnuciose). В скобках приведены значения свойства Name указанных пунктов меню.
Пункт Заголовок предназначен для включения и выключения отображения заголовка и меню формы. Первоначально этот пункт отмечен галочкой, а форма отображает заголовок и меню (рис. 6, слева). Если выбрать пункт Заголовок, то галочка пропадет, а заголовок и меню становятся невидимыми, изменяется также граница окна (рис. 6, справа). В этом случае пользователь не сможет изменять размеры окна и перемещать его по экрану. Для восстановления прежнего вида формы нужно дважды щелкнуть мышью на ней или на надписи Label1.
Рис. 6. Варианты формы
Ниже приводится код модуля udock формы Forml. Для наглядности многие свойства компонентов получают свои значения при создании формы в обработчике события onCreate. В действительности эти действия проще выполнить при разработке приложения с помощью Инспектора объектов.
unit uClock; interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus;
type
ТForml = class(TForm) Labell:
TLabel; Timerl: TTimer;
MainMenul: TMainMenu;
mnuMenu: TMenuItem;
mnuCaption: TMenuItem;
mnuInitialSize: TMenuItem;
mnuClose: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure TimerITimer(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure mnCloseClick(Sender: TObject);
procedure mnSizeOClick(Sender: TObject);
procedure mnCaptionClick(Sender: TObject);
procedure FormDblClick(Sender: TObject); end;
var
Forml: TForml;
implementation
{$R *.DFM}
// Установка начальных значений для формы и ее компонентов
procedure TForml.FormCreate(Sender: TObject);
begin
// Все эти действия можно выполнить через инспектор объектов
Application.Icon.LoadFromFile('Clock.ico') ;
Forml.FormStyle := fsStayOnTop;
Forml.Position := poScreenCenter;
Forml.BorderStyle := bsSizeable;
Forml.Borderlcons := [biSystemMenu];
Forml.Constraints.MinWidth := 100;
Forml.Constraints.MinHeight := 65;
mnuCaption.Checked := true;
Forml.ClientWidth := 100;
Forml.ClientHeight := 45;
Timerl.Interval := 1000;
TimerlTimer(Sender);
// Двойной щелчок на надписи вызывает команду //Заголовок меню
Labell.OnDblClick := mnuCaptionClick; end;
// Изменение размеров надписи Labell при изменении //размеров формы
procedure TForml.FormResize(Sender: TObject);
begin
if (Forml.ClientHeight / Forml.ClientWidth) < (Labell.Height / Labell.Width)
then Labell.Font.Height := Forml.ClientHeight - 2 else Labell.-Font.Height := Round((Forml.ClientWidth — 10) *
Labell.Height / Labell.Width);
Labell.Left := (Forml.ClientWidth - Labell.Width) div 2;
Labell.Top := (Forml.ClientHeight - Labell.Height) div 2;
end;
// Отображение текущего значения времени
procedure TForml.TimerlTimer(Sender: TObject);
begin
Labell.Caption := TimeToStr(Time);
end;
// Отображение и скрытие заголовка и меню формы
procedure TForml.mnuCaptionClick(Sender: TObject);
begin
if mnCaption.Checked then
begin
Forml.BorderStyle := bsNone;
Forml.Menu := nil;
end
else begin
Forml.BorderStyle := bsSizeable;
Forml.Menu := MainMenul;
end;
mnuCaption.Checked := not ronuCaption.Checked;
end;
// Восстановление прежнего размера формы
procedure TForml.mnuInitialSizeClick(Sender: TObject);
begin
Forml.ClientWidth := 100; Forml.ClientHeight := 45;
FormResize(Sender);
end;
// Закрытие формы и прекращение работы приложения
procedure TForml.mnuCloseClick(Sender: TObject);
begin
Close;
end;
// Активизация пункта меню "Заголовок"
// Необходима, когда меню невидимо и должно быть //отображено
procedure TForml.FormDblClick(Sender: TObject);
begin
mnuCaption.Click;
end;
end.
В случае, когда форма отображает заголовок и для нее заданы изменяемые границы, пользователь может изменять размеры формы. При этом соответственно изменяются размеры надписи Label1. Управление размерами надписи осуществляется косвенно, через значение свойства Height шрифта текста. Для предотвращения уменьшения формы до размеров, когда шрифт текста надписи будет слишком мелким и плохо различимым, через свойство constraints установлено ограничение на минимальную высоту и ширину формы. Следует учитывать, что это свойство ограничивает минимальные размеры формы, а не ее клиентской области. При выборе пункта меню Исходный размер форма восстанавливает размеры клиентской области, заданные при разработке.
Пиктограмма приложения и главной формы загружается из файла Clock.ico. В заголовке формы выводятся две кнопки — вызова системного меню и закрытия окна. Форма выводится в центре экрана и расположена поверх всех окон, для этого свойству Formstyle задано значение fsStayOnTop.
