Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KZ_po_KIT.doc
Скачиваний:
2
Добавлен:
09.12.2018
Размер:
869.38 Кб
Скачать

3.8 Текст

Вывод текста на поверхность графического объекта обеспечивает метод TextOut. Инструкция вызова метода TextOut в общем виде выглядит следующим образом:

Image1->Canvas->TextOut(х, у, "Текст");

Параметр "Текст" задает выводимый текст. Параметры х и у определяют координаты точки графической поверхности, от которой выполняется вывод текста (рис. 7).

Рис. 7. Координаты области вывода текста

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

Таблица 4. Свойства объекта TFont

Свойство

Определяет

Name

Используемый шрифт. В качестве значения следует использовать название шрифта (например, Arial)

Size

Размер шрифта в пунктах (points). Пункт – это единица измерения размера шрифта, используемая в полиграфии. Один пункт равен 1/72 дюйма

Style

Стиль начертания символов. Может быть: нормальным, полужирным, курсивным, подчеркнутым, перечеркнутым. Стиль задается при помощи следующих констант: fsBold (полужирный), fsItalic (курсив), fsUnderline (подчеркнутый), fsStrikeOut (перечеркнутый)

Color

Цвет символов. В качестве значения можно использовать константу типа TColor

Свойство style является множеством, что позволяет комбинировать необходимые стили. Например, инструкция, которая устанавливает стиль "полужирный подчёркнутый", выглядит так:

Image1->Canvas->Font->Style = TFontStyles()<<fsBold<<fsUnderline;

При выводе текста весьма полезны методы TextWidth и TextHeight, значениями которых являются соответственно ширина и высота области вывода текста, которые, очевидно, зависят от характеристик используемого шрифта. Обоим этим методам в качестве параметра передается строка, которую предполагается вывести на поверхность методом TextOut.

3.9 Точка

Поверхности, на которую программа может осуществлять вывод графики, соответствует объект Canvas. Свойство Pixels, представляющее собой двумерный массив типа TColor, содержит информацию о цвете каждой точки графической поверхности. Используя свойство Pixels, можно задать цвет любой точки графической поверхности, т. е. "нарисовать" точку. Например, инструкция

Canvas->Pixels[10][10] = clRed;

окрашивает точку поверхности формы в красный цвет.

Размерность массива Pixels определяется реальным размером графической поверхности. Размер графической поверхности формы (рабочей области, которую также называют клиентской) определяют свойства ClientWidth и ClientHeight, а размер графической поверхности компонента image – свойства Width и Height. Левой верхней точке рабочей области формы соответствует элемент Pixels [0][0], а правой нижней – Pixels[ClientWidth - 1][ClientHeight -1].

Построение электрической схемы

с использованием подпрограмм

Вариант 4

Составить программу на языке программирования С++ Builder для построения электрической схемы, изображенной на рис. 1. Для построения составить и использовать подпрограммы построения изображения отдельных элементов элементов схемы (линия, резистор, индуктивность и т.д.).

Рисунок 1. Электрическая схема УКВ регенератор с подавлением АМ.

Текст программы:

struct point // структура из координат x,y

{

int x,y;

};

point l;

enum pos {h,v,left,right,up,down}; // переключатель: горизонтально, вертикально,

//влево, вправо, вверх, вниз

TCanvas *t; // поверхность холста - указатель t

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

t=Image1->Canvas; // поверхность рисунка (холст) - Image1->Canvas

}

//подпрограмма передачи координаты x,y переменной структуры l

void set(int x, int y)

{ l.x = x;

l.y = y;

}

void set(point p)

{

l.x = p.x;

l.y = p.y;

}

// треугольник вправо

void triangle1(int x,int y)

{

t->MoveTo(x+20,y+8);

t->LineTo(x+20,y+18);

t->MoveTo(x+20,y+8);

t->LineTo(x+29,y+14);

t->MoveTo(x+29,y+14);

t->LineTo(x+20,y+18);

}

// треугольник вверх

void triangle(int x,int y)

{

t->MoveTo(x+20,y+8);

t->LineTo(x+15,y+18);

t->MoveTo(x+20,y+8);

t->LineTo(x+25,y+18);

t->MoveTo(x+15,y+18);

t->LineTo(x+25,y+18);

}

//антенна

void A(int x, int y)

{

t->MoveTo(x+20,y+8);

t->LineTo(x+20,y+28);

t->MoveTo(x+20,y+18);

t->LineTo(x+30,y+8);

t->MoveTo(x+20,y+18);

t->LineTo(x+10,y+8);

}

// транзистор

void tr(int x, int y)

{

t->MoveTo(x,y+26);

t->LineTo(x+24,y+26);

t->MoveTo(x+24,y+13);

t->LineTo(x+24,y+40);

t->MoveTo(x+24,y+25);

t->LineTo(x+40,y+15);

t->MoveTo(x+24,y+27);

t->LineTo(x+34,y+34);

//стрелка

t->MoveTo(x+40,y+40);

t->LineTo(x+29,y+36);

t->MoveTo(x+40,y+40);

t->LineTo(x+35,y+30);

t->MoveTo(x+35,y+30);

t->LineTo(x+29,y+36);

}

// подпрограмма изображения точки соединения

void kf(void)

{

t->Brush->Color=clBlack;

t->Ellipse(l.x-3,l.y-3,l.x+3,l.y+3);

t->FloodFill(l.x,l.y,clBlack,fsBorder);

t->Brush->Style=bsClear;

}

