
ПРАКТИЧЕСКОЕ ЗАНЯТИЕ
Работа с компонентами вкладки «Additional» панели компонентов Delphi 7
Цели:
Приобрести практические навыки использования компонентов вкладки «Additional»;
Получить практический опыт использования арифметических и тригонометрических функций;
ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛ
Вкладка «Additional» представлена на рисунке 1, а сами компоненты перечислены в таблице 1.
Рисунок 1 – Вкладка «Additional» панели компонентов
Таблица 1 – Основные компоненты вкладки «Additional»
Изображение компонента |
Наименование компонента |
Описание |
|
BitBtn |
Кнопка, представляющая собой один из вариантов стандартной кнопки Button. В отличие от последней кнопка Delphi BitBtn умеет отображать на своей поверхности не только надпись, но и изображение, которое задаётся свойством Glyph |
|
SpeedButton |
Кнопка, которая по функционалу и виду похожа на кнопку с рисунком BitBtn. Но является не оконным элементом, в следствии чего не может получить фокус ввода. Используется для создание панелей с "быстрыми" командными кнопками. |
|
MaskEdit |
Данный компонент также, как и компонент Edit, является однострочным редактором. Но вдобавок к свойствам и функциям компонента Edit, MaskEdit дает дополнительную возможность ввода текста по заданному шаблону |
|
StringGrid |
Компонент для отображения различных данных в табличной форме. Ячейки компонента StringGrid могут содержать данные, имеющие тип String, а также отображать графику |
|
DrawGrid |
Этот компонент используется для представления изображений в табличном виде. |
|
Image |
Компонент для отображения изображений, в том числе пиктограмм и метафайлов. |
|
Shape |
С помощью этого компонента можно вставить на Форму правильную фигуру - прямоугольник, эллипс, окружность. |
|
Bevel |
Служит для выделения отдельных частей формы трёхмерными рамками и полосами. |
|
ScrollBox |
Панель с полосами прокрутки. В отличие от компонента Panel автоматически вставляет полосы прокрутки, если размещённые на нём компоненты отсекаются его границами. |
|
CheckListBox |
Список множественного выбора. Отличается от стандартного компонента ListBox наличием рядом с каждой опцией независимого переключателя типа CheckBox, облегчающего выбор сразу нескольких опций. |
|
Splitter |
Граница. Этот компонент создаёт границу между двумя видимыми компонентами и даёт возможность пользователю перемещать её. |
|
StaticText |
Статический текст. Отличается от стандартного компонента Label наличием собственного Windows-окна, что позволяет обводить текст рамкой или выделять его в виде "вдавленной" части Формы. |
|
ControlBar |
Панель управления. часто используют вместе с компонентом ToolBar. Он по своим свойствам и предназначению также как и компонент CoolBar относится к перестраиваемым панелям и его помощью можно реализовать создание сложных инструментальных панелей. |
|
ApplicationEvents |
Компонент событий приложения. Только во время выполнения программы доступен объект Application и для облегчения кодирования используется ApplicationEvents. Разместив компонент на форме мы можем на этапе проектирования через Инспектор объектов использовать события приложения. С его помощью возможно принимать и обрабатывать все сообщения, направляемые приложению, в одном месте. Данный компонент хорошо подходит, когда в приложении требуется обрабатывать сообщения Windows. |
|
ValueListEditor |
Компонент, представляющий список строк, которые содержат имя и значение |
|
LabeledEdit |
Данный компонент похож на компонент Edit, но основное отличие в том, что имеет собственную подпись, которая привязана к компоненту |
|
ColorBox |
Выпадающий список, в котором мы можно задать необходимый цвет |
|
Chart |
Диаграмма. Этот компонент облегчает создание специальных панелей для графического представления данных. |
Компонент «BitBtn»
Компонент BitBtn - это пиктографическая кнопка, представляющая собой один из вариантов стандартной кнопки Button. В отличие от последней кнопка BitBtn умеет отображать на своей поверхности не только надпись, но и изображение, которое задаётся свойством Glyph. В состав Delphi входит большое количество готовых изображений, которые можно размещать на кнопках Delphi BitBtn. В стандартном случае они располагаются по адресу C:\Program Files\Common Files\Borland Shared\Images\Buttons.
Свойство Kind компонента BitBtn определяет один из стандартных вариантов кнопки BitBtn:
Рисунок 2 – Примеры стандартных вариантов кнопки «BitBtn»
Нажатие на любую из них (кроме кнопок со свойством BitBtn.Kind, равным bkCustom или bkHelp) приводит к закрытию модального окна, в котором она установлена, а результат, возвращаемый в программу равен mrName (Name - Yes, Abort, Cancel и т.д. - название кнопки). Отличие есть у кнопки Close, её нажатие (после закрытия модального окна) приводит к возвращению не mrClose а mrCancel, а для главное окно программы просто закрывается, поэтому работа программы сразу завершается.
В случае если пиктограмма Glyph у кнопки Delphi BitBtn была изменена, система Delphi автоматически изменит и её значение BitBtn.Kind, которое станет равным bkCustom.
Специфические свойства компонента - пиктографической кнопки «BitBtn» перечислены в таблице:
Таблица 2 – Специфические свойства компонента «BitBtn»
Glyph: TBitmap |
Определяет рисунок, который может содержать от одного до четырёх изображений, связанных с состояниями, которые может принимать кнопка. |
Kind |
Определяет одну из разновидностей кнопки BitBtn (см. рисунок вверху). |
Layout |
Определяет к какому краю кнопки будет прижиматься пиктограмма:
|
Margin |
Определяет расстояние в пикселах, на котором будет располагаться пиктограмма от края кнопки. |
NumGlyph |
Определяет сколько растровых изображений размещается в файле, содержащем пиктограмму (*см. ниже). |
Spacing |
Определяет расстояние в пикселах от рисунка до текста на кнопке. |
Style |
Определяет как выглядит кнопка в зависимости от стиля предпочтительной операционной системы. Значение bsNew соответствует современным вариантам Windows. Стиль bsAutoDetect приводит оформление кнопки к стилю операционной системы, управляющей работой программы в настоящий момент. |
Рисунок с изображениями для кнопки может состоять из нескольких (до 4-х) частей. Стандартная пиктограмма имеет размер 16х16 пикселов. Соответственно, если рисунок состоит из 2-х частей (для активного или неактивного состояния кнопки - именно такие изображения содержатся в стандартной поставке Delphi), то рисунок будет иметь размер 32х16. Количество пиктограмм задаётся свойством Glyph. Однако, если изображение состоит из нескольких квадратных пиктограмм одного размера, система Delphi сама распознает их количество. Если в растре задана только одна пиктограмма, то Delphi сама может менять её изображение: в состоянии "нажата" изображение на кнопке смещается на 1 пиксель вниз-вправо, а в состоянии "недоступная" (Enabled=False) все цвета, кроме чёрного, меняются на светло-серый, а чёрный - на белый, что создаёт эффект вдавленности.
Компонент «SpeedButton»
Компонент Delphi SpeedButton (быстрая кнопка) расположен на странице Additional Палитры компонентов. Он по функционалу и виду похож на кнопку с рисунком BitBtn. Но является не оконным элементом, в следствии чего не может получить фокус ввода. Используется для создание панелей с "быстрыми" командными кнопками.
На данной кнопке может располагаться рисунок (значок). Для его установки нужно двойным щелчком напротив свойства Glyph в инспекторе объектов зайти в редактор рисунков и загрузить картинку в формате bmp. Большой набор рисунков для кнопок поставляется вместе с Delphi, они сохраняются при установке в каталоге \Program Files\Common Files\Borland Shared\Images\Buttons.
По сравнению с кнопкой BitBtn имеется еще одно состояние, когда кнопка нажата, соответственно рисунок на поверхности кнопки SpeedButton может иметь четыре, а не три картинки. Четвертая картинка будет видна, когда кнопка находиться в выбранном (утопленном) состоянии (свойство Down равно TRUE).
Обычно "быстрые" командные кнопки используются группами. Для объединения таких кнопок в группу, необходимо установить ненулевое целое значение для свойства GroupIndex. Кнопки у которых это свойство одинаковое будут принадлежать к одной группе.
Все кнопки в группе работают согласованно - при нажатии на любую кнопку в группе выбор других кнопок будет отменен. Группирование кнопок позволяет обойтись без программной организации взаимодействия кнопок между собой.
Чтобы кнопку вернуть в обратное состояние повторным щелчком, свойство AllowAllUp необходимо установить в TRUE. Если мы хотим перевести кнопку в нажатое состояние при проектировании нужно с свойству Down присвоить значение TRUE.
Свойство Flat со значением TRUE формирует плоский вид кнопки, границы которой видны при наведении на нее мыши.
Кнопка SpeedButton, в отличии от других кнопок может выполнять функции переключателя. Используя четвертое состояние выбора кнопки, когда кнопка утоплена. Для примера посмотрите на панель форматирования хорошо нам известного редактора Word (Рисунок 3).
Рисунок 3 – Панель форматирования редактора Word
Компонент «MaskEdit»
Компонент Delphi MaskEdit (Шаблон ввода) расположен на странице Additional Палитры компонентов. Он также, как и компонент Edit, является однострочным редактором. Но вдобавок к свойствам и функциям компонента Edit, MaskEdit дает дополнительную возможность ввода текста по заданному шаблону.
С помощью шаблона можно контролировать число вводимых символов, ограничить тип вводимых данных (цифры, буквы, служебные символы). Можно добавлять дополнительные символы (разделители при вводе номера телефона, даты, времени и др. С помощью шаблона удобно вводить почтовые индексы, телефоны, даты, то есть такую информацию для которой определен свой формат.
Шаблон (маска) задается с помощью свойства EditMask и состоит из трех полей разделенных между собой символами точка с запятой. В первом поле находиться сам шаблон (маска). Второе поле определяет, войдут ли вспомогательные символы в итоговый текст (по умолчанию 1). Если стоит 0, то они не будут в итоговом результате, а видны на дисплее при редактировании. Любой иной символ разрешает такое включение. Третье поле отвечает за вывод незаполненных (пустых) символов в поле ввода (по умолчанию это символ подчеркивания). При не заданных значениях второго и третьего полей, действуют значения по умолчанию.
В шаблоне (маске) используются следующие специальные символы:
! — Наличие этого символа в маске означает, что необязательные символы вставляются перед шаблоном, если отсутствует то после шаблона;
> — символы, следующие за этим символом переводятся в верхний регистр;
< — символы, следующие за этим символом, переводятся в нижний регистр;
<> — прекращение преобразования символов;
\ — символ следующий далее вставляется в шаблон (маску). Это необходимо для того чтоб произвольные символы могли быть частью шаблона;
L — в данной позиции должна стоять буква;
I — в данной позиции разрешен ввод буквы, но возможно ничего не вводить;
A — в данной позиции возможен ввод цифры или буквы;
a — возможно в данной позиции вставить цифру, букву или оставить пустой;
C — в данной позиции возможен ввод любого символа;
0 — в данную позицию необходимо ввести цифру;
9 — в данной позиции может находиться цифра или она будет пустой;
# — в данной позиции может быть цифра, +, -. Позиция может быть оставлена пустой;
: — используется для разделения часов, минут и секунд в показаниях времени;
_ — в данном месте автоматически будет вставлен пробел.
Символы не описанные выше вставляются в результирующий текст без изменений.
Для вызова редактора маски компонента MaskEdit делаем двойной щелчок в области многоточия (Рисунок 4).
Рисунок 4 – Свойство, задающее маску
Вид данного редактора показан на рисунке 5.
Рисунок 5 – Редактор маски компонента «MaskEdit»
Маску можно выбрать из образцов в поле Sample Masks или ввести вручную в поле Input Mask. Легче выбрать из образцов наиболее близкую маску и отредактировать ее. Поле Character for Blanks задает вид незаполненной позиции во входной строке. Значок Save Literal Characters отвечает за включение в маску литеральных символов. В поле Test Input проверяется функциональность маски и мы можем увидеть какой будет вид пустого поля в приложении.
Компонент «StringGrid»
StringGrid - компонент для отображения различных данных в табличной форме. Как следует из названия, ячейки компонента StringGrid Delphi могут содержать данные, имеющие тип String, а также отображать графику.
Таблица StringGrid состоит из выделенных серым FixedCols и FixedRows - зафиксированных ячеек-заголовков, и обычных, белых ячеек. Содержимое Fixed ячеек недоступно редактированию, и меняется только программно. За возможность редактирования обычных ячеек отвечает одно из значений свойства Options.
Итак, компонент StringGrid имеет возможность адресации каждой отдельной ячейки по номеру столбца и строки. Содержимое ячейки (i, j), где где i - номер столбца, j - номер строки, имеет вид StringGrid1.Cells[i, j] и доступно как для чтения, так и для записи. Здесь, как и всегда, номера столбцов ( i ) и строк ( j ) отсчитываются от 0.
Выделенная ячейка таблицы имеет:
номер столбца StringGrid1.Col;
номер строки StringGrid1.Row.
Поэтому содержимое выделенной ячейки будет адресоваться так: S:=StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];
Для более сокращенной записи можно воспользоваться оператором оператором присоединения with:
with StringGrid1 do S:=Cells[Col, Row];
За многие свойства компонента Delphi StringGrid отвечает свойство Options. В Инспекторе Объектов Options - это раскрывающийся список, представляющий собой элементы данного множества. Если значение элемента равно True, то он присутствует в множестве, если False - то нет (рисунок 6).
Рисунок 6 – Свойства компонента StringGrid
Описание данных свойств представлено в таблице 2.
Таблица 2 – Свойства компонента «StringGrid»
Свойство |
Значение |
goFixedVertLine |
Наличие вертикальных разделительных линий между "фиксированными" ячейками |
goFixedHorzLine |
Наличие горизонтальных разделительных линий между "фиксированными" ячейками |
goVertLine |
Наличие вертикальных разделительных линий между "обычными" ячейками |
goHorzLine |
Наличие горизонтальных разделительных линий между "обычными" ячейками |
goRangeSelect |
Возможность выделить диапазон ячеек |
goDrawFocusSelected |
Закрашивание ячейки с фокусом ввода |
goRowSizing |
Возможность менять высоту строк мышкой |
goColSizing |
Возможность менять ширину столбцов мышкой |
goRowMoving |
Возможность менять номер строки, то есть перемещать её, мышкой |
goColMoving |
Возможность менять номер столбца, то есть перемещать его, мышкой |
goEditing |
Возможность редактировать содержимое ячейки с клавиатуры |
goTabs |
При значении True фокус смещается на следующую ячейку в таблице, False - на следующий компонент |
goRowSelect |
Выделяется вся строка с "фокусированной" ячейкой |
goAlwaysShowEditor |
При значении True содержимое ячейки при получении фокуса сразу доступно редактированию, False - сначала необходимо щёлкнуть по ней мышкой, либо нажать Enter или F2 (прим.: не действует при goRowSelect=True) |
goThumbTracking |
При значении True перемещение "бегунка" прокрутки мышкой вызывает немедленное перемещение ячеек, False - ячейки перемещаются только при отпускании "бегунка" |
Как следует из таблицы, за возможность редактировать содержимое ячеек с клавиатуры отвечает элемент goEditing свойства-множества Options. В Инспекторе Объектов установите его значение в True. Чтобы управлять этой возможностью программно, нужно включить или исключить из множества данный элемент:
StringGrid1.Options:=StringGrid1.Options+[goEditing]; //Включаем редактирование,
//другие элементы не трогаем
StringGrid1.Options:=StringGrid1.Options-[goEditing]; //Выключаем редактирование,
//другие элементы не трогаем
StringGrid1.Options:=[goEditing, goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRowSelect]; //Задаём список необходимых элементов
Если элементы заданы списком, это аналогично присвоению в Инспекторе Объектов этим элементам значения True, остальным - False.
Ячеек в таблице, как правило, много, и в рамках компонента видна только часть из них. В программе доступна информация как об общем количестве строк и столбцов, так и номерах и количестве строк и столбцов, видимых в рамках таблицы. Количество строк в Delphi StringGrid равно StringGrid1.RowCount. Количество столбцов в Delphi StringGrid равно StringGrid1.ColCount. Если ячейки не помещаются в таблице, появляются полосы прокрутки. При прокручивании:
StringGrid1.LeftCol - Номер столбца, видимого самым левым
StringGrid1.TopRow - Номер строки, видимой самой верхней
StringGrid1.VisibleColCount - Количество столбцов, видимых в рамках таблицы
StringGrid1.VisibleRowCount - Количество строк, видимых в рамках таблицы
У таблицы StringGrid также есть свойство и для управления размером ячеек. Для всех ячеек:
DefaultRowHeight - высота строк по умолчанию
DefaultColWidth - ширина столбцов по умолчанию
Эти значения ширины и высоты принимают все новые ячейки. При необходимости индивидуально установить ширину и высоту столбцов и строк соответственно, пользуемся свойствами
RowHeights - массив, содержащий высоты строк. То есть, например, RowHeights[5] - высота строки с индексом 5
ColWidths - массив, содержащий ширины столбцов. То есть, например, ColWidths[5] - ширина строки с номером 5.
Все эти свойства настраиваем в обработчике события OnCreate Формы, так же как и надписи заголовков, располагающиеся в строках и столбцах "фиксированной" зоны таблицы. В результате таблица появляется уже в "настроенном" виде!