Смекни!
smekni.com

Общий вид программного модуля AddTab:

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

#include <vcl&bsol;vcl.h>

#pragma hdrstop

#include "Unit2.h"

#include "Unit1.h"

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

#pragma link "Grids"

#pragma resource "*.dfm"

TAddTab *AddTab;

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

__fastcall TAddTab::TAddTab(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TAddTab::BitBtn1Click(TObject *Sender)

{

Form1->Show();

AddTab->Hide();

}

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

void __fastcall TAddTab::BitBtn3Click(TObject *Sender)

{

Form1->Close();

}

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

void __fastcall TAddTab::FormClose(TObject *Sender, TCloseAction &Action)

{

Application->Terminate();

}

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

void __fastcall TAddTab::SpeedButton1Click(TObject *Sender)

{

if (SpeedButton1->Down==true)

{Image1->Visible=false;

Shape1->Brush->Color=clRed;

}

}

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

void __fastcall TAddTab::SpeedButton2Click(TObject *Sender)

{

if (SpeedButton1->Down=true)

{Image1->Visible<<true;

Shape1->Brush->Color=clLime;

}

}

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

void __fastcall TAddTab::Button1Click(TObject *Sender)

{

int x,y;

for (x=0; (x<=StringGrid1->ColCount-1);x++)

for ( y=0;(y<=StringGrid1->RowCount-1);y++)

StringGrid1->Cells[x][y]=("Coord. "+

IntToStr(x)+"-"+IntToStr(y));

}

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

void __fastcall TAddTab::BitBtn4Click(TObject *Sender)

{

ShowMessage(" Test ");

}

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

void __fastcall TAddTab::BitBtn2Click(TObject *Sender)

{

ShowMessage("Пока НЕТ");

}

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

void __fastcall TAddTab::MaskEdit1Change(TObject *Sender)

{

}

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

Рассмотрим еще один проект. Поместим на форму согласно рисунка компоненты:

TabControl (на него помести панель Panel с именем Tab1), ProgressBar, TrackBar, TreeView, Timer, OpenDialog, Edit, Label (с именем TreeView), Panel, Button (с именем OpenDialog).

Дважды щелкнем на свойстве Tabs сомпоненты TabControl. В редакторе строк введем названия закладок – Tab1, Tab2, Tab3.

Свойство Max компонентов ProgressBar и TrackBar установим равное 10.

В событие OnChange компоненты TrackBar введем код:

ProgressBar1->Position=TrackBar1->Position;

Дважды щелкнем по компоненте Timer и добавим код к событию OnTimer, предварительно указав свойство Interval равным 1000(1 секунда):

i++; //интервал счетчика 1 секунда

Panel2->Caption = IntToStr(i);// панель показывает в секундах время

// работы программы

Необходимо внимательно посмотреть на листинг программы и обратить внимание на переменную i.

Для компонента TreeView дважды щелкнем на поле справа от свойства Items, а затем добавим к дереву пункт Level1, затем к узлу второго уровня пункт Level2 и далее Level3.

К кнопке OpenDialog добавим код:

OpenDialog1->FileName="*.*";

if (OpenDialog1->Execute()){

Edit1->Text=OpenDialog1->FileName;

В результате программа прнимет вид:

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

#include <vcl&bsol;vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma resource "*.dfm"

TForm1 *Form1;

int i=0;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::TrackBar1Change(TObject *Sender)

{

ProgressBar1->Position=TrackBar1->Position;

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

OpenDialog1->FileName="*.*";

if (OpenDialog1->Execute()){

Edit1->Text=OpenDialog1->FileName;

}

}

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

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

i++;

Panel2->Caption = IntToStr(i);

}

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

4.8.Графические компоненты.

Для работы с графикой в C++Builder имеются графические компоненты:

- Image - используется для импоpта на фоpму pастpовых изобpажений, пиктогpамм и метафайлов;

- Shape - используется для создания геометpических фигуp;.

- PaintBox - используйется для создания рисунков на компонентах, котоpые не имеют свойства Canvas (напpимеp, компонент Panel).

В C++Builder гpафические опеpации выполняются с использованием свойства Canvas, котоpое поддеpживается многими компонентами. Напpимеp, свойство Canvas есть у фоpмы, а так же у TBitmap, TComboBox, TListBox, TPaintBox и дpугих компонентов.

Canvas пpедставляет собой объект, наделенный собственными полномочиями, для чего класс TCanvas поддеpживает множество свойств, методов и событий. Чаще всего используется свойство Canvas.

В пpоцессе pакзpаботки это свойство недоступно в окне Object Inspector. Для того, чтобы использовать Canvas, необходимо написать опеpатоpы, котоpые пpисваивают свойствам Canvas значения и вызывают методы Canvas.

В таблице приведены методы, свойства и события, реализуемые TСanvas.

Установить это... Чтобы сделать это...
Arc Нарисовать на холсте дугу.
Assign Присвоить один устойчивый объект другому.
Brush Определить свойства кисти
Chord Начертить линию поперек эллипса
ClassName Получить имя класса объекта
ClassParent Получить родительский класс объекта
ClassType Получить действительный тип объекта
CopyMode Определить способ копирования на холст
CopyRect Скопировать прямоугольную область с другого холста
Create Создать объект холста
Destroy Разрушить объект
Draw Нарисовать на холсте графику
DrawFocus-rect Нарисовать на холсте прямоугольник фокуса
Ellipse Нарисовать на холсте эллипс
FillRect Нарисовать на холсте заполненный прямоугольник
FloodFill Заполнить область холста
Font Определить шрифт, используемый для визуализации текста на холсте
FrameRect Нарисовать на холсте незаполненный прямоугольник
Free Безопасно разрушить объект
Handle Определить НDС для объекта холста
InheritsFrom Определить, происходит ли объект от определенного класса
InstanceSize Определить объем памяти, распределенной под объект.
LineTo Нарисовать на холсте линию
MoveTo Переместить текущее положение пера
OnChange Данное событие происходит при изменении поверхности холста
OnChanging Данное событие происходит перед тем, как холст будет модифицирован
Pen Определить вид пера для рисования на холсте
PenPos Определить текущую позицию пера
Pie Нарисовать объект в форме пирога
Pixels Доступ к отдельным пикселям холста
Polygon Нарисовать многоугольник
PolyLine Нарисовать серию соединенных линий
Rectangle Нарисовать заполненный прямоугольник
Refresh J Обновить холст
RoundRect Нарисовать заполненный прямоугольник с закругленными углами
StretchDraw Вытянуть образ так, чтобы он размещался внутри заданного прямоугольника
TextHeight Определить высоту в пикселях текста, рисуемого на холсте
TextOut Вывести текст на холст
TextRect Определить кадрирующий прямоугольник для текста на холсте
TextWidth Определить ширину в пикселях текста, рисуемого на холсте

Рассмотрим примеры:

Все визуальные компоненты имеют свойства Top (координата X) и Left (координата Y). Значения X и Y измеряются в пикселах (пиксел - наименьшая частица поверхности рисунка, которой можно манипулировать).

В зависимости от количества бит, на пиксел различаются различные виды графики от 8- битовой до 24-битовой. В связи с этим возможно отображение до 16 миллионов цветов в стандарте RGB. Рассмотрим пример рисования синусоиды при нажатии кнопки на форме:

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

#include <vcl&bsol;vcl.h>

#include <math.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

float X,Y;

int PX,PY;

intH;

//определяем половину стороны внизу формы

H=Form1->Height / 2;

for (PX= 0; PX < Form1->Width; PX++) {

//масштаб X приводится к 2 ПИ, чтоб сделать

//полную волну

X=PX*(2*3.1415/Form1->Width);

Y=sin(X);

PY=(0.6*Y*H)+H;

Canvas->Pixels[PX][PY]= 0;//устанавливаем черный цвет пикселя

}

}

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

