Разделы

В сети

Пользователей: 135
Из них просматривают:
Аналоги: 39. Даташиты: 15. Инструкции: 9. Новости: 31. Остальное: 10. Программы: 2. Производители: 2. Теги: 1. Торрент: 2. Форум: 20. Чат: 4.
Участников: 7
Гостей: 128

an , KT315 , Adagumer , alex01981 , Google , wolf170571 , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

Программирование

Borland C++ Builder б для начинающих (Статья двенадцатая)

Написал MACTEP в 26.10.2010 4:00:00 (25178 прочтений)


В этой статье рассказывается о назначении и применении на практике некоторых методов визуальных компонентов.





МЕТОДЫ КОМПОНЕНТОВ
Наряду с обработчиками событий, Borland C++ Builder 6 позволяет использовать при написании программы множество методов компонентов. Мы уже применяли в рассмотренных программах некоторые из них, например, LoadFromFile, SaveToFile и др. В отличие от обработчиков событий, методы не вызываются в результате каких-либо действий пользователя, а выполняются при достижении программой строки, в которой они записаны. Методы вставляются в программу самим разработчиком но мере необходимости, например для отображения рисунка на экране монитора, работы с файлами и т. д. По сути дела методы являются функциями или подпрограммами. Так же как свойства и события, одни и те же методы могут быть применимы для разных типов компонентов. В табл. 1 приведены краткие описания большинства методов, расположенных в алфавитном порядке.

 

 

