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

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

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

21

Рисунок 3.1 – Окно настройки параметров проекта

3.5 Работа с формами проекта

Форма – важнейший компонент приложения. Она является основой для хранения всех компонентов окна приложения. При создании формы в проекте автоматически генерируются три файла:

заголовочный файл с объявлением класса формы, производного от класса TForm;

cppфайл, в котором определяются объект формы, дополнительные переменные и описываются все функции-члены класса формы;

dfmфайл с описанием настроек всех компонентов формы.

В проекте обязательно объявляется главная форма, которая отвечает за основное окно приложения и автоматически отображается при загрузке. Дочерние формы отображаются при реализации сценария выполнения приложения.

На странице Forms окна Project Options выполняется настройка параметров форм приложения. При этом окно примет следующий вид (рисунка 3.2)

22

Рисунок 3.2 – Страница Forms окна Project Options

В поле Main form задается имя главной формы, которая является основой всего приложения. В списке Auto-create form показываются названия автоматически создаваемых форм при запуске приложения, а в списке Available form – свободных форм, перед использованием которых в приложении они предварительно создаются вызовом метода Create().

Добавление новой формы в проект производится нажатием кнопки New form на панели инструментов или выбором раздела меню File/New/Form. Для включения формы в состав приложения используется кнопка Add Project или одноименный пункт меню.

Для переключения между Дизайнером форм и Редактором кода нажимается на панели инструментов Главного окна кнопка Toggle Form/Unit или клавиша F12. Для просмотра в Дизайнере форм требуемой формы вызывается список форм проекта нажатием на панели инструментов кнопки View Form или комбинации клавиш Shift+F12.

Управление формами в проекте можно производить с помощью Менеджера проекта, окно которого (рисунок 3.3) вызывается выбором раздела Главного меню View/ Project Manager или нажатием комбинации клавиш Ctrl+Alt+F11.

Рисунок 3.3 – Окно Менеджера проекта С++Builder версии 6.0

Основные свойства форм приводятся в таблице 3.1 основные события − в таблице 3.2.

 

 

 

23

 

Таблица 3.1– Основные свойства формы

 

 

 

 

 

Наименование

 

 

Описание

AutoScroll

Логическое свойство автоматического добавления полос прокрутки

Caption

Текст заголовка формы

 

Name

Имя формы, которое автоматически дается объекту и классу

FormStyle

Тип формы:

 

 

fsNormal

обычное окно формы;

 

 

fsMDIChild – дочернее окно MDI-приложения;

 

fsMDIForm – главное окно MDI-приложения;

 

fsStayOnTop – окно, отображаемое поверх всех иных окон

Width

Ширина окна формы в пикселях

 

Height

Высота окна формы в пикселях

 

Left

Координаты левого края формы на экране

Top

Координаты верхнего края формы на экране

Position

Автоматическое размещение формы:

 

poDefault – размер и положение формы подбираются Windows;

 

poDefaultPosOnly – только положение формы выбирается Windows;

 

poDefaulSizeOnly – только размер формы подбирается Windows;

 

poDesigned – положение и размер задаются программистом;

 

poScreenCenter – форма размещается в центре экрана

Scaled

Автоматическое перемасштабирование формы при изменении разрешения

 

экрана при значении true

 

WindowsState

Состояние формы: wsNormal – нормальное состояние формы;

 

 

 

wsMinimized

форма свернута;

 

 

 

wsMaximized

форма развернута

Color

Установка цвета формы с помощью выпадающего списка

BorderStyle

Стиль заголовка формы:

 

 

bsDialog

неизменяемое диалоговое окно с одной кнопкой;

 

bsSingle

раздвижная рамка обычного окна;

 

bsNone – окно без заголовка;

 

 

bsSizeable – изменяемая рамка;

 

 

bsToolWindows – служебное окно Windows;

 

bsSizeToolWin – аналогично bsSizeable

Icon

Пиктограмма, отображаемая в заголовке формы

