Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы_C++Builder_часть_1_версия_4

.pdf
Скачиваний:
128
Добавлен:
29.02.2016
Размер:
715.35 Кб
Скачать

31

Для ввода однострочных текстовых данных используется компонент однострочного редактора 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.