Таблица 1
Метод
Описание
AddДобавляет новый элемент в список
AssignКопирует изображение одного графического объекта в другой
BeginDragИспользуется при перетаскивании компонента
BrinqToFrontПозволяет изменять последовательность перекрытия компонентов
BrushCopyКопирует часть изображения битовой матрицы на канву
CanFocusОпределяет, может ли компонент получать сообщения пользователя
ChanqeScaleИспользуется для изменения масштаба компонента
ChordРисует заполненную замкнутую фигуру, ограниченную дугой окружности или эллипса и хордой
ClassNameВозвращает имя типа объекта
ClearОчищает список или текст
ClientToScreenПреобразует координаты клиентской области в координаты экрана
ContainsControlОпределяет, является ли указанный компонент прямым или косвенным наследником данного оконного компонента
ControlAtPosОпределяет, какой дочерний компонент имеется в указанной позиции
CopyRectКопирует часть изображения
DeleteУдаляет элемент с указанным индексом из списка
DisableAliqnВременно запрещает выравнивание дочерних компонентов
DormantСоздает изображение битовой матрицы в памяти
DrawРисует графическое изображение в указанную позицию канвы
DrawFocusRectРисует изображение прямоугольника в виде, используемом для отображения рамки фокуса, с помощью операции XOR
DisableAlignВременно запрещает выравнивание дочерних компонентов
EllipseРисует заполненный эллипс или окружность
ExpandУвеличивает емкость списка типа TList
FillRectЗаполняет указанный прямоугольник канвы, используя текущее значение Brush
FindNextControlВозвращает следующий в последовательности табуляции оконный дочерний компонент
FloodFillЗакрашивает текущей кистью замкнутую область канвы, ограниченную определенным цветом
FocusedОпределяет, находится ли оконный элемент в фокусе
FrameRectРисует на канве текущей кистью прямоугольную рамку
FreeОсвобождает память, занимаемую объектом
GetTabOrderListСтроит список дочерних оконных компонентов в последовательности табуляции
HandleAllocatedПроверяет наличие дескриптора окна компонента
HandleNeededСоздает дескриптор окна, если до этого он не существовал
HideДелает компонент невидимым
IndexOfОпределение первого вхождения в список заданного элемента
InsertВставляет элемент в заданную позицию списка
InvalidateСообщает Windows о необходимости полностью перерисовать компонент
LineToРисует на канве прямую линию
LoadFromClipboardFormatЗагружает изображение из буфера обмена в формате Clipboard
LoadFromFileЗагружает изображение, хранящееся в файле
LoadFromResoureelDЗагружает битовую карту из файла ресурсов по указанному идентификатору
LoadFromResourceNameЗагружает битовую карту из Файла ресурсов по указанному имени
LoadFromStreamЗагружает графическое изображение из указанного потока
LockБлокирует канву, запрещая рисовать на ней
MoveМеняет текущую позицию элемента в списке на позицию, заданную в параметрах метода
MoveToУстанавливает позицию пера на позицию, заданную в параметрах метода
PieРисует заполненную замкнутую фигуру в виде сегмента окружности или эллипса
PolygonРисует на канве заполненную замкнутую Фигуру в виде многоугольника
PolylineРисует на канве ломаную линию
DisableAliqnВременно запрещает выравнивание дочерних компонентов
RectangleРисует на канве закрашенный прямоугольник
RefreshПерерисовывает изображение компонента на экране
RemoveУдаляет элемент с заданным значением из списка TList
RepaintПерерисовывает изображение компонента на экране
ReplaceDockedControlВстраивает компонент на место другого компонента
RoundRectРисует на канве прямоугольную рамку со скругленными углами
SaveToClipboardFormatСоздает копию изображения в формате Clipboard
SaveToFileСохраняет графическое изображение в файле
SaveToStreamСохраняет графическое изображение в потоке
ScaleByМасштабирует оконный элемент и все содержащиеся в нем компоненты
ScaleControlsМасштабирует дочерние компоненты оконного элемента, не изменяя масштаба самого элемента
ScreenToClientПреобразует координаты экрана в координаты клиентской области компонента
ScrollBvСдвигает содержимое оконного элемента
SelectFirstПередает фокус дочернему компоненту, первому в последовательности табуляции
SelectNextПередает фокус дочернему компоненту, следующему в последовательности табуляции за указанным компонентом
SendCancelModeПрерывает модальное состояние элемента управления
SendToBackПереносит компонент ниже других компонентов
SetBoundsУстанавливает одновременно свойства Left, Top, Width и Height
SetChildOrderИзменяет позицию компонента в списке дочерних компонентов оконного элемента
SetFocusПередает фокус элементу
SetZOrderПеремещает компонент на вершину или вниз Z-последовательности
ShowДелает видимым невидимый компонент
StretchDrawРисует графическое изображение в указанную прямоугольную область канвы, подгоняя размер изображения под заданную область
TextExtentВозвращает длину и высоту в пикселях текста, который предполагается написать на канве текущим шрифтом
TextHeightВозвращает высоту в пикселях текста, который предполагается написать на канве текущим шрифтом
TextOutПишет указанную строку текста на канве, начиная с указанной позиции
TextRectПишет указанную строку текста на канве, начиная с указанной позиции и обрезая текст, выходящий за пределы указанной прямоугольной области
TextWldthВозвращает в пикселях длину текста, который предполагается написать на канве текущим шрифтом
TryLockБлокирует канву, если она не была блокирована, не разрешая другим нитям многопоточного приложения рисовать на ней
UnlockУменьшает на единицу значение свойства LockCount, способствуя тем самым разблокировке канвы, когда i LockCount станет рапным нулю
UpdateПерерисовывает компонент


Рассмотрим более подробно назначение и описание некоторых наиболее часто используемых методов с демонстрацией их применения.
Начнем с создания небольшой программы, которая наглядно покажет нам, как применяются методы Add (добавить), Hide (скрыть), Show (показать) и Delete (удалить). Создайте новое приложение и поместите на его форму компонент ListBox и четыре кнопки Button. Измените размеры формы и разместите на ней компоненты так, как показано на рис. 1.

 

Рис.1

 


Задайте свойство названия Caption для формы и кнопок в соответствии с этим же рисунком. Щелкните дважды левой кнопкой мыши по компоненту первой кнопки Button1 и впишите для нее код обработки события OnClick в виде программной строк ListBox1->Items->Add(String(i++));


