Open Library - открытая библиотека учебной информации

Открытая библиотека для школьников и студентов. Лекции, конспекты и учебные материалы по всем научным направлениям.

Категории

Изобретательство Компоненты библиотеки VCL
просмотров - 348

2.1. Стандартные компоненты

Компоненты вкладки Standard Палитры компонентов осуществляют включение в программу стандартных управляющих элементов Windows.

Компонент TLabel отображает статический текст, являющийся значением свойства Caption. К примеру:

Label1->Caption="Это Метка";

Компонент TEdit отображает область редактируемого ввода строки. Содержимое области редактирования определяется значе­нием свойства Text. К примеру:

double r1=Form1->Edit1->Text.ToDouble(), y=0,

r2=Form1->Edit2->Text.ToDouble();

y=r1+r2;

ShowMessage(FloatToStr(y));

Компонент TButton создает кнопку с надписью. Нажатие на кнопку инициирует неĸᴏᴛᴏᴩᴏᴇ событие. Кнопка, выбранная со значением true свойства Default, запускает обработчик события OnClick для кнопки всякий раз, когда нажимается клавиша Enter в окне диалога. Кнопка прерывания, выбранная со значением true свойства Cancel, запускает обработчик события OnClick для кнопки всякий раз, когда нажимается клавиша Escape.

Ниже приводится пример использования рассматриваемых компонентов Label1-Label4, Edit1-Edit6 и Button1 при решении квадратного уравнения.

//Uni1.cpp

#include <vcl.h>

#pragma hdrstop

#include <math.h>

#include "Unit1.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

try{

double a=StrToFloat(Edit1->Text);

double b=StrToFloat(Edit2->Text);

double c=StrToFloat(Edit3->Text);

if(a==0){ShowMessage("Уравнение не квадратное");return;}

double d = b * b - 4 * a * c;

String str="";

if( d < 0)

{

str += ( - b ) / ( 2 * a);

str += " + i * ";

str += sqrt( - d ) / ( 2 * a);

Edit4->Text = str;

str = "";

str += ( - b ) / ( 2 * a);

str += " - i * ";

str += sqrt( - d ) / ( 2 * a);

Edit5->Text = str;

}

else

{

Edit4->Text = ( - b + sqrt( d ) ) / ( 2 * a);

Edit5->Text = ( - b - sqrt( d ) ) / ( 2 * a);

}

Edit6->Text=d;

}

catch(...)

{ShowMessage("Input Error");}

}

На рис. 10 показана форма приложения в процессе выполнения.

Рис. 10. Форма в процессе выполнения

Можно использовать кнопку с картинкой вместо кнопки типа TButton. Для этого можно применить компонент TBitBtn со вкладки Additional Палитры компонентов.

Компонент ТMеmо отображает прямоугольную область ввода множества строк. Содержимое области редактирования определяет массив строк, являющийся значением свойства Lines. К примеру:

void __fastcall TForm1::Edit1Change(TObject *Sender)

{ Memo1->Lines->Add(Edit1->Text);

}

Компонент TСheckBox создает квадратный флажок с двумя состояниями. Состояние check флажка соответствует выбору некоторого варианта (отмечается перечеркиванием квадрата), а состояние uncheck соответствует снятию выбора. При этом свойство компонента Checked меняется с true на false и возникает событие OnClick. Описательный текст флажка хранится в свойстве Caption.

Компонент TRadioButton cоздает круглую кнопку (радиокнопку) с двумя состояниями и описательным текстом. Радиокнопки представляют набор взаимоисключающих вариантов выбора: только одна кнопка может быть выбрана в данный момент времени (отмечается внутренним черным кружком), а с ранее выбранной кнопки выбор автоматически снимается. При нажатии радиокнопки свойство компонента Checked меняется и возникает событие OnClick.

Обычно радиокнопки размещаются внутри предварительно установленного на форме группового контейнера. В случае если выбрана одна кнопка, выбор всœех прочих кнопок в той же группе автоматически снимается. К примеру, две радиокнопки на форме бывают выбраны одновременно только в том случае, когда они размещены в разных контейнерах. В случае если группировка радиокнопок явно не задана, то по умолчанию всœе они группируются в одном из оконных контейнеров (TForm, TGroupBox или TPanel).

Компонент TListBox отображает прямоугольную область списка текстовых вариантов для выбора, добавления или вычеркивания. В случае если всœе элементы списка не умещаются в отведенную область, то список можно просматривать с помощью линœейки прокрутки. Элементы списка содержатся в свойстве Items, а номер элемента͵ который будет выбран во время выполнения программы, – в свойстве ItemIndex. Окно текстового редактора элементов списка открывается кнопкой в графе значений свойства Items. Можно динамически добавлять, вычеркивать, вставлять и перемещать элементы списка с помощью методов Add, Append, Delete и Insert объекта Items. К примеру:

