Главная страница
Навигация по странице:

  • 2.3. Дополнительные компоненты

  • 2.4. Диалоговые компоненты

  • 3. СТРОКИ И ПОТОКИ ВВОДА/ВЫВОДА В С++BUILDER 3.1. Строки

  • Символьные массивы.

  • Класс string языка C++.

  • Методы класса string.

  • БГУ Пособие - Программирование в C++ Builder. Учебное пособие по курсу методы программирования для студентов специальностей


    Скачать 1.24 Mb.
    НазваниеУчебное пособие по курсу методы программирования для студентов специальностей
    АнкорБГУ Пособие - Программирование в C++ Builder.pdf
    Дата26.05.2018
    Размер1.24 Mb.
    Формат файлаpdf
    Имя файлаБГУ Пособие - Программирование в C++ Builder.pdf
    ТипУчебное пособие
    #19699
    страница4 из 12
    1   2   3   4   5   6   7   8   9   ...   12
    2.2. Компоненты Win32
    Компоненты вкладки Win32 Палитры компонентов осуществляют включение в программу следующих интерфейсных элементов.
    Компонент TTabControl отображает набор частично перекрывающих друг друга картотечных вкладок. Названия вкладок вводятся в список свойства Tabs кнопкой в графе значений этого свойства. Если все поля не умещаются на форме в один ряд, то можно установить значение true свойства MultiLine или прокручивать вкладки с помощью кнопок со стрелками. Принципиальное отличие данного компонента от похожего компонента TPageControl состоит в том, что он не имеет множества страниц (панелей). Компонент представляет собой одну страницу с управляющим элементом типа кнопки со многими положениями.
    Необходимо написать соответствующие обработчики событий
    OnChanging и OnChange, чтобы определить, что именно должно происходить на панели при переключениях закладок пользователем.
    Компонент TPageControl отображает набор полей, имеющих вид частично перекрывающих друг друга картотечных вкладок (страниц), для организации многостраничного диалога. Многостраничные панели

    36
    позволяют экономить пространство окна приложения, размещая на одном и том же месте страницы разного содержания. Таким образом, компонент TPageControl является контейнером для размещения нескольких страниц, которые можно открывать в процессе работы приложения спомощью щелчка на соответствующей вкладке.
    Чтобы создать новую страницу диалога с соответствующей вкладкой, выберите опцию New Page из контекстного меню данного компонента.
    Можно активизировать конкретную страницу одним из следующих способов: с помощью мыши, выбрав ее из выпадающего списка свойства
    ActivePage, а также перелистывая вкладки с помощью опций Next Page и
    Previous Page контекстного меню. Свойство PageIndex содержит номер активной страницы. Работу с вкладками реализует встроенный компонент управления TTabSheet.
    Компонент TListView отображает поле с иерархическим
    (древовидным) списком элементов в различных видах. Свойство
    ViewStyle определяет вид отображения элементов списка: по столбцам с заголовками, вертикально, горизонтально, с малыми или с большими пиктограммами. Свойство Items позволяет добавлять, вычеркивать и модифицировать подписи, а также подбирать пиктограммы для элементов списка. Редактор списка вызывается кнопкой в графе значений этого свойства. Для выбора источника пиктограмм из выпадающего списка свойства LargeImages (SmallImages) задайте значения vsIcon (vsSmallIcon) для свойства ViewStyle. В режиме
    AutoArrange свойства IconOptions пиктограммы выравниваются в соответствии с выбранным значением свойства Arrangement, а свойство
    WrapText указывает необходимость переноса текста подписи, когда она не умещается на пиктограмме по ширине.
    Компонент TImageList создает контейнер для коллекции из графических изображений одинакового размера K*k, каждое из которых можно выбирать по его индексу в интервале значении от 0 до n-1.
    Графические коллекции используются для эффективного обслуживания больших наборов битовых образов или пиктограмм, которые хранятся как единый битовый образ шириной k*n. Окно редактора коллекции изображений открывается двойным щелчком мышью по компоненту или опцией ImageList Editor из его контекстного меню.
    Компонент THeaderControl создает контейнер для набора заголовков столбцов, ширину которых можно менять в процессе выполнения программы. Заголовки, перечисленные в свойстве Sections, можно размещать над информационными полями, например, над списками

    37
    компонентов TListBox. Окно редактора заголовочных секций открывается кнопкой в графе значений этого свойства.
    Компонент TRichEdit отображает область редактируемого ввода множества строк информации в формате RTF, который включает различные вариации атрибутов шрифта и форматирования абзацев.
    Данный формат принимают многие профессиональные текстовые процессоры, например, Microsoft Word. Компонент TRichEdit является прямым производным классом от класса TCustomRichEdit, полностью наследуя его свойства, методы и события.
    Компонент TStatusBar создает строку панели состояния (обычно выравниваемую по нижней границе формы) для отображения статусной информации, выдаваемой при работе программы.
    Каждая панель представлена в списке свойства Panels. Панели нумеруются слева направо, начиная с индекса 0. Окно редактора панелей открывается кнопкой в графе значений этого свойства. Свойство
    SimplePanel используется для переключения вида отображения строки состояния (одно- или многопанельная строка состояния).
    Компонент TTrackBar создает шкалу с метками и регулятором текущего положения (вариант линейки прокрутки).
    Компонент TProgressBar создает индикатор, который отслеживает процесс выполнения некоторой процедуры в программе. По мере выполнения процедуры, прямоугольный индикатор, например, постепенно окрашивается слева направо заданным цветом.
    Компонент TUpDown создает спаренные кнопки со стрелками вверх и вниз. Нажатие этих кнопок вызывает, соответственно, увеличение или уменьшение численного значения свойства Position. Данный компонент обычно используется совместно с компонентом TEdit для ввода целых чисел.
    Компонент THotKey используется для установки клавиш быстрого вызова (shortcut) во время выполнения программы. Пользователь может ввести комбинацию "горячих" клавиш, обычно состоящую из модификатора (Ctrl, Alt или Shift) и любого символа, включая функциональные клавиши F1,…,F12. Введенную комбинацию, записанную в свойстве HotKey, можно присвоить свойству Shortcut другого компонента. Чтобы выбрать горячие клавиши на стадии проектирования, используйте свойства HotKey и Modifiers, а чтобы отменить их – свойство InvalidKeys. Чтобы изменить комбинацию во время выполнения программы, удерживайте нажатой клавишу модификатора и одновременно введите новый символ.

    38
    2.3. Дополнительные компоненты
    Компоненты вкладки Additional Палитры компонентов осуществляют включение в программу следующих элементов управления.
    Компонент TBitBtn создает кнопку с изображением битового образа.
    КомпонентTSpeedButton создает графическую кнопку, обычно располагаемую на панели (TPanel), для быстрого вызова определенных команд меню или установки режимов. Различным состояниям быстрой кнопки (например, "нажата", "отпущена", "запрещена" ) могут соответствовать разные графические образы. Окно редактора файлов изображений открывается кнопкой в графе значений свойства Glyph.
    Компонент TStringGrid создает регулярную сетку для отображения символьных последовательностей по строкам и столбцам.
    Во время выполнения программы символьные последовательности и связанные с ними объекты некоторого столбца сетки адресуются свойством Cols. Свойство Rows позволяет подобным образом оперировать со строками сетки. Все символьные последовательности сетки содержатся в свойстве Cells, которое адресует нужную ячейку сетки.
    Компонент TDrawGrid создает регулярную сетку для отображения структурированных графических данных по строкам и столбцам.
    Свойства RowCount и ColCount задают число ячеек сетки по вертикали и по горизонтали. Значение свойства Options позволяет изменить вид сетки
    (например, с разделительными линиями между столбцами) и ее поведение (например, с переходом от столбца к столбцу по клавише
    Tab). Ширина разделительных линий сетки задается свойством
    GridLineWidth, а линейки прокрутки добавляются свойством ScrollBars.
    Свойства FixedCols и FixedRows позволяют запретить прокрутку столбцов и строк, а свойство FixedColor присваивает определенный цвет всем столбцам и строкам.
    Во время работы программы вы можете получить в свое распоряжение область для рисования некоторой ячейки с помощью метода CellRect. Метод MouseToCell возвращает координаты номера столбца и строки ячейки, на которую установлен курсор мыши.
    Выбранная ячейка сетки становится значением свойства Selection.
    Компонент TImage создает на форме контейнер графического изо- бражения (битового образа, пиктограммы или метафайла). Окно редак- тора файлов изображений открывается кнопкой в графе значений свойства Picture. Чтобы контейнер изменил свои размеры так, чтобы вместить изображение целиком, установите значение true свойства
    AutoSize. Чтобы исходное изображение меньшего размера растянулось

    39
    на весь контейнер, задайте значение true свойства Stretch. Используйте методы LoadFromFile и SaveToFile объектного свойства Picture для динамической загрузки и сохранения файлов изображений с помощью инструкций типа:
    Image->Picture->LoadFromFile("<имя файла>");
    Image->Picture->SaveToFile("<имя файла>");
    Компонент TShape рисует простые геометрические фигуры: окружность и эллипс, квадрат и прямоугольник (можно с закругленными углами).
    Компонент TВevel cоздает линии, боксы (контейнеры) или рамки, которые выглядят объемными. Рисуемый компонентом объект определяется свойством Shape, а значение свойства Style меняет вид объекта, делая его выпуклым или вдавленным. Чтобы сохранить относительное положение объекта неизменным, установите значение true свойства Align.
    Компонент TScrollBox создает в окне бокс переменного размера, который автоматически снабжается линейками прокрутки.
    2.4. Диалоговые компоненты
    Компонент TOpenDialog используется для выбора и открытия фай- лов. Компонент TSaveDialog предназначен для выбора и сохранения файлов. Компонент TOpenPictureDialog используется для выбора и от- крытия графических файлов. Компонент TFontDialog высвечивает диало- говое окно для выбора шрифтов. Компонент TColorDialog отображает диалоговое окно для выбора цвета. Компоненты становятся активными после вызовы метода Execute(). Например: if(OpenDialog1->Execute()){ filename = OpenDialog1->FileName;
    };
    Вопросы
    1. Назовите разновидности меню и укажите их отличия.
    2. Опишите технологию создания главного меню.
    3. Как скопировать нужные разделы из главного меню во всплываю- щее меню?
    4. Как создать всплывающее меню и закрепить его за компонентом?
    5. Как ограничить типы вводимых символов в текстовые компоненты?
    6. Чем отличается обработка событий OnKeyPress и OnKeyDown?
    7. Поясните действие следующего фрагмента программы:

    40
    for (int i=0; i→Items→Count; i++)
    ListBox1
    →Items→Strings[i]=”строка№”+IntToStr(i);
    8. Что означает следующий код?
    Button1->OnClick=0;
    Button1->OnClick=Button2Click;
    Упражнения
    1. Ввести и транспонировать квадратную матрицу.
    2. Уплотнить заданную матрицу, удаляя из нее строки и столбцы, за- полненные нулями.
    3. Разработать текстовый редактор.
    4. Создать записную книжку.
    3. СТРОКИ И ПОТОКИ ВВОДА/ВЫВОДА В
    С++BUILDER
    3.1. Строки
    В C++ Builder можно использовать следующие текстовые строки: символьные массивы типа char* языка С с нуль-символом (‘\0’) в конце; класс string из стандартной библиотеки C++; класс String (другое назва- ние AnsiString) из библиотеки VCL.
    Символьные массивы. В языке С строки представляют собой мас- сив данных символьного типа, заканчивающийся символом ‘\0’. Для ра- боты со строками в стандартную библиотеку языка С включен ряд функ- ций, которые определены в заголовочном файле . Например: strcpy() – копирование одной строки в другую; strcat() – добавление одной строки в конец другой; strcmp() – сравнение двух строк в лексикографическом порядке; strstr() – поиск в строке заданной подстроки; strupr() – преобразование символов строки к верхнему регистру; strlen() – определение длины строки без учета нуль-символа.
    Использование символьных массивов часто оказывается самым удобным при разработке приложений.
    Класс string языка C++. Класс string (название начинается со строч- ной буквы) представляет собой динамический массив и дает преимуще- ства при выполнении операций соединения и обрезания строк, вычерки- вания части строки, поиска комбинаций символов. Данный класс опре- делен в заголовочном файле .

    41
    Класс string содержит несколько конструкторов, из которых приве- дем объявления следующих:
    1) string();
    2) string(const string &s);
    3) string(const char *cp);
    4) string(const char *cp, size_t n);
    5) string(const string &s, size_type start, size_type length);
    6) string(size_type n, char c);
    Первый конструктор создает пустую строку. Второй конструктор яв- ляется конструктором копирования. Третий конструктор создает строку, инициализированную С-строкой (нуль-символ в объект класса string не копируется). Четвертый конструктор создает строку, инициализирован- ную не более чем n первыми символами С-строки. Пятый конструктор создает строку из другой строки, начиная с индекса start и содержащую не более чем length символов. Шестой конструктор создает строку, со- держащую n символов c.
    Пример.
    #include
    #include using namespace std; void main(){
    // Создание пустой строки и ее вывод string str1; cout<<”str1: “<// Строка инициализируется С-строкой string str2(“My string”); cout<<”str2: “<// Используется конструктор string(const char *cp, size_t n) string str3(“Tekct”,4); cout<<”str3: “<// Используется конструктор копирования string str4(str3); cout<<”str4: “<// Используется конструктор string(const string &s, size_type start,
    // size_type length) string str5(str3, 2, 2); cout<<”str5: “<// Используется конструктор string(size_type n, char c) string str7(5, ‘A’); cout<<”str7: “<}
    Для объектов класса string перегружены следующие операции (опе- раторы):

    42
    = – присваивание. Данная операция (как и другие рассматриваемые ниже операции) перегружена с помощью нескольких функций- операторов, что позволяет выполнять присваивание строке класса string не только строку этого же класса, но и С-строку или символ.
    + – конкатенация строк.
    == – проверка строк на равенство.
    != – проверка строк на неравенство.
    < – меньше. Здесь и далее сравнение строк выполняется в лексико- графическом порядке.
    <= – меньше или равно.
    > – больше.
    >= – больше или равно.
    [] – индексация. Обеспечивает доступ к элементам строки по индек- су. Контроль выхода за пределы строки не выполняется. Отметим, что имеется метод at(int i), который также позволяет обеспечить доступ к символам строки, но он выбрасывает исключение out_of_range, если ин- декс i выходит за пределы строки. Индексация символов строки ведется с нуля.
    += – добавление к строке с изменением исходной строки.
    << – вывод строки.
    >> – ввод строки.
    Для сравнения строк класс string содержит также несколько перегру- женных версий метода compare(), выполняющего сравнение строк в лек- сикографическом порядке:
    1) int compare(const string &str) const;
    2) int compare(size_t pos, size_t n, const string &str) const;
    3) int compare(size_t pos1, size_t n1, const string &str, size_t pos2,size_t n2) const;
    4) int compare(const const char *str) const;
    5) int compare(size_t pos, size_t n, const char *str, size_t length) const;
    Здесь size_t является беззнаковым целочисленным типом, определен- ным в заголовочном файле : typedef unsigned size_t;
    Метод возвращает отрицательное значение, если вызывающая строка предшествует строке, с которой выполняется сравнение; 0 – если строки совпадают; положительное значение – если вызывающая строка следует за другой строкой, участвующей в сравнении.
    Версия 2) метода сравнивает строку str с n символами вызывающей строки, начиная с позиции pos. Если значение параметра n выходит за пределы вызывающей строки, то строка рассматривается от позиции pos

    43
    до ее конца. Если позиция pos выходит за пределы вызывающей строки, то выбрасывается исключение out_of_range.
    Версия 3) позволяет выполнить сравнение подстроки вызывающей строки (характеризуется параметрами pos1 – индекс первого элемента строки и n1 – длина подстроки) с подстрокой строки str (характеризуется аналогичными параметрами pos2 и n2). Если значения pos1 или pos2 вы- ходят за пределы соответствующих строк, то выбрасывается исключение out_of_range.
    Версии 4) и 5) предназначены для сравнения вызывающей строки или ее подстроки (характеризуется параметрами pos и n) с С-строкой или ее начальной подстрокой, содержащей length символов.
    Пример.
    #include
    #include
    #include using namespace std; void main(){ string str1(“ABCDEFGH”), str2, str3, str4, str5;
    // Присваивание. Прототип функции-оператора
    // string& operator =(const string& str) str2=str1; cout<<”str2: “<// Присваивание. Прототип функции-оператора
    // string& operator =(const char *str) str3=”a1b2c3d4e5”; cout<<”str3: “<// Присваивание. Прототип функции-оператора
    // string& operator =(char c) str4=’R’; cout<<”str4: “<// Доступ к символам строки cout<<”str1[3]: “<// Будет выведено str1.at(2): C
    // Ввод из файла. Файл data.txt содержит последовательность
    // символов 12345 ifstream inf(“data.txt”); inf>>str5; if(!inf){ cout<<”ERROR”< } cout<<”str5: “<// Добавление к строке str1+=str5;

    44
    cout<<”str1+=str5: “<// Будет выведено str1+=str5: ABCDEFGH12345
    }
    Методы класса string. Класс string содержит множество методов, которые можно разделить на группы в соответствии с их функциональ- ным назначением: получение характеристик строк; присваивание, добав- ление и обмен строк; вставка, удаление и замена строк; поиск строк, под- строк и символов в строках. Ниже приводится краткое описание методов.
    При этом используются следующие обозначения: size_type – тип, определенный в пространстве имен std и эквивалент- ный unsigned int; npos – статический член класса string, содержащий максимальное значение для типа size_type. size_type length() const – возвращает длину (количество символов) строки. size_type size() const – то же назначение, что и у метода length(). size_type max_size() const – возвращает максимальный возможный размер строки. size_type capacity() const – возвращает текущую емкость строки, т. е. количество символов, которые можно поместить в строку без перерас- пределения памяти. Перераспределение памяти под строки происходит автоматически по мере необходимости. Нужно помнить, что в результате динамического перераспределения памяти становятся недействительны- ми все ссылки, указатели и итераторы (специальный контролируемый тип указателя), ссылающиеся на символы строки. Емкость строки может быть изменена и с помощью метода reserve(size_type n=0). bool empty() const – возвращает true, если строка является пустой, в противном случае возвращает false. string& assign(const string &s) – присваивает строку s вызывающей строке (то же самое, что и операция присваивания). string& assign(const string &s, size_type pos, size_type n) – присваивает вызывающей строке подстроку строки s, начиная с позиции pos и содер- жащую не более n символов. Если pos выводит за пределы строки, то выбрасывается исключение out_of_range. Если значение n выводит за пределы строки, то присваивается подстрока, начиная с позиции pos и до конца строки s. string& assign(const char *s, size_type n) – присваивает вызывающей строке подстроку С-строки s длиной n символов.

    45
    string& append(const string &s) – к вызывающей строке добавляется строка s (действие эквивалентно операции +=). Если длина результата превосходит максимальную допустимую длину строки, то выбрасывает- ся исключение length_error. string& append(const string &s, size_type pos, size_type n) – к вызы- вающей строке добавляется подстрока строки s, начиная с позиции pos и содержащая не более n символов. Если значения pos или n выводят за пределы строки s, то происходит то же, что и при вызове метода assign(). string& append(const char *s, size_type n) – к вызывающей строке до- бавляется подстрока С-строки s, содержащая n символов. swap(string &s) – вызывающая строка и строка s обмениваются со- держимым. string& insert(size_type pos, const string &s) – в вызывающую строку, начиная с позиции pos, вставляется строка s. Если значение pos выводит за пределы вызывающей строки, то выбрасывается исключение out_of_range. Если длина строки после вставки превосходит максималь- ную допустимую длину строки, то выбрасывается исключение length_error. string& insert(size_type pos1, const string &s, size_type pos2, size_type n) – вставляет в вызывающую строку, начиная с позиции pos1, часть строки s, начиная с позиции pos2, и содержащую не более n символов.
    Если значения pos1 или pos2 выводят за пределы соответствующих строк, то выбрасывается исключение out_of_range. Если значение n вы- водит за пределы строки s, то вставляется часть строки s, начиная с по- зиции pos2 и до конца строки. Если длина строки-результата превосхо- дит максимальную допустимую длину строки, то выбрасывается исклю- чение length_error. string& insert(size_type pos, const chat *s, size_type n) – вставляет в вы- зывающую строку, начиная с позиции pos, n первых символов С-строки s. Могут выбрасываться исключения, которые рассматривались при опи- сании других вариантов метода insert(). string& erase(size_type pos=0, size_type n=npos) – удаляет из вызы- вающей строки n символов, начиная с позиции pos. Если n не указано, то удаляется остаток строки, начиная с позиции pos. string& replace(size_type pos, size_type n, const string &s) – заменяет часть вызывающей строки, начиная с позиции pos, длиной n символов, строкой s. Если значение pos выводит за пределы вызывающей строки, то выбрасывается исключение out_of_range. Если длина строки- результата превосходит максимальный допустимый размер строки, то выбрасывается исключение length_error.

    46
    string& replace(size_type pos1, size_type n1, const string &s, size_type pos2, size_type n2) – заменяет часть вызывающей строки, начиная с пози- ции pos1 длиной n1 символов, подстрокой строки s, начинающейся с по- зиции pos2 и длиной n2 символов. Может выбрасывать исключения того же типа, что и предыдущий вариант метода. string& replace(size_type pos, size_type n1, const char *s, size_type n2) – заменяет часть вызывающей строки, начиная с позиции pos длиной n1 символов, первыми n2 символами С-строки s. Может выбрасывать те же исключения. clear() – выполняет очистку строки, т. е. строка имеет нулевую длину. size_type find(const string &s, size_type pos=0) const – находит самое левое вхождение строки s в вызывающую строку, начиная с позиции pos вызывающей строки. Метод возвращает позицию начала строки s в вы- зывающей строке или npos, если вхождение не найдено. size_type find(char c, size_type pos=0) const – находит самое левое вхождение символа c в вызывающую строку, начиная с позиции pos. size_type find(const char *s, size_type pos=0) const – находит самое ле- вое вхождение С-строки s в вызывающую строку, начиная с позиции pos вызывающей строки. size_type find(const char * s, size_type pos, size_type n) const – находит самое левое вхождение подстроки длиной n символов С-строки s в вызы- вающую строку, начиная с позиции pos вызывающей строки. size_type rfind(const string &s, size_type pos=0) const – находит самое правое вхождение строки s в вызывающую строку. Вызывающая строка сканируется справа налево, начиная с конца и заканчивая позицией pos. size_type rfind(char c, size_type pos=0) const – находит самое правое вхождение символа с в подстроку вызывающей строки, начинающуюся с позиции pos. size_type rfind(const char *s, size_type pos=0) const – находит самое правое вхождение С-строки s в подстроку вызывающей строки, начи- нающуюся с позиции pos. size_type rfind(const char *s, size_type pos, size_type n) const – находит самое правое вхождение подстроки длиной n символов С-строки s в под- строку вызывающей строки, начинающуюся с позиции pos вызывающей строки. string substr(size_type pos=0, size_type n=npos) const – возвращает под- строку вызывающей строки, начинающуюся с позиции pos и содержа- щую не более n символов. Метод может выбрасывать исключения рас- смотренных выше типов.

    47
    const char* c_str()const – возвращает указатель на константную С- строку, эквивалентную вызывающей строке. Указатель, который ссыла- ется на полученную константную строку, может стать некорректным по- сле выполнения любой неконстантной операции с исходной строкой. size_type copy(char *s, size_type n, size_type pos=0) const – копирует не более n символов в символьный массив s, начиная с позиции pos вызы- вающей строки. Нуль-символ в массив s не заносится. Метод возвращает количество скопированных символов. Могут выбрасываться исключения перечисленных выше типов. const char* data() const – аналогичен методу c_str(), но нуль-символ в конец возвращаемого символьного массива не помещается.
    Кроме рассмотренных выше методов класс string включает также ме- тоды для поиска самого левого вхождения любого символа заданной строки в другую строку, методы для поиска самого правого вхождения любого символа заданной строки в другую строку, методы для поиска самого левого символа заданной строки, который не входит в другую строку, методы для поиска самого правого символа заданной строки, ко- торый не входит в другую строку. Функциональное назначение данных методов понятно из их названий, а работают они аналогично уже рас- смотренным методам поиска. В связи с этим их подробное описание здесь не приводится.
    1   2   3   4   5   6   7   8   9   ...   12


    написать администратору сайта