Лекция 7. Визуальные приложения. Разработка приложений со стандартными элементами оконного интерфейса –
меню, текстовым редактором и диалоговыми окнами. Тип
TDateTime. Работа с таймером. Компоненты меню Для создания меню в среде Turbo C++ Explorer служат компоненты MainMenu и PopupMenu (располагаются на странице Standart). Компонент MainMenu определяет главное меню формы. На форму может быть пемещено сколько угодно объектов этого класса, но отображаться в полосе меню в верхней части формы будет только тот из них, который указан в свойстве Menu формы. Компонент PopupMenu используется для создания вспомогательных меню, появляющихся после нажатия правой кнопкой мыши. В отличие от главного меню, вспомогательное меню может быть создано для любого компонента, оно связывается с ним свойством PopupMenu компонента и раскрывается после щелчка на компонент правой кнопки мыши. После установки компонентов меню на форму необходимо создать его опции. Для этого следует дважды щѐлкнуть по нему мышью, после чего вызовется конструктор меню. Создание опций не вызывает проблем. После того, как создана первая из них, необходимо в окне инспектора объектов ввести еѐ текст (в строке Caption). Каждая опция главного меню может раскрываться в список подопций. После создания всех опций меню следует установить реакции на события их выбора (то есть OnClick). Для каждого объекта-опции определено свойство checked, если оно принимает значение true, то рядом с опцией появляется галочка.
Компоненты редактирования текста Для редактирования текста в среде Turbo C++ Explorer существуют компоненты 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 входит ряд типовых диалоговых окон, таких как окно выбора загружаемого файла, окно выбора шрифта, окно для настройки принтера и т.д. В среде Turbo C++ Explorer разработаны компоненты, дающие удобные способы создания и использования таких окон (страница Dialogs). Работа со стандартными диалоговыми окнами осуществляется в три этапа. Вначале на форму помещается соответствующий компонент и осуществляется настройка его свойств (при этом сам компонент-диалог на виден в момент работы программы, видно лишь создаваемое им стандартное окно). На втором этапе осуществляется вызов стандартного для диалогов метода Execute, который создаѐт и показывает настроенное окно на экране. Вызов этого метода обычно располагается внутри обработчика какого-либо события. Только после обращения к Execute на экране появляется соответствующее диалоговое окно. Окно диалога является модальным окном, поэтому сразу после обращения к Execute дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не закроет окно. Поскольку Execute – логическая функция, она возвращает в программу 1, если результат диалога с пользователем был успешным. Проанализировав результат Execute, программа может выполнить третий этап – использование введѐнных с помощью диалогового окна данных – имени файла, настроек принтера, выбранного шрифта и т.д. Перечислим основные диалоговые компоненты среды и их свойства. Компоненты OpenDialog и SaveDialog – служат для определения имени файла из которого будут читаться или в который будут записываться данные. Их свойство
© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС
FileName содержит строку - полное имя файла (с маршрутом поиска) при успешном завершении диалога. Программа может использовать это свойство для доступа к файлу с целью читать из него данные или записывать в него. Свойство Filter содержит строку, используемую для фильтрации (отбора) файлов, показываемых в диалоговом окне. Это свойство можно устанавливать с помощью специального редактора (в инспекторе объектов) или программно. При программном вводе фильтры задаются одной длинной строкой, в которой символы | служат для разделения фильтров друг от друга. Например, оператор OpenDialog1.Filter=”Текстовые файлы|*.txt|Файлы С|*.с”; задаѐт две маски – для отбора файлов с расширениями .txt и .c С помощью свойства DefaultExt формируется полное имя файла, если при ручном вводе пользователь не указал расширение. В этом случае к имени файла прибавляется содержимое этого свойства (то есть получается файл с расширением). Компоненты
OpenPictureDialog
и
SavePictureDialog
представляют
собой
специализированные диалоги для открытия и сохранения графических файлов. Они отличаются от предыдущих тем, что в них предусмотрены стандартные фильтры для выбора графических файлов и тем, что в окна диалога включены панели для предварительного просмотра выбираемого файла. Компонент FontDialog создаѐт и обслуживает стандартное окно выбора шрифта. Выбранный шрифт храниться в свойстве Font. Компонент ColorDialog создаѐт и обслуживает стандартное окно выбора цвета. Выбранный цвет храниться в свойстве Color компонента. Компоненты - переключатели Для внешнего управления программой в среде Turbo C++ Explorer существуют компоненты-переключатели 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. Тип дата-время (TDateTime) В среде Turbo C++ Explorer существует специальный тип данных дата-время, который определяется идентификатором 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. При работе с таймером следует учитывать, что в силу специфики реализации аппаратного таймера ПК, минимально реально достижимый интервал отсчѐта времени (тик) не может быть меньше 14 миллисекунд (на самом деле, это зависит от операционной системы). Более того, любой интервал времени, отсчитываемый с помощью таймера, всегда кратен 14 миллисекундам. Следует также иметь в виду, что в условиях существенной загрузки ресурсов машины интервалы времени, отсчитываемые компонентом Timer, отсчитываются с большой погрешностью. Для задач, где необходима точная временная привязка, применение этого компонента очень ограничено. Смотри также пример к лекции 7, расположенный на портале
© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС