Информатика21-22. Методические указания по курсу Информатика Пятигорск 2020 Лабораторная работа 1
Скачать 4.27 Mb.
|
Лабораторная работа № 6.Тема: Создание интерфейса программы. Диалоговые компоненты. Цель: Текстовое поле RichBox. Диалоги OpenDialog, SaveDialog, FontDialog, PrintDialog. Использование текстового и контекстного меню Теоретическая часть. Компонент Rich Edit представляет собой многострочное редактируемое текстовое поле, работающее с форматом RTF (Rich Text Format - расширенный текстовый формат). Rich Text Format (RTF) - тип файлов, используемый для переноса форматированных текстовых документов между приложениями, в том числе работающими на различных платформах, таких как IBM и «Макинтош». Это формат файлов, который распознают большинство программ обработки текстов. Применяется, если документ, созданный в одной программе, нужно прочесть в другой программе обработки текста или в текстовым редакторе Microsoft Word любой версии. Текст в формате RTF при просмотре его в стандартном текстовом редакторе Блокнот, который не работает с форматированием в тексте, а использует только символы из стандартного набора ASCII-кодов (ANSI-кодов), будет отображаться в виде кодированного текста. Delphi позволяет использовать текстовое поле RichEdit для работы с текстом практически любой длины. На его основе можно создать приложения для обработки текстовой информации - простейший текстовый редактор.
Диалоговые компоненты. В состав Windows входит ряд типовых диалоговых окон, таких как окно выбора загружаемого файла, выбора шрифта, настройки принтера и т. д. В Delphi реализованы классы, объекты которых дают программисту удобные способы создания и использования таких окон. Соответствующие компоненты расположены в палитре компонентов Dialog. Работа со стандартными диалоговыми окнами осуществляется в три этапа. Вначале на форму помещается соответствующий компонент и осуществляется настройка его свойств (следует заметить, что собственно компонент не виден в момент работы программы, видно лишь создаваемое им стандартное окно). Настройка свойств может проходить как на этапе конструирования, так и в ходе прогона программы. На втором этапе осуществляется вызов стандартного для классов диалоговых окон метода Execute, который создает и показывает на экране диалоговое окно. Вызов этого метода обычно располагается внутри обработчика какого-либо события. Например, обработчик выбора в меню команды Открыть файл может вызвать метод Execute компонента TOpenDialog, обработчик щелчка на кнопке Сохранить панели инструментов может вызвать такой же метод компонента TSaveDialog и т. д. Только после обращения к методу Execute на экране появляется соответствующее диалоговое окно. Это окно является модальным, поэтому сразу после обращения к методу Execute дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не закроет окно. Поскольку Execute — логическая функция, она возвращает в программу значение True, если результат диалога с пользователем был успешным. Проанализировав результат вызова метода Execute, программа может выполнить третий этап — использовать введенные с помощью диалогового окна данные — имя файла, параметры принтера, выбранный шрифт и т. д. TOpenDialog и TSaveDialog — окна открытия и сохранения файлов Компоненты TOpenDialog и TSaveDialog имеют идентичные свойства и, поэтому рассмотрим их вместе. Свойство FileName содержит путь поиска и выбранный файл при успешном завершении диалога с пользователем. Программа может применять это свойство для доступа к файлу с целью читать из него данные (TOpenDialog) или записывать в него (TSaveDialog). Пользователь может ввести произвольное имя и, следовательно, указать несуществующий файл. Для записи это не имеет значения, но при чтении отсутствие файла может привести к краху программы. Чтобы избежать этого, можно проверить существование файла глобальной функцией FileExists, или использовать механизм обработки исключительных ситуаций. Свойство Filter используется для фильтрации (отбора) файлов, показываемых в диалоговом окне. Это свойство можно устанавливать с помощью специального редактора на этапе конструирования формы или программно. Для доступа к редактору необходимо использовать свойство Filter окна инспектора объектов. При программном вводе фильтры задаются одной длинной строкой, в которой символы вертикальной черты | служат для разделения фильтров, а также для отделения описания фильтруемых файлов от соответствующей маски выбора. Например, следующий оператор задает две маски для отбора файлов с расширениями PAS и ТХТ: OpenDialogl.Filter := 'Текстовые файлы |*.txt| Файлы Паскаля | *.pas'; Установить начальный каталог позволяет свойство InitialDir. Например: OpenDialogl.InitialDir := 'c:\program files\borland\delphi6\source TFontDialog — окно выбора параметров шрифта Основное свойство диалога TFontDialog - Font. Оно имеет атрибуты те же, что и атрибуты выделенного фрагмента текста для поля RichEdit: Color - цвет текста; Name - тип шрифта (гарнитура); Style - стиль (обычный, полужирный, курсив, подчёркнутый); Size - размер шрифта. Это обстоятельство позволяет программно задавать параметры шрифта для выделенного текста выбором из диалогового окна FontDialog. Диалог TPrintDialog. Позволяет обращаться к стандартному диалоговому окну для выбора параметров печати. Для обращения из программы для этого используется метод Excecute(). Компонент TMainMenu (Главное меню) позволяет создавать главное меню формы. Для создания структуры меню на компоненте, добавленном в форму, щёлкнуть правой кнопкой мыши и выбрать команду Menu Designer. В редакторе структуры меню можно добавлять пункты меню, вложенные в них подменю и команды. Каждый пункт меню аналогичен кнопкам и для каждого пункта меню в дальнейшем необходимо дописать программный код, выполняемый в программе по щелчку на выбранном пункте. Главное меню является общим для всех компонентов формы. Для каждого компонента формы можно использовать контекстное (динамическое, всплывающее, системное) меню, вызываемое щелчком правой кнопки мыши на компоненте. Компонент TPopupMenu позволяет создавать пункты меню так же как и для главного меню. Практическая часть. Ход работы. Создать новый проект. Для окна проекта задать следующие свойства: Размер формы использовать произвольный. Размеры формы могут и должны меняться по ходу выполнения программы. Заголовок формы - Лабораторная работа № 6. Текстовый редактор. 3. С использованием компонентов сконструировать интерфейс программы. В форму необходимо добавить следующие компоненты: Текстовое поле RichEdit. Размер этого компонента должен быть настроен не в конструкторе, а программно. Диалоговые компоненты OpenDialog, SaveDialog, PrintDialog, FontDialog. Компоненты MainMenu и PopupMenu 4. Для задания полю RichEdit соответствующих размеров относительно размеров формы при прогоне программы необходимо использовать событие OnActivate. В созданной процедуре для компонента RichEdit необходимо задать следующие параметры: Положение левого верхнего угла поля RichEdit относительно формы. Это можно сделать с использованием следующих команд: RichEditLLeft := 5; RichEditLTop := 25; Данные координаты задаются относительно левого верхнего угла формы. Для задания положения правого нижнего угла поля RichEdit удобнее всего использовать не абсолютный размер, а относительный размер, который будет автоматически затем меняться при изменении размера формы. Это можно сделать с использованием следующих команд: RichEditLWidth := Fornu.Width - 18; RichEditLHeight := FormLHeight - 65; Для того, чтобы при изменении размера формы при выполнении программы размер поля RichEdit также менялся по той же закономерности, не обязательно дублировать предыдущие четыре команды в другой процедуре. Событие, возникающее при изменении размера формы при прогоне программы, OnResize может использовать написанный уже программный код в предыдущей процедуре. Для этого каждого пункта меню необходимо будет написать соответствующую процедуру. Для создания процедуры необходимо компонент меню с нужной командой выбирать в дереве объектов. Каждый пункт меню обозначен именем вида: N1, N2 и т.д. Например, процедура для открытия файла может иметь следующий вид: //Процедура открытия текстового файла //Задаём фильтр в окне проводника для файлов с типами txt и rtf Form1.OpenDialog1.Filter := 'Текстовые файлы (*.txt)|*.txt| Форматированный текст (*.rtf)|*.rtf; //открываем диалоговое окно для открытия файлов Form1.OpenDialog1.Execute(); //Загружаем в поле RichEdit1 файл с именем, выбранным в окне проводника Form1.RichEdit1.Lines.LoadFromFile(Form1.OpenDialog1.FileName); Процедура сохранения файла в простейшем виде может иметь следующий вид: //Процедура сохранения файла в формате RTF Form1.SaveDialog1.Execute(); RichEdit1.Lines.SaveToFile(SaveDialog1.FileName+'.rtf'); В данном примере для задания файлу определённого обозначения типа файла использовано текстовое выражение, которое будет автоматически добавляться к имени файла, введённого пользователем при сохранении в поле Имя файла. Тип файла .rtf будет по умолчанию добавлен к имени любого сохраняемого файла. Для изменения параметров шрифта выделенного текста должно использоваться диалоговое окно Шрифт (компонент FontDialog). Один из вариантов программного кода может иметь вид: //Процедура изменения параметров шрифта Form1.FontDialog1.Execute(); Form1.RichEdit1.SelAttributes.Color := Form1.FontDialog1.Font.Color; Form1.RichEdit1.SelAttributes.Name := Form1.FontDialog1.Font.Name; Form1.RichEdit1.SelAttributes.Style := Form1.FontDialog1.Font.Style; Form1.RichEdit1.SelAttributes.Size := Form1.FontDialog1.Font.Size; 6. Контекстное меню - компонент PopupMenu в данном случае будет использовано только для компонента RichEdit. Для связывания этого меню с компонентом RichEdit необходимо в свойствах компонента RichEdit (или в дальнейшем для любого другого компонента при необходимости может быть создано своё контекстное меню) во вкладке Events в событии PopupMenu выбрать имя того, которое создано для данного компонента. Команды, необходимые для данного меню создаются в редакторе меню аналогично главному меню. Необходимо в это всплывающее меню включить следующие команды: Шрифт Копировать Вырезать Вставить Удалить выделение Удалить всё Так как по содержанию процедуры для этих команд абсолютно совпадают с процедурами соответствующих команд из текстового (главного) меню, то для того, чтобы исключить дублирование программного кода можно для каждой из этих команд компонента PopupMenu в свойствах объекта во вкладке Events в событии OnClick выбрать из списка соответствующую процедуру. 7. Итогом должна быть работающая программа, с помощью которой можно отредактировать текст, задать параметры шрифта для отдельно выделяемых фрагментов, сохранить в файле на диске. Для выделенного текста команды форматирования, редактирования можно выполнять не только через текстовое меню, но и через контекстное меню. В Палитре компонентов Win32 имеется два элемента управления, обеспечивающих создание многостраничных блокнотов. Это компоненты TabControl и PageControl. Переключение между страницами осуществляется при помощи закладок. Закладки могут выглядеть как "настоящие" в бумажном блокноте, а могут быть похожи на стандартные кнопки Windows. Сама Палитра компонентов Delphi является примером использования такого элемента управления. Компонент TabControl отличается тем, что представляет собой как бы "виртуальный" блокнот. Это — единый объект с одной фактической страницей. При переключении закладок осуществляется вызов метода-обработчика события OnChange соответствующий код в котором может изменить набор видимых элементов управления и создать для пользователя иллюзию "переключения страниц". Компонент PageControl является контейнером для объектов TabSheet, соответствующих отдельным страницам блокнота. Страницы в нем могут нести каждая свой набор дочерних компонентов; их можно переключать уже во время разработки. Первый подход удобен, если на разных страницах у вас должны располагаться одни и те же компоненты, "начиненные" различными данными. Второй подход необходим, если у вас действительно разные страницы с различными наборами компонентов на них. Компонент PageControl используют для создания редакторов свойств и настроек программы, а также для разного рода мастеров (Wizards). Управление списком вкладок в компоненте TabControl выполняется с помощью свойства Tabs -редактора строк с именами вкладок. Управление списком вкладок в компоненте PageControl выполняется с помощью контекстного меню (правой кнопки мыши) на имени компонента в дереве компонентов или в конструкторе в самой формы на компоненте PageControl.
В практике разработки программ окна со вкладками используются весьма часто в диалоговых окнах для настройки параметров работы программ. Практическая часть. Ход работы. Создать новый проект. Для окна проекта задать следующие свойства: Размер формы: ширина - 650 пикселей, высота - 500 пикселей. Заголовок формы - Лабораторная работа № 7. Для предотвращения изменения размера окна указанные размеры задать в свойстве Constraints формы. 3. С использованием компонентов сконструировать интерфейс программы. В форму добавить два компонента: TabControl для создания окна с расчётами и PageControl для окна управления параметрами программных элементов. 4. В окне для расчётов арендной стоимости с четырьмя вкладками (компонент TabControl) разместить поля для отображения числовых значений - площади, стоимости аренды 1 кв.м. и общей стоимости аренды. Для выполнения расчётов при загрузке программы использовать событие OnChange компонента TabControl и эту процедуру продублировать в компоненте Form в событии OnActivate. Числовые значения полей Арендуемая площадь, Стоимость аренды 1 кв.м. задавать в зависимости от выбранной вкладки компонента TabControl. Выбранная вкладка определяется по свойству TabIndex. 5. Для управления интерфейсом использовать компонент PageControl с двумя вкладками. Во вкладке Интерфейс программы для выбора цвета формы можно использовать компонент ColorBox из палитры компонентов Additional. Для задания выбранного цвета из списка всей форме можно использовать свойство Selected списка ColorBox. Например, FormLColor := ColorBoxLSelected; Для выбора стиля окна использовать компонент RadioGroup. Свойство окна, задающее стиль окна -BorderStyle. Его значениями могут быть bsSizeable - Обычное и bsDialog - диалоговое. 6. Для управления свойствами самих компонентов TabControl и PageControl использовать два компонента RadioGroup. Для расположения вкладок расчётного окна использовать два варианта - внизу и вверху. Для управления стилем вкладок окна управления (компонент PageControl) использовать три варианта. |