Эта строка содержит метод Add, который позволит добавить в компонент ListBox1 элемент списка, представляющий собой строку, формирующуюся из переменной i с помощью функции String. Каждый раз при вызове данной программной строки с методом Add переменная i будет увеличивать свое значение благодаря тому, что после нее вписан оператор автоинкремента (увеличения значения на единицу) "++". Описание переменной с присвоением ей начального значения в виде строки

int i = 0;

необходимо вписать в программу в инспекторе объектов сразу после строк с описанием включений #include. В этом случае переменная будет доступна любому обработчику программы. Если описать эту переменную в самом обработчике события, она станет локальной (недоступной другим обработчикам) и будет инициализироваться каждый раз при формировании этого события.
Аналогично сформируйте заготовку кода обработки события OnClick для компонента кнопки Button2 и впишите в него программную строку
ListBox1->Hide();
Эта строка содержит метод Hide, который скрывает изображение компонента на форме от пользователя программы.
Подобным образом впишите в код обработки события OnClick для компонента кнопки Button3 программную строку
ListBox1->Show();
Эта строка содержит метод Show, который показывает изображение компонента на форме для пользователя программы.
Наконец, впишите код обработки события OnClick для компонента кнопки Button4 в виде программной строки
if(i>0) ListBox1->Items->Delete(--i);
Эта строка содержит метод Delete, который удаляет указанный элемент списка из компонента ListBox1. Обратите внимание на то, что в качестве номера удаляемого элемента списка мы использовали ту же переменную i, которая применялась при добавлении элементов списка в компонент. При этом перед ее использованием она автоматически декрементируется (уменьшает свое значение на единицу) благодаря применению оператора "--". Метод удаления имеет смысл выполнять только в том случае, если элементы в списке есть, т. е. имеется что удалять. Для проверки данного условия в программную строку включен оператор сравнения переменной индекса элементов списка с нулем if(i > 0), который позволяет выполнять удаление элемента из списка только при натуральном значении переменной i, т. е. когда элементы в списке есть. Сохраните созданный проект и запустите приложение на выполнение, после чего проверьте, как оно работает.


Теперь можно рассмотреть некоторые детали методов, которые часто используются в программах.
Метод Add применяется к компонентам, имеющим списки или строки. Метод возвращает при выполнении индекс добавленного элемента. Например, программная строка
i  =  ListBox1->Items->Add("Новый элемент списка");
присвоит переменной i значение возвращаемого параметра. Индекс первого элемента списка всегда равен нулю. Данный метод увеличивает значение свойства Count (номер элемента) на единицу. Если значение Count равно значению свойства Capacity (размер списка), то увеличивается значение Capacity и перераспределяется память под новые элементы. Напомню, что доступ к свойствам Count и Capacity осуществляется с помощью строк ListBox1->Item->Count и ListBox1->Item->Capacity. Используя данные свойства можно исключить в предыдущей программе переменную i, сохранив при этом все ее функции. Предлагаю читателям проделать это самостоятельно для получения собственного опыта.
Метод Hide делает компонент невидимым, задавая свойству Visible компонента значение False. Если компонент является контейнером для других компонентов, то эти дочерние компоненты также делаются невидимыми. Несмотря на то, что компонент становится невидимым, его свойства и методы остаются доступными в программе.
Метод Show делает видимым ранее невидимый компонент. Он задает значение True свойству Visible компонента и проверяет, является ли видимым родительский компонент.
Метод Delete удаляет из списка элемент с указанным индексом.
Метод CanFocus определяет, может ли компонент получать сообщения пользователя, т. е. может ли он получать фокус. Функция возвращает True, если у компонента и всех его родителей свойства Visible и Enabled установлены в True. В противном случае возвращается значение False.
Метод ChangeScale(M,D) используется для изменения масштаба компонентов. При его применении масштабируются такие свойства компонента, как Тор и Left, определяющие его местоположение, а также Width и Height, определяющие его размер.
Параметры метода М и D определяют соотношение новых размеров компонентов к их прежним размерам. Например, чтобы уменьшить размеры компонента до 50 % начального значения, нужно задать М равным 50, a D равным 100. То же самое можно сделать, задав М = 1 и D = 2. Если вы хотите увеличить размер, нужно задать значение М больше, чем значение D. Так, например, программная строка ChangeScale(2,1); увеличит размеры компонентов в два раза.
Следующая группа описываемых методов связана с графическими компонентами и предназначена для рисования. Рассмотрим их применение на примере программы.


