
Основы_C++Builder_часть_1_версия_4
.pdf31
Для ввода однострочных текстовых данных используется компонент однострочного редактора Edit. Вводимый текст в формате AnsiString (UnicodeString для С++Builder 2009) помещается в свойство Text. Основные свойства показаны в таблице 5.2.
Таблица 5.2 – Основные свойства компонента Edit
Свойство |
Описание |
Alignment |
Выравнивание текста в поле ввода (начиная с версии 2009) |
AutoSelect |
Автоматически выделяет весь текст при передаче фокуса ввода |
Color |
Цвет поля ввода |
Ctl3D |
Признак наличия трехмерного отображения поля (при true) |
Font |
Выбор в диалоговом окне шрифта отображения текста |
Height |
Высота строки ввода в пикселях (изменяется автоматически мышью) |
MaxLength |
Максимальная длина текста в символах (0 – без ограничения) |
PasswordChar |
Окно ввода пароля. По умолчанию значение равно «#0» − это обычное |
|
окно редактирования. Если задан иной символ, то при вводе текста в |
|
окне будут появляться именно эти символы, а не те, которые вводит |
|
пользователь, обеспечивая секретность ввода пароля |
ReadOnly |
Признак защиты текста от модификации (false – допускает ввод) |
ShowHint |
Признак отображения подсказки |
SetLength |
Длина выделенного текста |
Text |
Отображаемый текст в формате AnsiString |
Visible |
Признак видимости компонента |
В C++Builder (начиная с версии 6) имеется компонент LabeledEdit на странице Additional. Это смесь компонента Edit и Label, причем метка располагается как комментарий сверху поля однострочного редактора. Его основные свойства аналогичны компоненту Edit, а отличительные черты метки используются в составном поле EditLabel, где, например, задается текст метки в подсвойстве Caption. Свойство LabelPosition указывает, с какой стороны от окна размещается метка: lpAbove - сверху, выровненная по правому краю, lpBelow — снизу, выровненная по левому краю, lpLeft — слева, lpRight — справа.
В С+Builder 2009 добавлен компонент однострочного редактора с кнопками ButtonedEdit. Он является аналогом компонента Edit с добавлением свойств LeftButton и RightButton — объектов левой и правой кнопок. Свойство Visible этих объектов обеспечивает видимость кнопок. Свойство Imagelndex указывает индекс изображения в списке ImageList, с которым связан ButtonedEdit. Компонент имеет события OnLeftButtonClick и OnRightButtonClick, соответствующие щелчкам по левой и правой кнопкам.
Компонент MaskEdit отличается от Edit и LabeledEdit тем, что в нем можно задать строку маски (шаблона) в свойстве EditMask. Это позволяет обеспечить синтаксически безошибочный ввод пользователем определенных данных (номера, адреса, даты, время и т.п.). Маска включает три раздела, разделенные точкой с запятой. В первом разделе - шаблоне записываются