Visible

Признак видимости формы при true

Enabled

Признак доступности формы

 

Hint

Текст всплывающей подсказки

 

Canvas

Полотно для отображения графических данных

Таблица 3.2 – Основные события класса формы

 

 

 

 

 

Событие

 

 

 

Описание

OnCreate

 

Создание формы

 

OnDestroy

 

Уничтожение формы

 

OnShow

 

Установка видимости формы

 

OnHide

 

Скрытие формы

 

OnActivate

 

Форма получает активность

 

OnDeactivate

 

Форма теряет активность

 

onCloseQuery

 

Попытка закрыть форму

 

onClose

 

Непосредственно перед закрытием формы

24

Чтобы сделать дочернюю форму видимой, используются методы:

1)Show() – отображение формы с возможностью переключения на другие формы;

2)ShowModal() – модальное отображение формы, когда невозможно переключиться на другую форму, пока не закрыта активная.

Закрытие формы производится с помощью вызова метода Close().

4 Особенности языка программирования С++ для С++Builder

4.1 Строковые типы данных AnsiString и UnicodeString

Для работы с текстовыми данными (при вводе-выводе цифры трактуются как символы) в C++Builder-версии до 2009 добавлен объектный тип данных AnsiString, предназначенный для описания текстовых строк стандарта ANSII длиной от 4 байт до 2Гбайт.

Для преобразования этого типа данных в численный формат используются функции таблицы 4.1.

Таблица 4.1 - Основные функции преобразований строки данных типа AnsiString

Функция

Описание

StrToFloat(AnsiString s)

Преобразует текстовый тип данных в вещественный

StrToInt(AnsiString s)

Преобразует текстовый тип данных в целочисленный

FloatToStr(вещественный)

Преобразует вещественный тип данных в текстовый

IntToStr(целочисленный)

Преобразует целочисленный тип в текстовый

DateToStr(дата)

Преобразует дату в строку

DateTimeToStr(дата_время)

Преобразует дату и время в строку

TimeToStr(время)

Преобразует время в строку

Преобразование текста из класса AnsiString в тип Pchar в C++Builder выполняется с использованием встроенной функции c_str().

Возможно также использование следующих встроенных членовфункций преобразований класса AnsiString:

1)ToDouble() – преобразование текста в тип данных double;

2)ToInt() – преобразование текста в целочисленный тип данных int;

3)ToDate() – текст преобразуется в дату;

4)ToTime() – текст преобразуется во временной тип.

Пример преобразования данных поля Text компонента Edit1 в переменную типа Pchar:

char *str=Edit1->Text.c_str();

Начиная с версии С++Builder 2009 тип данных AnsiString был заменен типом UnicodeString. Для UnicodeString внутренним форматом символов является UTF16. Старый тип данных также можно использовать, но

25

потребуется явное указание типа AnsiString. В версии 2009 введен новый класс TEncoding, предназначенный для преобразования текста в различные кодировки. Изменились некоторые базовые классы, которые стали применять строковый класс в реализации своих методов. Так, метод LoadFromFile класса TStrings теперь автоматически определяет кодировку текста и производит его перекодировку в UTF-16 (UnicodeString), используя

TEncoding.

4.2 Временной тип данных TDateTime

Для программирования данных, содержащих время и дату, в С++Builder имеется встроенный объектный тип TDateTime объявленный в модуле systdate.h. Поле данных класса – это фактически вещественное число удвоенной точности, целая часть которого кодирует дату, а дробная – время. В классе TDateTime имеются только методы (таблица 4.2) и отсутствуют свойства и события. Класс TDateTime также имеет большое количество перегруженных арифметических операторов (--, !=, +, ++, +=,

-=, <, <=, =, ==, >, >=).

Таблица 4.2 - Описание методов класса TDateTime

Наименование

Тип результата

Описание метода

CurrentDate

TDateTime

Возвращает текущую дату

CurrentDateTime

TDateTime