ListBoxl->Items->Add("Последний элемент списка");

Значение true свойства Sorted устанавливает сортировку элементов списка по алфавиту.

Рассмотрим пример приложения, позволяющего вводить текст в редактируемое поле и добавлять данный текст к списку при нажатии на кнопку. Выберем пункт меню File|New Application для создания проекта и сохраним его главную форму под именем samp1.cpp, а сам проект под именем samp.bpr. Поместим на форму компоненты TButton, TEdit, TRadioButton и TListBox со страницы Standard Палитры компонентов. После этого выберем на форме компонент Edit1 и удалим текущее значение свойства Text. Затем установим свойство Caption для RadioButton1 равным "Добавить", для RadioButton2 – "Удалить", для кнопки Button1 – "Выполнить", а для кнопки Button2 – "Выход".

Чтобы добавить обработчик события OnClick для кнопки «Выполнить», нужно выбрать эту кнопку на форме, открыть страницу событий в Инспекторе объектов и дважды щелкнуть мышью на колонке справа от события OnClick. В соответствующей строке ввода появится имя функции. C++ Builder сгенерирует прототип обработчика события и покажет его в редакторе кода. После этого следует ввести следующий код в тело функции:

void __fastcall TForm1::Button1Click(TObject *Sender) {

if(RadioButton1->Checked)

{

if (!(Edit1->Text == "")) {

ListBox1->Items->Add(Edit1->Text); Edit1->Text = "" ;

}

}

else

{

if(RadioButton2->Checked){

if (!(ListBox1->ItemIndex == -1)) ListBox1->Items->Delete(ListBox1->ItemIndex);

}

} }

В обработчик события OnClick для кнопки "Выход" добавим вызов функции Close().

Для компиляции приложения в меню Run выберем пункт Run. На рис. 11 показано окно приложения в процессе выполнения.

 
 

Рис. 11. Окно приложения в процессе выполнения

Компонент TСomboBox создает комбинацию области редактирования и выпадающего списка текстовых вариантов для выбора. Значение свойства Text заносится непосредственно в область редактирования. Элементы списка, которые может выбирать пользователь, содержатся в свойстве Items, номер элемента͵ который будет выбран во время выполнения программы, – в свойстве ItemIndex, а сам выбранный текст – в свойстве SelText. Свойства SelStart и SelLength позволяют установить выборку части текста или обнаружить, какая часть текста выбрана.

Можно динамически добавлять, вычеркивать, вставлять и перемещать элементы списка с помощью методов Add, Append, Delete и Insert объекта Items. К примеру:

ComboBoxl->Items->Insert(0, "Первый элемент списка");

Компонент TScrollBar создает линœейку прокрутки с бегунком для просмотра содержимого окна. Поведение прокручиваемого объекта определяется обработчиком события OnScroll. Значение свойства LargeChange определяет насколько должен продвинуться бегунок, когда пользователь щелкает мышью на самой линœейке (по обеим сторонам от бегунка). Значение свойства SmallChange определяет насколько должен продвинуться бегунок, когда пользователь щелкает мышью по кнопкам со стрелками (на концах линœейки) или нажимает клавиши позиционирования.

Рассмотрим пример взаимодействия компонентов TScrollBar и TComboBox, ĸᴏᴛᴏᴩᴏᴇ происходит следующим образом: изменение по­ложения бегунка компонента TScrollBar вызывает изменение соответствующего ему элемента списка компонента TComboBox и на­оборот. Ниже приводится листинг программы, содержащий обработ­чики событий компонентов:

//Unit1.cpp

#include <vcl.h>

#pragma hdrstop

#include "desyat.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)

{ }

//---------------------------------------------------------------------------

void __fastcall TForm1::ComboBox1Change(TObject *Sender)