32
символы ввода в каждой позиции и символы, добавляемые самой маской; во втором - 1 или 0 в зависимости от того, надо или нет, чтобы символы, добавляемые маской, включались в свойство Text компонента; в третьем - символ, используемый для обозначения позиции, в которой еще не осуществлен ввод. Прочитать результат ввода можно или в свойствах Text или EditText; последнее содержит введенный текст вместе с символами маски.
5.1.2 Ввод-вывод многострочного текста.
Если требуется ввести или вывести несколько строк текста, то используется компонент многострочного редактора Memo из страницы Standard. Свойства компонента Memo аналогичны Edit, за исключением свойства Text, вместо которого имеется свойство Lines – массив объектовстрок типа TStrings. При выборе свойства в Инспекторе объектов вызывается окно редактора String List Editor (рисунок 5.1), где задаются первоначальные значения строк Memo. В Memo используется одинаковый формат для всего текста, определенный свойством Font.
Рисунок 5.1 – Окно текстового редактора String List Editor C++Builder версии 6.0
Для ввода-вывода форматированного текста следует использовать компонент текстового редактора RichText, который работает с текстом в формате RTF (Rich Text Format). Изменение атрибутов вводимого фрагмента текста выполняется в свойстве SelAttributes, которое имеет составной тип TTextAttributes. Последнее включает подсвойства цвета (Color), наименование шрифта (Name), размер (Size), стиль (Style) и пр.
Свойство DefAttributes определяет параметры, заданные по умолчанию и действующие до их изменения свойством SelAttributes. Это свойство доступно только при выполнении программы, поэтому его значения рекомендуется задавать в обработчиках события форм OnCreate. После модификации параметров текста вернуть обратно значения умолчания возможно с помощью метода Assign свойства SelAttributes.
33
Во время выполнения программы составное свойство Paragraph типа TParaAttributes определяет параметры текущего абзаца текста. Его вложенные свойства рассматриваются в таблице 5.3. Указанные в программе параметры Paragraph применяются к абзацу текста, на котором установлен курсор.
Таблица 5.3 - Вложенные свойства Paragraph компонента RichEdit
Свойство |
Описание |
Alignment |
Определяет выравнивание текста: taLeftJustify (левостороннее), taCenter |
|
(центрирование) или taRightJustify (правостороннее) |
Firstlndent |
Число пикселов отступа красной строки у абзаца |
Numbering |
Управляет вставкой маркеров списков с помощью значений: nsNone (нет |
|
маркеров), nsBullet (маркеры ставятся) |
Leftlndent |
Отступ текста абзаца в пикселах от левого поля |
Rightlndent |
Отступ текста абзаца в пикселах от правого поля |
TabCount |
Количество позиций табуляции в строке текста абзаца |
Tab |
Значения позиций табуляции в пикселах в строке текста абзаца |
Свойство Lines для компонентов Memo и RichEdit является основным и содержит массив строк типа TStrings. Оно может выполнять обмен с данными из текстовых файлов с помощью вложенных методов таблицы 5.4.
Таблица 5.4 – Методы Lines компонентов RichText и Memo для работы с файлами
Функция |
Интерфейс |
Описание |
Add |
(AnsiString S) |
Добавить новую строку в массив |
AddStrings |
(TString *) |
Добавить новые строки в массив |
Clear |
( ) |
Очистить массив строк |
LoadFromFile |
(AnsiString S) |
Чтение массива строк из указанного в S имени файла |
SaveToFile |
(AnsiString S) |
Запись строкового массива в указанный в S файл |
Пример загрузки текста в компоненту Memo1 из файла help.txt:
Memo1->Lines->LoadFromFile("help.txt");
Свойства Alignment и Wordwrap определяют выравнивание текста и допустимость переноса длинных строк. Задание свойству ReadOnly значения true блокирует модификацию текста, отображаемого компонентами Memo и RichText. Их общее свойство MaxLength ограничивает максимальную длину строк вводимого текста (при его значении 0 нет ограничений).
Свойство ScrollBars определяет наличие полос скроллинга (прокрутки) текстового окна в программе. Может принимать следующие значения:
− |
ssNone − нет полос прокрутки (значение по умолчанию); |
− |
ssHorizontal − только горизонтальный скроллинг; |
− |
ssVertical − только вертикальный скроллинг; |
− |
ssBoth − наличие обеих полос скроллинга. |
Весь текст данных компонентов хранится в виде единой строке типа String в свойстве Text. Получение доступа к отдельной строке введенного текста выполняется свойством Strings[номер_строки], которое является подсвойством Lines. Свойство Count указывает число строк введенного