Возвращает текущие дату и время

CurrentTime

TDateTime

Возвращает текущее системное время

DateString

AnsiString

Преобразует дату типа TDateTime в строковый

 

 

тип

DateTimeString

AnsiString

Преобразует данные типа TDateTime в

 

 

строковый тип

DayOfWeek

int

Возвращает номер дня недели от 1 (воскресенье)

 

 

до 7 (суббота)

DecodeDate

*unsigned int

Выделяет из типа TDateTime календарные

 

 

данные: последовательно год, месяц и день

DecodeTime

*unsigned int

Выделяет из типа TDateTime данные времени:

 

 

час, минута, секунда и миллисекунда

FileDate

int

Преобразует данные TDateTime в формат даты

 

 

DOS

FileDateToDateTime

TDateTime

Преобразует формат даты DOS в тип TDateTime

FormatString

AnsiString

Преобразует TDataTime в строку в заданном

 

 

формате с помощью параметра, значения

 

 

которого приводятся в таблице 4.3

26

Таблица 4.3 - Список значений параметра форматирования FormatString

Значение

Пояснение

с

Отображает дату, используя формат, определяемый значением глобальной

 

переменной ShortDateFormat, и время, следующее за значением даты,

 

используя формат, определяемый значением переменной LongTimeFormat

d

Отображает день как число без лидирующего нуля (1-31)

dd

Отображает день как число с лидирующими нулем (01-31)

ddd

Отображает день как сокращение (Воскресенье-Суббота), используя строки,

 

определяемые значением глобальной переменной ShortDayNames

dddd

Отображает день как полное имя (Воскресенье-Суббота), используя строки,

 

определяемые значением глобальной переменной LongDayNames

ddddd

Отображает дату, используя формат, определяемый значением глобальной

 

переменной ShortDateFormat

dddddd

Отображает дату, используя формат, определяемый значением глобальной

 

переменной LongDateFormat

m

Отображает месяц как число без лидирующего нуля (1-12). Если сразу за

 

спецификатором "m"следует спецификатор "h" или "hh", то вместо месяца

 

отображаются минуты

mm

Отображает месяц как число с лидирующим нулем (01-12). Если сразу за

 

спецификатором "mm"следует спецификатор "h" или "hh", то вместо месяца

 

отображаются минуты

mmm

Отображает месяц как сокращение (Янв-Дек), используя строки, определяемые

 

значением глобальной переменной ShortMonthNames

mmmm

Отображает месяц как полное имя (Январь-Декабрь), используя строки,

 

определяемые значением глобальной переменной LongMonthNames

yy

Отображает год как двузначное число (00-99)

yyyy

Отображает год как четырехзначное число (0000-9999)

h

Отображает час как число без лидирующего нуля (0-23)

hh

Отображает час как число с лидирующим нулем (00-23)

n

Отображает минуту как число без лидирующего нуля (0-59)

nn

Отображает минуту как число с лидирующим нулем (00-59)

s

Отображает секунду как число без лидирующего нуля (0-59)

ss

Отображает секунду как число с лидирующим нулем (00-59)

t

Отображает время, используя формат, определяемый в ShortTimeFormat

tt

Отображает время, используя формат, определяемый в LongTimeFormat

am/pm

Для предшествующего спецификатора "h" или "hh" использует 12-часовой

 

формат отображения времени, добавляя "am" к любому часу до полудня и "pm"

 

к любому часу после полудня

a/p

Для предшествующего спецификатора "h" или "hh" использует 12-часовой

 

формат отображения времени, добавляя "a" к любому часу до полудня и "p" к

 

любому часу после полудня

/

Отображает разделитель даты, определяемый значением глобальной

 

переменной DateSeparator

:

Отображает разделитель времени, определяемый значением глобальной

 

переменной TimeSeparator

'xx'/"xx"

Символы, заключенные в кавычки, отображаются без форматирования

27

4.3 Свойства и обработчики событий компонентов С++Builder