{

ScrollBar1->Position=ComboBox1->ItemIndex+1;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ScrollBar1Change(TObject *Sender)

{

ComboBox1->ItemIndex=ScrollBar1->Position-1;

ComboBox1->Items->Add(ScrollBar1->Position-1);

}

//---------------------------------------------------------------------------

На рис. 12 показано окно программы в процессе выполнения.

Компонент TGroupВох создает контейнер в виде прямоугольной рамки, визуально объединяющий на форме логически связанную группу некоторых интерфейсных элементов. Этот компонент представляет собой инкапсуляцию одноименного объекта Windows.

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

Рис. 12. Окно программы

Радиокнопки образуют группу при помещении их в один и тот же контейнер. Только одна кнопка из данной группы может быть выбрана. Добавление кнопок к компоненту TRadioGroup выполняется редактированием свойства Items. Присвоение названия радиокнопки очередной строке свойства Items приводит к появлению этой кнопки в группирующей рамке. Значение свойства ItemIndex определяет, какая радиокнопка выбрана в настоящий момент. Можно группировать радиокнопки в несколько столбцов, устанавливая соответствующее значение свойства Columns.

Компонент TPanel создает пустую панель (контейнер), которая может содержать другие компоненты. Можно использовать компонент TPanel для создания на форме панелœей инструментов или строк состояния (однако для этого лучше использовать специальные компоненты TToolBar, TPageScroller, TStatusBar).

Компонент TMainMenu создает панель команд главного меню и соответствующие им выпадающие меню для формы.

В качестве примера приведем создание простейшего текстового редактора с возможностью открытия и сохранения текстовых файлов. Будем использовать компоненты TMainMenu, TOpenDialog, TSaveDialog, TMemo. На рис. 13 показан процесс проектирования меню с помощью редактора меню.

 
 

Рис. 13. Редактирование меню

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

void __fastcall TForm1::Open1Click(TObject *Sender)

{

// Программная установка свойств компонента OpenDialog1

OpenDialog1->Options.Clear();

OpenDialog1->Options << ofFileMustExist;

OpenDialog1->Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";

OpenDialog1->FilterIndex = 2;

if (OpenDialog1->Execute()) Memo1->Lines->

LoadFromFile (OpenDialog1->FileName);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Save1Click(TObject *Sender)

{

// Программная установка свойств компонента SaveDialog1

SaveDialog1->Options.Clear();

SaveDialog1->Options << ofFileMustExist;

SaveDialog1->Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";

SaveDialog1->FilterIndex = 2;

if (SaveDialog1->Execute()) Memo1->

Lines->SaveToFile(SaveDialog1->FileName);

}

void __fastcall TForm1::Exit1Click(TObject *Sender)

{

exit(0);

}

На рис. 14 показано окно приложения после запуска приложения и открытия в полученном текстовом редакторе файла модуля формы.

Компонент TPopupMenu создает всплывающее меню для формы или для другого компонента. В случае если крайне важно, чтобы специальное меню появлялось при нажатии правой кнопки мыши на элемент, которому приписан данный компонент (свойство PopupMenu содержит имя компонента всплывающего меню), установите значение true свойства AutoPopup. В случае если всплывающее меню относится к форме, то свойство формы PopupMenu следует установить в имя всплываю­щего меню, к примеру, PopupMenu1.

 
 

Рис. 14. Окно текстового редактора

2.2. Компоненты Win32

Компоненты вкладки Win32 Палитры компонентов осуществляют включение в программу следующих интерфейсных элементов.

Компонент TTabControl отображает набор частично перекрывающих друг друга картотечных вкладок. Названия вкладок вводятся в список свойства Tabs кнопкой в графе значений этого свойства. В случае если всœе поля не умещаются на форме в один ряд, то можно установить значение true свойства MultiLine или прокручивать вкладки с помощью кнопок со стрелками. Принципиальное отличие данного компонента от похожего компонента TPageControl состоит в том, что он не имеет множества страниц (панелœей). Компонент представляет собой одну страницу с управляющим элементом типа кнопки со многими положениями. Необходимо написать соответствующие обработчики событий OnChanging и OnChange, чтобы определить, что именно должно происходить на панели при переключениях закладок пользователœем.

Компонент TPageControl отображает набор полей, имеющих вид частично перекрывающих друг друга картотечных вкладок (страниц), для организации многостраничного диалога. Многостраничные панели позволяют экономить пространство окна приложения, размещая на одном и том же месте страницы разного содержания. Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, компонент 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, можно размещать над информационными полями, к примеру, над списками компонентов 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. Чтобы изменить комбинацию во время выполнения программы, удерживайте нажатой клавишу модификатора и одновременно введите новый символ.

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. Чтобы исходное изображение меньшего размера растянулось на весь контейнер, задайте значение 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. Поясните действие следующего фрагмента программы:

for (int i=0; i<ListBox1®Items®Count; i++)

ListBox1®Items®Strings[i]=”строка№”+IntToStr(i);

8. Что означает следующий код?

Button1->OnClick=0;

Button1->OnClick=Button2Click;

Упражнения

1. Ввести и транспонировать квадратную матрицу.

2. Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями.

3. Разработать текстовый редактор.

4. Создать записную книжку.


Читайте также


  • - Компоненты библиотеки VCL

    2.1. Стандартные компоненты Компоненты вкладки Standard Палитры компонентов осуществляют включение в программу стандартных управляющих элементов Windows. Компонент TLabel отображает статический текст, являющийся значением свойства Caption. Например: Label1->Caption="Это Метка"; ... [читать подробенее]