34
текста. Ввод новой строки в конец текста выполняется вложенными методами Add или Append свойства Lines.
Позиция курсора внутри текста при работе программы находится в свойстве SelStart компонентов Memo и RichEdit. Для удаления всего текста используется встроенный в компоненты метод Clear().
5.1.3 Ввод-вывод текстовых таблиц.
Если используется для ввода или отображения массив данных в виде таблицы или матрицы, тогда наиболее удобно использовать компонент текстовой таблицы StringGrid со страницы Additional. Каждая ячейка отображает текстовые данные, хранящиеся в двухмерном свойстве-массиве Cells[номер столбца][номер строки]. По умолчанию первая колонка и первая строка таблицы используются в качестве заголовков соответственно для идентификации строк и столбцов. Пример реализации компонента показывается на рисунке 5.2. Наиболее важные свойства StringGrid приводятся в таблице 5.5.
Рисунок 5.2 - Пример текстовой таблицы размером 3x3
Таблица 5.5 – |
Основные свойства компонента StringGrid |
|
|
|
|
Свойство |
Тип |
Описание |
ColCount |
int |
Число колонок таблицы |
RowCount |
int |
Число строк таблицы |
Cells |
AnsiString |
Текстовый массив значений ячеек таблицы |
FixedCols |
int |
Число фиксированных колонок в правой части таблицы |
FixedRows |
int |
Число фиксированных строк в верху таблицы |
GridLineWidth |
int |
Толщина линий таблицы |
Font |
TFont |
Стиль текста ячеек таблицы |
DefaultColWidth |
int |
Ширина колонок по умолчанию |
Свойства ColCount и RowCount задают соответственно число столбцов
истрок, свойства FixedCols и FixedRows − число фиксированных столбцов
истрок. Цвет фона фиксированных ячеек указывается в свойстве FixedColor. Свойства LeftCol и TopRow задают соответственно индексы первого видимого на экране в данный момент прокручиваемого столбца и первой видимой прокручиваемой строки.
Свойство ScrollBars задает в таблице полосы скроллинга, которые отображаются автоматически при изменении размера таблицы.
35
Свойство Options определяет множество параметров настроек таблицы: наличие разделительных вертикальных и горизонтальных линий, фиксированных (goFixedVertLine и goFixedHorzLine) и нефиксированных (goVertline и goHorzLine) ячеек, возможность при работе приложения изменения мышью размеров столбцов и строк (goColSizing и goRowSizing), перемещение столбцов и строк (goColMoving и goRowMoving), редактирования данных ячеек таблицы (goEditing) и прочие.
Свойства Col и Row хранят индексы столбца и строки выделенной ячейки таблицы.
Для доступа к массиву значений таблицы используется свойство Cells, которое имеет тип АnsyString или UnicodeString (для С++Builder 2009). Пример оформления заголовка и вывода в таблицу SG1 из N строк значений массивов типа double X[N] и Y[N]:
{ SG1->RowCount=N+1; |
// Задание числа строк таблицы |
SG1->Cells[0][0]='N'; |
// Оформление строки заголовка |
SG1->Cells[1][0]='X'; |
|
SG1->Cells[2][0]="Y(X)"; |
|
for(int i=0;i<N;i++) |
// Цикл вывода значений массивов |
{SG1->Cells[0][i+1]=IntToStr(i); // Вывод номера SG1->Cells[1][i+1]=FloatToStr(X[i]); // Вывод X[i] SG1->Cells[2][i+1]=FloatToStr(Y[i]); // Вывод Y[i]
}
}//---------------------------------------------------------
Одним из важнейших событий компонента StringGrid является событие OnSelectCell, возникающее в момент выбора ячейки. В его обработчик передаются целочисленные параметры ACol(номер столбца) и ARow (номер строки) выделенной ячейки и логический параметр CanSelect — допустимость выбора ячейки (при CanSelect=false выполняется запрет выделения ячейки).
5.1.4 Ввод дискретных значений.
Для ввода или постепенного изменения дискретных значений используется компонент дискретного переключателя UpDown из палитры Win32. Для удобства он связывается с компонентом однострочного редактора Edit с помощью его свойства Assotiative, в котором указывается имя нужного переключателя. Основные свойства дискретного переключателя указаны в таблице 5.6. Главным свойством компонента является OnClick.
Свойство AlignButton может иметь значение udLeft или udRight, в зависимости от расположения кнопок слева или справа. Свойство Orientation (значение udHorizontal или udVertical) располагает кнопки по вертикали или по горизонтали. Свойство ArrowKeys дает возможность управления компонентом с помощью клавиши клавиатуры со стрелками. Свойство
36
Thousands определяет наличие разделительного пробела между каждыми тремя цифрами разрядов вводимого числа (при true).
Таблица 5.6 − Основные свойства UpDown
Свойство |
Описание |
AlignButton |
Расположение кнопок переключателя |
ArrowKeys |
Возможность управления с клавиатуры |
Increment |
Величина приращения при одном нажатии |
Min |
Минимальное целочисленное значение |
Max |
Максимальное целочисленное значение |
Position |
Текущее значение переключателя |
Свойства Min и Мах соответственно определяют минимальное и максимальное значения вводимых чисел. Свойство Increment задает приращение числа при нажатии на кнопку. Свойство Position хранит текущее значение числа, отображаемого в окне компонента, связанного с помощью свойства Assotiative.
5.1.5 Выбор значений из готовых списков.
Компоненты ListBox, CheckListBox, ValueListEditor, ComboBox,
ComboBoxE реализуют выбор строки текста из заранее заданных списков. Они позволяют избежать ошибок при вводе текстовых данных, если нужно выполнить выбор из массива альтернативных значений.
ListBox и CheckListBox выполняют выбор нужной строки из представленных списков. Их основным свойством является Items типа TStrings, которое содержит список строк альтернативных вариантов ввода. При работе приложения можно менять состав списка с помощью вложенных в Items методов: Clear (очистка списка), Add (добавление новой строки списка) и другими.
В ListBox свойство MultiSelect разрешает выполнять множественный выбор из списка. При его значении, равном false (по умолчанию), выполняется выбор только одного элемента списка.
При выполнении приложения номер выбранной строки из списка помещается в свойство ItemIndex типа int, которое при отсутствии выбора равно -1. При множественном выборе (MultiSelect=true) значение Itemlndex соответствует номеру списка, находящемуся в фокусе ввода. При этом выполняется проверка выбора определенного элемента списка по значению соответствующего элемента логического массива свойства
Selected[номер_строки_списка].
С помощью свойства ExtendedSelect (при значении true) задается способ множественного выбора интервала элемента с фиксацией клавиш Shift и Ctrl, а также переводом курсора к нужным элементам. При ExtendedSelect=false клавиши Shift и Ctrl не используются.
37
Свойство Columns задает число столбцов отображаемого списка, если он не помещается целиком. Свойство Sorted упорядочивает список по алфавиту (при true новые строки в список добавляются в алфавитном порядке, а не в конец). AutoComplete (при true) реализует быстрый поиск строки списка по первому символу.
5.1.6 Список значений.
Компонент ValueListEditor отображает окно редактирования таблицы значений строк вида «имя = значение». Окно имеет две колонки с заголовками Keys и Values, значения которых можно изменить в свойстве TitleCaptions. Свойство Strings типа TStrings содержит список всех строк. Этот список можно заполнить предварительно с помощью Инспектора объекта или программно. Все строки списка должны задаваться в следующем формате:
наименование параметра = значение
Для изменения списка значений String можно использовать все встроенные свойства и методы класса TString, рассмотренные ранее для других компонентов.
Свойство Keys является массивом имен типа AnsiSring или UnicodeString. Первым индексом массива является 1.
Свойство Values позволяет получать доступ к значениям из строки с помощью имени из свойства Key. Его формат имеет следующий вид:
AnsiString Values[const AnsiString Key]
Также возможен доступ к именам и значениям таблицы с помощью свойства Strings: String—>Names (обеспечивает доступ к массиву имен) и Strings—>Values (доступ к массиву значений).
Свойство Cells[номер_столбца][номер_строки] дает доступ к данным таблицы аналогично рассмотренному ранее компоненту StringGrid.
Свойство KeyOptions определяет доступные пользователю операции редактирования колонки имен при работе приложения. Оно является множеством, которое может быть пустым или содержать элементы keyEdit (позволяет редактировать имена в первой колонке), keyAdd (позволяет добавлять в список новые строки клавишей Insert), keyDelete (позволяет удалять выделенную строку клавишей Delete), keyUnique (не позволяет пользователю добавить новую строку с именем, уже имеющимся в списке).
Свойство времени выполнения ItemProps позволяет управлять способом редактирования пользователем значения каждого из элементов списка. Свойство DisplayOptions является множеством следующих элементов doColumnTitles (строка заголовка фиксирована), doKeyColFixed (ширина столбца имен неизменна), doAutoColResize (при изменении ширины компонента ширина колонок автоматически изменяется).
38
Свойство Options содержит множество настроек, управляющих отображением линий таблицы, возможностью изменения размера колонок и др.
5.2 Программирование ввода логических значений
Ввод логических значений наиболее удобно выполнять с помощью двух позиционных независимых переключателей из страницы Standard:
1)компонента CheckBox – крестообразного маркера;
2)компонента RadioButton – круглого маркера.
При этом выбор состояния выключателя изменяется с помощью установки мышью маркера в виде крестика или точки соответственно. Основные свойства переключателей показываются в таблице 5.7.
Таблица 5.7 – Основные свойства независимых переключателей
Свойство |
Описание |
Alignment |
Признак ориентации текста переключателя относительно маркера: |
|
taRightJustify – текст справа; |
|
taLeftJustify – текст слева. |
AllowGrayed |
Признак наличия третьего состояния при true |
Caption |
Текст подписи переключателя |
Checked |
Признак включения переключателя (true - включено) |
State |
Первоначальное состояние переключателя |
Если необходимо реализовать выбор одного признака из некоторой группы, то следует использовать группу зависимых переключателей RadioGroup или CheckListBox из страницы Standard. В группе объединяется заданное число переключателей, из которых можно установить маркер только у одного. Основные свойства группы переключателей показываются в таблице 5.8.
Таблица 5.8 – Основные свойства группы независимых переключателей
Свойство |
Описание |
Caption |
Текст подписи группы переключателей |
Column |
Число колонок переключателей в группе |
Items |
Текстовый массив подписей переключателей группы |
ItemIndex |
Номер выбранного пункта (при значении -1 нет выбора) |
Пример использования группы RadioGroup1 из двух переключателей для задания типа сохраняемого файла графика Chart1:
switch (RadioGroup1->ItemIndex)
{ case 0 : Chart1->SaveToBitmapFile (SavePictureDialog1->FileName+".bmp"); break;
case 1 : Chart1->SaveToMetafile (SavePictureDialog1->FileName+".wmf");
}//----------------------------------------------------------
39
Свойства компонента CheckListBox аналогичны компоненту ListBox.
5.3Программирование управляющих элементов приложения
5.3.1Реализация кнопок.
Простейшие управляющие элементы на приложении возможно запрограммировать с помощью следующих компонентов кнопок:
1)Button – простая командная кнопка из палитры Standard;
2)BitBtn – кнопка с пиктограммой из палитры Additional;
3)SpeedButton – квадратная кнопка инструментов из Additional;
4)RadioButton − переключатель выбора из панели Standard. Важнейшим событием этих компонентов является нажатие (OnClick),
для программирования которого достаточно щелкнуть мышью по кнопке и описать код обработчика в теле открывшейся функции. Важнейшие свойства компонента Button приводятся в таблице 5.9, а BitBtn – в таблице 5.10.
Таблица 5.9 – Важнейшие свойства кнопки Button
Свойство |
Описание |
Caption |
Надпись на кнопке |
Cancel |
Признак срабатывания при нажатии клавиши Esc |
Default |
Признак наличия фокуса ввода на кнопке по умолчанию |
Таблица 5.10 – Важнейшие дополнительные свойства кнопки BitBtn |
|
|
|
Свойство |
Описание |
Glyph |
Пиктограмма в виде bmp-файла, отображаемая на кнопке, загружается в |
|
окне Picture Editor |
NumGlyphs |
Число образов кнопки на картинке |
Layout |
Положение пиктограммы относительно текста |
Margin |
Расстояние от края кнопки до пиктограммы |
Spacing |
Расстояние от пиктограммы до текста кнопки |
Kind |
Выбор стандартного вида кнопки из готового набора |
5.2.2 Компонент программирования Главного меню.
Главное меню приложения программируется с помощью компонента MainMenu из страницы Standard, которое имеет свойства, указанные в таблице 5.11.
Таблица 5.11 – Основные свойства компонента MainMenu
Свойство |
Назначение |
AutoHotKeys |
Автоматическая установка горячих клавиш у элементов меню |
AutoLineReductions |
Установка в начале или конце подменю разделителей или двух |
|
разделителей подряд |
AutoMegre |
Объединение главных меню нескольких форм приложения в одно |
Images |
Имя списка иконок разделов (компонент ImageList) |
Items |
Разделы меню, обрабатываемые в Дизайнере меню |
Name |
Наименование компонента |