Вописание класса в С++Builder добавлена новая секция с ключевым словом _published, в которой отображаются поля классов компонентов VCL. С++Builder генерирует информацию RTTI о свойствах, членах данных

иметодах объекта и организует передачу этой информации Инспектору объектов во время исполнения программы.

Вклассы VCL С++Builder добавлены понятия свойств и событий. Свойства являются атрибутами компонента, определяющими его внешний

вид и поведение. Опубликованные (_published) свойства компонентов отображаются на странице свойств (Properties) Инспектора объектов. Компоненты также могут иметь общие (public) свойства, которые доступны только во время выполнения приложения.

На странице Events Инспектора объектов показывает список событий, распознаваемых компонентом VCL. Обработчики событий − это функциичлены класса (методы), связанные с определенными событиями, объявленные в секции public класса. Обработчик события выполняется, если в программе произойдет указанное событие.

Свойства представляют собой расширение понятия членов данных. Разрешены любые типы свойств, за исключением файлового типа. В отличие от члена данных, свойство не хранит данные, однако его методы чтения и записи позволяют получить доступ к защищенному члену данных объекта.

Присваивание значения свойству вызывает запрограммированные операции над компонентом. Можно считывать или менять значения свойств аналогично переменным, но нельзя передавать указатели свойств методам в качестве параметров.

Синтаксис описания свойства использует слово property и имеет вид:

property тип_свойства имя_свойства = {список атрибутов};

Список атрибутов содержит перечисление следующих атрибутов свойства:

write = данные или имя_метода_записи; read = данные или имя_метода_записи;

default = булева константа, управляющая сохранением значения; stored = булева константа или функция, сохраняющая значение.

Хранение значений свойств компонентов в VCL использует следующие соглашения:

1)значения свойств хранят поля данных объекта;

2)идентификаторы полей данных, хранящих значения свойств, образуются добавлением префикса F к имени этого свойства (например,

исходные значения свойства Width компонент TControl хранит поле с именем FWidth);

28

3)идентификаторы полей данных, хранящих значения свойств, должны быть объявлены в секции класса private;

4)производные компоненты используют наследованное свойство без прямого доступа к памяти внутренних данных.

Это поддерживает простой принцип: только методы, реализующие свойство, имеют право доступа к своим значениям.

Методы чтения и записи замещают имена членов данных в атрибутах read и write объявления свойства. Они должны быть объявлены как частные (в секции private), а производные компоненты должны использовать наследованные методы для чтения и записи значений свойства.

Значение свойства по умолчанию – это начальное значение инициализации свойства, которое устанавливает конструктор данной компоненты.

Ниже приведен пример описания класса с единственным свойством

IsTrue со значением по умолчанию true, а также конструктор, устанавливающий это значение при инициализации компонентного объекта. Если свойство имеет значение по умолчанию false, то не нужно явно устанавливать его в конструкторе, поскольку все объекты всегда инициализируют свои члены данных значением 0 или false.

class TMyComponent : public TComponent { private: // частная секция класса

boolean FIsTrue;

public: // общая секция класса

virtual _fastcall TMyComponent(TComponent* AOwner); _published:

_property Boolean IsTrue =

{ read=FIsTrue, write=FIsTrue, default=true }; }; // конец описания класса

_fastcall TMyComponent:: // конструктор класса TMyComponent (TComponent* AOwner) : TComponent (AOwner)

{FIsTrue = true;

}

Метод записи имеет единственный параметр единого типа со свойством и не возвращает значения. Название функции образуется из слова "Set", за которым указывается имя свойства. Например, метод записи свойства MaxLength имеет имя SetMaxLength и тип void. Метод записи свойства присвоит значение своего параметра соответствующему полю данных класса.

Метод чтения представляет собой функцию без параметров (или с параметрами индексов для свойства типа массив), которая возвращает типизированное значение свойства. Название функции образуется из слова "Get", за которым записывается имя свойства. Например, метод чтения