Создайте новое приложение и поместите на его форму компонент Image и одну кнопку Button. Установите размеры компонента Image равными 200 единиц по высоте и 300 единиц по ширине с помощью свойства Height и Width. Свойство Caption формы Form1 заполните названием Draw. Задайте свойство Caption компонента Button1, назвав кнопку словом «Рисовать» и расположите компоненты на форме в соответствии с рис. 2.

 

Рис.2



Объявите целую переменную i с помощью оператора int i; после строки public в файле описаний модуля с расширением h и задайте ее начальное значение с помощью оператора i = 1; в обработчике создания формы Form1.
Сформируйте для кнопки заготовку обработчика события OnClick и вставьте в него следующие программные строки:

 

Image1->Canvas->Pen->Color=clBlack;
Image1->Canvas->Brush->Color=clBlue;
switch(i)
{
case 1: Image1->Canvas->Ellipse(0,0,50,50); break;
case 2: Image1->Canvas->Chord(50,0,100,50,75,0,100,25); break;
case 3: Image1->Canvas->Pie(100,0,150,50,125,0,150,25); break;
case 4: Image1->Canvas->Arc(150,0,200,50,150,0,200,50); break;
case 5: Image1->Canvas->Rectangle(200,0,250,50); break;
case 6: Image1->Canvas->RoundRect(250,0,300,50,20,20); break;
case 7: Image1->Canvas->TextOutA(0,100,"Графический текст"); break;
case 8: Image1->Canvas->MoveTo(0,200); Image1->Canvas->LineTo(300,0); break;
case 9: Image1->Canvas->FloodFill(0,0,clRed,fsBorder);
Image1->Canvas->Brush->Color=clWhite;
Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
i=0;
break;
default: break;
}
Button1->Caption="Фиrypa"+String(++i);
}


Текст этой программы под названием Draw можно скачать внизу статьи. Первые две строки данной программы задают свойства пера (Pen) и кисти (Brash) для канвы (Canvas) рисунка (Image). Далее следует оператор switch, который сравнивает значение переменной i с целыми значениями в диапазоне 1...9. Каждому из этих значений сопоставлена программная строка с применением различных методов графического отображения фигур, заканчивающаяся оператором break для прерывания сравнения. Познакомимся подробнее с этими методами программных строк.
Метод Ellipse(X1, Y1, Х2, Y2) рисует эллипс или окружность с помощью текущих параметров пера (Pen). Фигура заполняется текущим значением кисти (Brush). X1, Y1 и Х2, Y2 являются координатами верхнего левого и правого нижнего углов прямоугольника, описывающего эллипс. Метод вызывается с помощью строки:

Inage1->Canvas->Ellipse(X1. Y1. X2. Y2);

Операционная система Windows95 накладывает ограничение на параметры этого и последующих методов. Они связаны с тем, что сумма координат прямоугольника не должна превышать значение 32767.
Метод Chord(Xl, Y1, Х2, Y2, ХЗ, Y3, Х4, Y4) рисует фигуру в виде дуги эллипса или окружности с помощью текущих параметров пера (Реп), замкнутую хордой. Фигура заполняется текущим значением кисти (Brush). Координаты X1, Y1 и Х2, Y2 определяют прямоугольник, описывающий эллипс. Дуга начинается с точки, являющейся пересечением эллипса с прямой, проходящей через его центр, и точку с координатами ХЗ, Y3. Конечная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку с координатами Х4, Y4. Дуга рисуется против часовой стрелки от начальной до конечной точки.

 

  Скачать исходники к программке Draw

Лучший вариант инструкции по Borland C++ Builder 6 можно посмотреть здесь

 

14
 
Теги: C++   Borland   Уроки   Builder  
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити

Разное

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

Интересно

Не давайте детям играть с ПДУ при работающем телевизоре.

Похожие новости