Каждое свойство Canvas имеет воображаемое перо для рисова-

ния линий и контуров и команды:

- Form1->Canvas->MoveTo(X,Y); -передвигает перо в точку с

координатами(X,Y) без рисования;

- Form1->Canvas->Point(X,Y);- рисует точку;

- Form1->Canvas->LineTo(X,Y); -чертит линию от текущей по-

зиции до точки с координатами X,Y;

Form1->Canvas->Pen->Color:=цвет; - устанавливает цвет пе-

ра(clBlue - голубой или RGB(0,0,255));

- Form1->Canvas->Pen->Width:=толщина; - устанавливает толщи-

ну пера в пикселях;

- Form1->Canvas->Pen->Style:=стиль; - устанавливает стиль пе-

ра(например,пунктирная линия - psDot);

- Form1->Canvas->Pen->Mode:=режим; - устанавливает режим ри-

сования(pmNot- цвет пера инверсный цвету фона, pmCopy -

перо текущего цвета);

- Form1->Canvas->Brush->Color:=цвет; - устанавливает цвет

закрашенного графического объекта;

- Form1->Canvas->Brush->Style:=стиль; - стиль закраски(напри-

мер,bsSolid - закраска одним цветом, bsCross -решеткой).

Анимация в C++ Builder.

Анимация - это движущаяся графика.

Рассмотрим программу, которая создает анимационную последовательность изображений 10 эллипсов, которые движутся от середины компонента PaintBox к его границам в случайных направлениях при нажатии кнопки Button.

Процедура рисует эллипс, а затем стирает его изображение.

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

#include <vcl&bsol;vcl.h>

#pragma hdrstop

#include <math.h> // <<--включить библиотеку математических функций

#include "Unit1.h"

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