29

свойства MaxLength имеет имя GetMaxLength и возвращает значение типа

int.

Свойство может быть любого типа, который способна возвратить функция.

5 Программирование интерфейса приложения

5.1 Компоненты ввода-вывода текстовых данных

Для работы с текстовыми данными (которые могут преобразовываться

вчисленные) используются следующие компоненты:

1)Label (библиотека Standard) – метка, отображающая текст на

форме;

2)LinkLabel(библиотека Additional) - аналогичен Label, но может в тексте содержать гиперссылку (появилась в версии 2009);

3)StaticText (библиотека Additional) – аналогичен Label, но имеет возможность задания стиля бордюра;

4)Edit (библиотека Standard) – однострочный редактор текста;

5)MaskEdit (библиотека Additional) – ввод текста в соответствии с заданным шаблоном (маской);

6)LabeledEdit (библиотека Additional) – компонент-комбинация Edit и Label (начиная с версии 6);

7)ButtonedEdit (библиотека Additional) – компонент-комбинация Edit и кнопок (появилась в версии 2009);

8)Memo (библиотека Standard) – многострочный редактор текста;

9)RichEdit (библиотека Win32) – многострочный RTF-редактор

текста;

10)ListBox (библиотека Standard) – выбор текста из раскрывающегося

списка;

11)CheckListBox (библиотека Additional) – комбинация списка ListBox

и индикаторов CheckBox;

12)ValueListEditor (библиотека Additional) – окно редактора списка вида «имя = значение»;

13)ComboBox (библиотека Standard) – редактируемый список, объединяющий функции компонентов ListBox и Edit;

14)ComboBoxEx (библиотека Win32) – редактируемый выпадающий список с текстом и изображениями (начиная с версии 6);

15)StringGrid (библиотека Additional) – таблица текстовых ячеек;

16)Panel (библиотека Standard) – панель-контейнер для группировки остальных компонентов;

17)GridPanel (библиотека Additional) – таблица из ячеек с произвольными данными из текста, графики и пр. (начиная с версии 2009);

30

18) F1Book (библиотека ActiveX) – компонент ввода и обработки числовой информации аналогично страницам Excel.

Для ввода и отображения целых чисел используются компоненты:

1)UpDown (библиотека Win32) – кнопка-счетчик для увеличения или уменьшения целочисленного значения, для отображения которого используется компонент Edit;

2)CSpintEdit (библиотека Samples) – кнопка-счетчик со строкой отображения значения.

Для ввода и отображения значений даты и времени используются компоненты:

1)DataTimePicker (библиотека Win32) – ввод даты и времени с выпадающим календарем;

2)MonthCalendar (библиотека Win32) – календарь на указанный

месяц;

3)Calendar (библиотека Samples) – отображение календаря на указанный месяц.

5.1.1Ввод-вывод однострочных текстовых данных.

Вывод текстовых сообщений наиболее просто выполнить с помощью компонента Label из страницы Standard. Отображаемая текстовая надпись задается свойством Caption. Остальные наиболее важные свойства указаны в таблице 5.1.

Таблица 5.1 – Основные свойства компонента Label

Свойство

Описание

Alignment

Способ выравнивания текста:

 

taCenter – по центру;

 

taLeftJustify – по левому краю;

 

taRightJustify – по правому краю

Autosize

Признак автоматического подбора шрифта под размер метки

Caption

Отображаемый в метке текст

Name

Имя переменной компоненты

Hint

Текст подсказки

ShowHint

Признак отображения подсказки

Color

Цвет поля метки

Left

Координаты левого края метки на экране

Top

Координаты верхнего края метки на экране

Transparent

Признак прозрачности метки для отображения лежащих под ней

 

компонентов

Visible

Признак видимости компонента

Пример программирования вывода текста:

Label1->Caption=”Решение не найдено”;

Для вывода текстовых сообщений может использоваться компонент StaticText из палитры Additional. Он имеет аналогичные параметры.