Лекция 8. Разработка приложений со ... ного интерфейса – меню, текстовым редактором и диалоговыми окнами.

advertisement
Лекция 8. Разработка приложений со стандартными элементами оконного интерфейса – меню, текстовым редактором и диалоговыми окнами.
КОМПОНЕНТЫ МЕНЮ
Для создания меню в среде Builder служат компоненты MainMenu и PopupMenu
(располагаются на странице Standart). Компонент MainMenu определяет главное меню
формы. На форму может быть пемещено сколько угодно объектов этого класса, но
отображаться в полосе меню в верхней части формы будет только тот из них, который
указан в свойстве Menu формы. Компонент PopupMenu используется для создания
вспомогательных меню, появляющихся после нажатия правой кнопкой мыши. В отличие от главного меню, вспомогательное меню может быть создано для любого компонента, оно связывается с ним свойством PopupMenu компонента и раскрывается после
щелчка на компонент правой кнопки мыши.
После установки компонентов меню на форму необходимо создать его опции.
Для этого следует дважды щёлкнуть по нему мышью, после чего вызовется конструктор меню. Создание опций не вызывает проблем. После того, как создана первая из
них, необходимо в окне инспектора объектов ввести её текст (в строке Caption). Каждая
опция главного меню может раскрываться в список подопций.
После создания всех опций меню следует установить реакции на события их выбора (то есть OnClick). Для каждого объекта-опции определено свойство checked, если
оно принимает значение true, то рядом с опцией появляется галочка.
КОМПОНЕНТЫ РЕДАКТИРОВАНИЯ ТЕКСТА
Для редактирования текста в среде Builder существуют компоненты Edit и Memo
(страница Standart).
Компонент Edit представляет собой однострочный редактор текста. С его помощью можно вводить и отображать достаточно длинные строки. Основные свойства
компонента:
AutoSize – если true, высота компонента автоматически меняется при изменении
размера шрифта.
CharCase – Определяет автоматическое преобразование высоты букв: ecNormal –
нет преобразования, ecUpperCase – все буквы заглавные, ecLowerCase – все буквы
строчные.
MaxLength – определяет максимальную длину строки. Если имеет значение 0,
длина строки не ограничена.
ReadOnly – если содержит true текст не может изменяться.
SelText – содержит выделенный текст (в виде нуль-терминальной строки).
Text – содержит текст (в виде нуль-терминальной строки)..
Функция Clear() удаляет из компонента весь текст. Событие OnChange возникает после любого изменения текста.
Компонент Memo предназначен для ввода, отображения и редактирования достаточно длинного текста. Текст храниться в поле Lines (класса TStrings) и представляет собой набор строк.
Часть свойств компонента Memo аналогична соответствующим свойствам Edit.
Специфическое свойства Memo – это ScrollBars, которое определяет наличие полос
прокрутки в окне редактора: ssNone – нет полос, ssHorisontal – есть горизонтальная полоса, ssVertical – есть вертикальная полоса, ssBoth – есть обе.
Перечислим свойства класса TStrings, в объекте которого Lines содержится
имеющийся в Memo текст.
CommaText – содержит весь набор строк в виде единой строки с запятыми между ними.
Count – текущее количество строк в наборе.
Strings[i] – содержит строку с индексом i.
Text – содержит весь набор строк в виде единой строки с разделителями EOLN
между отдельными строками набора.
Методы класса TStrings:
Add(s) – добавляет строку s в набор данных и возвращает её индекс;
Clear() – очищает набор данных;
Delete(i) – удаляет строку с индексом i;
IndexOf(s) – для строки s возвращает её индекс или –1, если такой строки в
наборе нет.
Insert(i, s) – вставляет строку s в набор и присваивает ей индекс i;
LoadFromFile(s) – загружает набор строк из файла с именем s;
SaveToFile(s) – записывает набор строк в файл с именем s;
ДИАЛОГОВЫЕ ОКНА
В состав Windows входит ряд типовых диалоговых окон, таких как окно выбора
загружаемого файла, окно выбора шрифта, окно для настройки принтера и т.д. В среде
Builder разработаны компоненты, дающие удобные способы создания и использования
таких окон (страница Dialogs).
Работа со стандартными диалоговыми окнами осуществляется в три этапа. Вначале на форму помещается соответствующий компонент и осуществляется настройка
его свойств (при этом сам компонент-диалог на виден в момент работы программы,
видно лишь создаваемое им стандартное окно).
На втором этапе осуществляется вызов стандартного для диалогов метода
Execute, который создаёт и показывает настроенное окно на экране. Вызов этого метода
обычно располагается внутри обработчика какого-либо события. Только после обращения к Execute на экране появляется соответствующее диалоговое окно. Окно диалога
является модальным окном, поэтому сразу после обращения к Execute дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не закроет окно. Поскольку Execute – логическая функция, она возвращает в программу 1, если результат диалога с пользователем был успешным. Проанализировав результат Execute,
программа может выполнить третий этап – использование введённых с помощью диалогового окна данных – имени файла, настроек принтера, выбранного шрифта и т.д.
Перечислим основные диалоговые компоненты среды и их свойства.
Компоненты OpenDialog и SaveDialog – служат для определения имени файла
из которого будут читаться или в который будут записываться данные. Их свойство
FileName содержит строку - полное имя файла (с маршрутом поиска) при успешном
завершении диалога. Программа может использовать это свойство для доступа к файлу
с целью читать из него данные или записывать в него.
Свойство Filter содержит строку, используемую для фильтрации (отбора) файлов, показываемых в диалоговом окне. Это свойство можно устанавливать с помощью
специального редактора (в инспекторе объектов) или программно. При программном
вводе фильтры задаются одной длинной строкой, в которой символы | служат для разделения фильтров друг от друга. Например, оператор
OpenDialog1.Filter=”Текстовые файлы|*.txt|Файлы С|*.с”;
задаёт две маски – для отбора файлов с расширениями .txt и .c
С помощью свойства DefaultExt формируется полное имя файла, если при ручном вводе пользователь не указал расширение. В этом случае к имени файла прибавляется содержимое этого свойства (то есть получается файл с расширением).
Компоненты OpenPictureDialog и SavePictureDialog представляют собой специализированные диалоги для открытия и сохранения графических файлов. Они отличаются от предыдущих тем, что в них предусмотрены стандартные фильтры для выбора
графических файлов и тем, что в окна диалога включены панели для предварительного
просмотра выбираемого файла.
Компонент FontDialog создаёт и обслуживает стандартное окно выбора шрифта.
Выбранный шрифт храниться в свойстве Font.
Компонент ColorDialog создаёт и обслуживает стандартное окно выбора цвета.
Выбранный цвет храниться в свойстве Color компонента.
КОМПОНЕНТЫ - ПЕРЕКЛЮЧАТЕЛИ
Для внешнего управления программой в среде Builder существуют компонентыпереключатели CheckBox и RadioButton (страница Standart).
Независимый переключатель CheckBox используется для того, чтобы пользователь мог указать своё решение типа Да/Нет или Да/Нет/Не знаю. В составе окна может
быть несколько компонентов CheckBox. Состояние любого из них не зависит от состояния остальных, поэтому такие переключатели называются независимыми.
Свойства компонента:
Alignment – определяет положение текста: taLeftJustify – с левой стороны компонента, taRightJustify – с правой стороны.
State – содержит состояние компонента: cbUnchecked - нет, cbChecked - да,
cbGrayed – не знаю.
AllowGrayed – разрешает или запрещает использование состояния cbGrayed – не
знаю;
Checked – содержит выбор пользователя типа Да/Нет. Состояния cbUnchecked и
cbGrayed отражаются как false.
В отличие от CheckBox, компоненты RadioButton представляют собой зависимые переключатели, предназначенные для выбора одного из нескольких взаимоисключающих решений. В компонент-контейнер помещаются по меньшей мере два таких
компонента. Они могут находиться в одном из двух состояний, определяемом свой-
ством Checked. Если в одном компоненте это свойство принимает значение true, во всех
других компонентах, расположенных в том же контейнере, свойства Checked принимают значения false.
Cпециальный компонент RadioGroup служит контейнером переключателей
RadioButton. Каждый размещаемый в нём переключатель помещается в специальный
список Items (класса TStrings, содержит заголовки элементов) и доступен по индексу,
что упрощает обслуживание группы, а, также, позволяет добавлять и исключать опции
выбора программно. В свойстве компонента ItemIndex содержится индекс выбранной
опции.
КОМПОНЕНТЫ СКРОЛЛИНГА
В Windows существуют стандартные управляющие элементы, обычно используемые для визуального управления значением числовой величины. В среде Builder для
этого имеются компоненты ScrollBar (страница Standart) и TrackBar (страница Win32).
Они отличаются в основном оформлением.
Основные свойства компонета ScrollBar:
Kind – определяет ориентацию компонента: sbHorizontal – по горизонтали,
sbVertical – по вертикали;
LargeChange – сдвиг бегунка при щелчке мышью по линейке;
SmallChange – сдвиг бегунка при щелчке мышью по концевой кнопке;
Position – текущее значение числовой величины (типа int);
Max – максимальное значение величины;
Min – минимальное значение величины;
С помощью метода SetParams(Position, Max, Min) можно сразу установить свойства
Position, Max и Min.
С компонентом связаны два специфических события:
OnScroll – возникает при любом изменении свойства position;
OnChange – возникает при изменении параметров методом SetParams.
ТИП ДАТА-ВРЕМЯ
В среде Builder существует специальный тип данных дата-время, который определяется идентификатором TDateTime и предназначен для одновременного хранения и
даты и времени.
Над данными типа TDateTime определены те же операции, что и над вещественными числами, а в выражениях этого типа могут участвовать константы и переменные
целого и вещественного типов. Для работы с датой и временем используются следующие глобальные функции:
Date() – возвращает текущую дату(число, месяц, год);
Time() – возвращает текущее время (часы, минуты, секунды, миллисекунды);
DateToStr(TDateTime date) – преобразует дату в строку символов;
TimeToStr(TDateTime time) – преобразует время в строку символов;
DecodeTime(TDateTime time, unsigned short h, unsigned short m, unsigned short s,
unsigned short ms) – преобразует время в часы, минуты, секунды и миллисекунды.
Пример:
TDateTime mytime, mydate;
mytime= Time();
mydate=Date();
Label1->Caption= DateToStr(mydate);
Label2->Caption=TimeToStr(mytime);
Кроме инструментов среды для работы со временем пользователь может также
обратиться к специальным функциям Windows.
КОМПОНЕНТ Timer
Компонент Timer служит для отсчёта интервалов реального времени. Его свойство Interval определяет интервал времени в миллисекундах, который должен пройти от
включения таймера до наступления события OnTimer. Таймер включается при установке значения true в его свойство Enabled. Раз включенный таймер всё время будет возбуждать событие OnTimer, пока его свойство Enabled не примет значения False.
При работе с таймером следует учитывать, что в силу специфики реализации
аппаратного таймера ПК, минимально реально достижимый интервал отсчёта времени
(тик) не может быть меньше 55 (для ОС типа Win98; для Win2000 этот интервал равен
14) миллисекунд. Более того, любой интервал времени, отсчитываемый с помощью
таймера, всегда кратен 55 (или 14) миллисекундам.
Следует также иметь в виду, что в условиях существенной загрузки ресурсов
машины интервалы времени, отсчитываемые компонентом Timer, отсчитываются с
большой погрешностью. Для задач, где необходима точная временная привязка, применение этого компонента очень ограничено.
ЗАДАНИЕ К ЛЕКЦИИ 8
Создать на экране форму, поместить на неё компоненты Мемо и Edit. С помощью диалоговых компонентов загрузить из текстового файла текст в Memo, установить
его шрифт и цвет. Удалить из него (автоматически) все строки, начинающиеся буквой,
введённой в Edit. Сохранить получившийся текст в новый файл.
Примечание: Нумерация букв в строках, содержащихся в Мемо и Edit начинается с 1.
Создать на экране форму, поместить на неё компонент Timer, Panel и три компонента RadioButton (в контейнере RadioGroup). Определить событие таймера таким
образом, чтобы при каждом его срабатывании панель перемещалась по экрану на некоторый шаг. Интервал работы таймера должен при этом выбираться с помощью опций
компонента RadioGroup.
Download