40
Если установить MainMenu в любую часть формы, то в ее верхней части появится строка Главного меню (рисунок 5.3), разделы которого назначаются с помощью окна Дизайнера меню (рисунок 5.4), вызываемого кликом по компоненту MainMenu.
Рисунок 5.3 – Вид Главного меню на форме
Рисунок 5.4 – Окно Дизайнера (конструктора) меню
Каждый раздел меню является объектом класса TMenuItem со своим набором свойств, отраженным в таблице 5.12.
Таблица 5.12 − Свойства класса раздела Главного меню TMenuItem
Свойство |
Описание свойства |
AutoHotKeys |
Автоматическая установка горячей клавиши пункта |
Bitmap |
Рисунок пиктограммы пункта меню |
Break |
Признак начала новой колонки при mbBreak или mbBarBreak |
Caption |
Отображаемый заголовок пункта меню |
Checked |
Признак контролируемого пункта меню при true |
Default |
Признак установки значения по умолчанию |
Enabled |
Признак включения |
GroupIndex |
Индекс в группе меню с зависимыми переключателями |
HelpContext |
Номер ID контекста соответствующего справочного файла проекта, |
|
вызываемого на экран нажатием F1 |
Hint |
Подсказка пункта |
ImageIndex |
Номер пиктограммы раздела в хранилище ярлыков ImageList |
Name |
Наименование раздела |
RadioItems |
Признак наличия точечного переключателя |
ShortCut |
Комбинация акселераторных («горячих») клавиш вызова пункта |
SubMenuImages |
Ссылка на хранилище изображений ярыков ImageList |
Tag |
Хранит целочисленное значение как часть Главного меню |
Visible |
Признак видимости пункта на Главном меню при true |
Описание алгоритмов работы пунктов меню производится в обработчике события OnClick.