// подпрограмма изображения линий соединений: горизонтальных и вертикальных

void q(int len,pos q)

{

t->MoveTo(l.x,l.y); //установить начало линии

if(q){

t->LineTo(l.x,l.y+len); // линия вертикальная

l.y+=len;

}else{

t->LineTo(l.x+len,l.y); // линия горизонтальная

l.x+=len;

} }

// резистор: вертикальный или горизонтальный(с надписью)

void R(pos q,String s,pos p)

{

if(q){

t->Rectangle(l.x-7,l.y,l.x+7,l.y+40); // резистор вертикальный

switch(p){

case left:t->TextOutA(l.x-6-s.Length()*7,l.y+15,s);break; // надпись слева

case right:t->TextOutA(l.x+10,l.y+15,s);break; // надпись справа

}

l.y = l.y+40;

}else{

t->Rectangle(l.x,l.y-7,l.x+40,l.y+7); // резистор горизонтальный

switch(p){

case up:t->TextOutA(l.x+12,l.y-20,s);break; // надпись над элементом

case down:t->TextOutA(l.x+2,l.y+8,s);break; // надпись под элементом

}

l.x+=+40;

} }

// конденсатор (емкость) : вертикальная или горизонтальная(с надписью)

void C(pos q,String s,pos p)

{

if(q){ // конденсатор для вертикальной линии

t->MoveTo(l.x-12,l.y);

t->LineTo(l.x+12,l.y);

t->MoveTo(l.x-12,l.y+5);

t->LineTo(l.x+12,l.y+5);

switch(p){

case left:t->TextOutA(l.x-7-s.Length()*10,l.y+2,s);break; // надпись слева

case right:t->TextOutA(l.x+15,l.y+0,s);break; // надпись справа

}

l.y += 5;

}else{ // конденсатор для горизонтальной линии

t->MoveTo(l.x,l.y-12);

t->LineTo(l.x,l.y+12);

t->MoveTo(l.x+5,l.y-12);

t->LineTo(l.x+5,l.y+12);

switch(p){

case up:t->TextOutA(l.x+2,l.y-24,s);break; // надпись над элементом

case down:t->TextOutA(l.x-2,l.y+12,s);break; // надпись под элементом

}

l.x += 5;

} }

// индуктивность: вертикальная или горизонтальная (с надписью)

void L(pos q,String s,pos p)

{

if(q){ // индуктивность горизонтальная

for (int i=0;i<3;i++)

t->Arc(l.x-4,l.y+i*10,l.x+4,l.y+i*10+10,l.x,l.y+i*10+10,l.x,l.y+i*10);

switch(p){

case left:t->TextOutA(l.x-2-s.Length()*6,l.y+3,s);break; // надпись слева

case right:t->TextOutA(l.x+8,l.y-10,s);break; // надпись справа

}

l.y += 30;

}else{ // индуктивность вертикальная

for (int i=0;i<3;i++)

t->Arc(l.x+i*10,l.y-4,l.x+i*10+10,l.y+5,l.x+i*10+10,l.y,l.x+i*10,l.y);

switch(p){

case up:t->TextOutA(l.x+8,l.y-20,s);break; // надпись над элементом

case down:t->TextOutA(l.x+8,l.y+6,s);break; // надпись под элементом

}

l.x += 30;

} }

// текст

void text (int x, int y,String s)

{

t->TextOutA(l.x,l.y,s);

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

point s0,s1,s2,s3,s4,s5,s6;

triangle(300,50);

set(320,69);q(15,v);

R(v,"2.2K",right); q(10,v);kf();q(20,v);kf();s0=l;

q(30,h);kf();s1=l;

q(20,h); C(h,"10мк",up); q(30,h);

R(h,"400...680",down); q(25,h);

triangle1(450,141.5);

set(s1);q(20,v);C(v,"12*",right); q(20,v);kf();

q(20,v); C(v,"18",right); q(19,v);q(-35,h);

set(s0);q(7,v);L(v,"9вит",left); q(7,v);kf();s2=l;

q(30,h);

set(240,90);q(20,h); set(250,90); q(18,v);

C(v,"10n",right); q(20,v);kf(); s3=l;q(70,h);

set(s3); q(15,v);R(v,"100K*",left);q(10,v);kf();s4=l;

q(20,h);C(h,"50мк",up); q(20,h); q(45,v); q(25,h);kf(); s6=l;

q(15,v);R(v,"100",left);q(25,v);q(-10,h); q(20,h); //земля

A(160,130); set(180,145);q(20,v); C(v,"12",left); q(20,v); kf();s5=l; //антенна

q(10,h); q(7,v); L(v,"5вит",right); q(7,v); q(-10,h); //колебательный

set(s5);q(-10,h); q(20,v);C(v,"27",left); q(19,v); //контур

q(10,h);q(15,v);q(-10,h);q(20,h); //земля

set(175,255); q(10,h);

set(192,221);q(20,h);C(h,"50мк",down); q(80,h); tr(280,195);

set(s2); q(13,v); set(s6); q(-9,v);

set(s4);q(24,v);kf();

//надписи :

set(200,270);text (200,270,"P,1991.12.60");

set(360,240);text (360,240,"KT315Б");

set(480,150);text (480,150,"к УЗЧ");

set(310,40);text (310,40,"+3B");

set(205,208);text (205,208,"+");

set(260,185);text (205,208,"+");

}

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Close();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]