Кафедра Автоматизации производственных процессов

Кафедра Автоматизации производственных процессов

А.Б.Кикин

ТЕХНОЛОГИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

ПРИМЕРЫ ПРОГРАММ НА С++

Файл СОДЕРЖАНИЕ Стр.
FIGURES1.CPP Одна окружность в центре экрана, наследование  
FIGURES2.CPP Окружность и треугольник – конструкторы, чистая виртуальная функция, абстрактный класс
FIGURES3.CPP Две окружности и два треугольника  
FIGURES4.CPP Использование указателя на базовый класс  
FIGURES5.CPP Четыре указателя и цикл для вывода на экран  
FIGURES6.CPP Интерфейс: изменение цвета - {Tab}, выход - {Esc}  
FIGURES7.CPP Функция движения фигуры и интерфейс  
FIGURES8.CPP Головная программа и заголовочный файл
FIGURES8.H Заголовочный файл с описанием классов  
2-1.CPP Пустое окно с полной функциональностью (Win API32)  
8-3.CPP Фигуры Лиссажу (Win API32)  
AMPER_A.CPP Закон Ома: головная программа (C++Builder)
AMPER_1.CPP Закон Ома: обработчики (EXE требует библиотеку)  
AMPER1.CPP Закон Ома: головная программа (C++Builder)
AMPER1_.CPP Закон Ома: обработчики с проверкой ввода

Санкт-Петербург

// ПРОГРАММА FIGURES1

#include <graphics.h>

#include <bios.h>

Class TFigure

{ private:

int color;

int width;

public:

void setcolor ( int c );

void setwidth ( int w );

};

Void TFigure :: setcolor ( int c )

{ color = c; }

Void TFigure :: setwidth ( int w )

{ width = w; }

Class Circle : public TFigure

{ private:

int xC;

int yC;

int rad;

public:

void draw ( int x, int y, int r );

};

Void Circle :: draw (int x, int y, int r )

{ circle ( x, y, r );

}

Main ()

{ Circle c1;

int grmode, grdriver= DETECT;

initgraph ( &grdriver, &grmode, "" );

c1.setcolor ( WHITE );

c1.setwidth ( 1 );

c1.draw ( getmaxx()/2, getmaxy()/2, 50 );

bioskey(0);

closegraph();

return 0;

}

// ПРОГРАММА FIGURES2

#include <graphics.h>

#include <bios.h>

#define MAX_POINTS 4

Class TFigure

{ private:

int color;

int width;

int num_p;

int x[MAX_POINTS];

int y[MAX_POINTS];

public:

virtual void draw ( void ) = 0;

void setcol ( int c );

void setwidth ( int w );

void setnum_p ( int n );

void setxy ( int n, int xn, int yn );

int getcol ( void );

int getwidth ( void );

int getxn ( int n );

int getyn ( int n );

};

Void TFigure :: setcol ( int c )

{ color = c; }

Void TFigure :: setwidth ( int w )

{ width = w; }

void TFigure :: setnum_p ( int n )

{ num_p = n; }

Int TFigure :: getwidth ( void )

{ return width; }

Int TFigure :: getcol ( void )

{ return color; }

Void TFigure :: setxy ( int n, int xn, int yn )

{ x[n] = xn;

y[n] = yn;

}

Int TFigure :: getxn ( int n )

{ return x[n]; }

Int TFigure :: getyn ( int n )

{ return y[n]; }

Class Circle : public TFigure

{ private:

int rad;

public:

Circle ( int x, int y, int r );

virtual void draw ( void );

};

Circle :: Circle ( int a, int b, int r )

{ setnum_p ( 1 );

setxy ( 0, a, b );

rad = r;

}

Void Circle :: draw ( void )

{ setlinestyle ( 0, 0, getwidth() );

setcolor ( getcol() );

circle ( getxn ( 0 ), getyn ( 0 ), rad );

}

Class Triangle : public TFigure

{ public:

virtual void draw ( void );

Triangle ( int a1, int b1, int a2, int b2, int a3, int b3 );

};

Triangle :: Triangle ( int a1, int b1, int a2, int b2, int a3, int b3 )

{ setnum_p ( 3 );

setxy ( 0, a1, b1 );

setxy ( 1, a2, b2 );

setxy ( 2, a3, b3 );

}

Void Triangle :: draw ( void )

{ setlinestyle ( SOLID_LINE, 1, getwidth() );

setcolor ( getcol() );

line ( getxn(0), getyn(0), getxn(1), getyn(1) );

line ( getxn(1), getyn(1), getxn(2), getyn(2) );

line ( getxn(0), getyn(0), getxn(2), getyn(2) );

}

Main ()

{ Circle c1(320, 240, 150);

Triangle t1 = Triangle ( 100, 100, 400, 150, 250, 300 );

int grmode, grdriver=DETECT;

initgraph ( &grdriver, &grmode, "" );

c1.setcol ( MAGENTA );

c1.setwidth ( NORM_WIDTH );

c1.draw ();

t1.setcol ( YELLOW );

t1.setwidth ( THICK_WIDTH );

t1.draw ();

bioskey(0);

closegraph();

return 0;

}

// ПРОГРАММА FIGURES3

#include <graphics.h>

#include <bios.h>

#define MAX_POINTS 4

Class TFigure

{ private:

int color;

int width;

int num_p;

int x[MAX_POINTS];

int y[MAX_POINTS];

public:

virtual void draw ( void ) = 0;

void setcol ( int c );

void setwidth ( int w );

void setnum_p ( int n );

void setxy ( int n, int xn, int yn );

int getcol ( void );

int getwidth ( void );

int getxn ( int n );

int getyn ( int n );

};

Void TFigure :: setcol ( int c )

{ color = c; }

Void TFigure :: setwidth ( int w )

{ width = w; }

void TFigure :: setnum_p ( int n )

{ num_p = n; }

Int TFigure :: getwidth ( void )

{ return width; }

Int TFigure :: getcol ( void )

{ return color; }

Void TFigure :: setxy ( int n, int xn, int yn )

{ x[n] = xn;

y[n] = yn;

}

Int TFigure :: getxn ( int n )

{ return x[n]; }

Int TFigure :: getyn ( int n )

{ return y[n]; }

Class Circle : public TFigure

{ private:

int rad;

public:

Circle ( int x, int y, int r );

virtual void draw ( void );

};

Circle :: Circle ( int a, int b, int r )

{ setnum_p ( 1 );

setxy ( 0, a, b );

rad = r;

}

Void Circle :: draw ( void )

{ setlinestyle ( 0, 0, getwidth() );

setcolor ( getcol() );

circle ( getxn ( 0 ), getyn ( 0 ), rad );

}

Class Triangle : public TFigure

{ public:

virtual void draw ( void );

Triangle ( int a1, int b1, int a2, int b2, int a3, int b3 );

};

Triangle :: Triangle ( int a1, int b1, int a2, int b2, int a3, int b3 )

{ setnum_p ( 3 );

setxy ( 0, a1, b1 );

setxy ( 1, a2, b2 );

setxy ( 2, a3, b3 );

}

Main ()

{ Circle c1( 320, 240, 150 );

Circle c2( 320, 240, 50 );

Triangle t1( 100, 100, 400, 150, 250, 300 );

Triangle t2( 400, 400, 600, 400, 500, 300 );

int grmode, grdriver=DETECT;

initgraph ( &grdriver, &grmode, "" );

c1.setcol ( MAGENTA );

c1.setwidth ( NORM_WIDTH );

c1.draw ();

c2.setcol ( GREEN );

c2.setwidth ( THICK_WIDTH );

c2.draw ();

t1.setcol ( YELLOW );

t1.setwidth ( NORM_WIDTH );

t1.draw ();

t2.setcol ( BLUE );

t2.setwidth ( THICK_WIDTH );

t2.draw ();

bioskey(0);

closegraph();

return 0;

}

// ПРОГРАММА FIGURES4

#include <graphics.h>

#include <bios.h>

#define MAX_POINTS 4

Class TFigure

{ private:

int color;

int width;

int num_p;

int x[MAX_POINTS];

int y[MAX_POINTS];

public:

virtual void draw ( void ) = 0;

void setcol ( int c );

void setwidth ( int w );

void setnum_p ( int n );

void setxy ( int n, int xn, int yn );

int getcol ( void );

int getwidth ( void );

int getxn ( int n );

int getyn ( int n );

};

Main ()

{ Circle c1( 320, 240, 150 );

Circle c2( 320, 240, 50 );

Triangle t1( 100, 100, 400, 150, 250, 300 );

Triangle t2( 400, 400, 600, 400, 500, 300 );

TFigure *pf=&t2;

int grmode, grdriver=DETECT;

initgraph ( &grdriver, &grmode, "" );

c1.setcol ( MAGENTA );

c1.setwidth ( NORM_WIDTH );

c1.draw ();

c2.setcol ( GREEN );

c2.setwidth ( THICK_WIDTH );

c2.draw ();

t1.setcol ( YELLOW );

t1.setwidth ( NORM_WIDTH );

t1.draw ();

pf->setcol ( BLUE );

pf->setwidth ( THICK_WIDTH );

pf->draw ();

bioskey(0);

closegraph();

return 0;

}

// ПРОГРАММА FIGURES5

#include <graphics.h>

#include <bios.h>

#define MAX_POINTS 4

// *************************************

Class TFigure

{ private:

int color;

int width;

int num_p;

int x[MAX_POINTS];

int y[MAX_POINTS];

public:

virtual void draw ( void ) = 0;

void setcol ( int c );

void setwidth ( int w );

void setnum_p ( int n );

void setxy ( int n, int xn, int yn );

int getcol ( void );

int getwidth ( void );

int getxn ( int n );

int getyn ( int n );

};

Main ()

{ Circle c1( 320, 240, 150 );

Circle c2( 320, 240, 50 );

Triangle t1( 100, 100, 400, 150, 250, 300 );

Triangle t2( 400, 400, 600, 400, 500, 300 );

TFigure *pf[4];

int grmode, grdriver=DETECT, i, key;

initgraph ( &grdriver, &grmode, "" );

pf[0] = &c1;

pf[1] = &c2;

pf[2] = &t1;

pf[3] = &t2;

pf[3]->setcol ( BLUE );

pf[3]->setwidth ( THICK_WIDTH );

for (i=0; i<4; i++ )

{ pf[i]->setcol ( MAGENTA + i*2 );

pf[i]->setwidth ( NORM_WIDTH );

pf[i]->draw ();

}

key = bioskey(0);

closegraph();

return 0;

}

// ПРОГРАММА FIGURES6

#include <graphics.h>

#include <bios.h>

#define MAX_POINTS 4

// *************************************

Class TFigure

{ private:

int color;

int width;

int num_p;

int x[MAX_POINTS];

int y[MAX_POINTS];

public:

virtual void draw ( void ) = 0;

void setcol ( int c );

void setwidth ( int w );

void setnum_p ( int n );

void setxy ( int n, int xn, int yn );

int getcol ( void );

int getwidth ( void );

int getxn ( int n );

int getyn ( int n );

};

Main ()

{ Circle c1( 320, 240, 150 );

Circle c2( 320, 240, 50 );

Triangle t1( 100, 100, 400, 150, 250, 300 );

Triangle t2( 400, 400, 600, 400, 500, 300 );

TFigure *pf[NUM_F];

int grmode, grdriver=DETECT, i, key;

initgraph ( &grdriver, &grmode, "" );

pf[0] = &c1;

pf[1] = &c2;

pf[2] = &t1;

pf[3] = &t2;

for (i=0; i<NUM_F; i++ )

{ pf[i]->setcol ( MAGENTA + i*2 );

pf[i]->setwidth ( NORM_WIDTH );

pf[i]->draw ();

}

i = -1;

do { key = bioskey(0);

if ( key == 0x0F09 ) // Tab

{ i++;

if ( i == NUM_F )

i = 0;

pf[i]->setcol ( pf[i]->getcol() + 1 );

pf[i]->setwidth ( THICK_WIDTH );

pf[i]->draw ();

}

} while ( key != 0x011B ); // Esc

closegraph();

return 0;

}

// ПРОГРАММА FIGURES7

#include <graphics.h>

#include <bios.h>

#define MAX_POINTS 4

#define STEP 10

// *************************************

Class TFigure

{ private:

int color;

int width;

int num_p;

int x[MAX_POINTS];

int y[MAX_POINTS];

public:

virtual void draw ( void ) = 0;

void move ( int k );

void setcol ( int c );

void setwidth ( int w );

void setnum_p ( int n );

void setxy ( int n, int xn, int yn );

int getcol ( void );

int getwidth ( void );

int getxn ( int n );

int getyn ( int n );

};

Main ()

{ Circle c1( 320, 240, 150 );

Circle c2( 320, 240, 50 );

Triangle t1( 100, 100, 400, 150, 250, 300 );

Triangle t2( 400, 400, 600, 400, 500, 300 );

TFigure *pf[NUM_F];

int grmode, grdriver=DETECT, i, key, prev, col;

initgraph ( &grdriver, &grmode, "" );

pf[0] = &c1;

pf[1] = &c2;

pf[2] = &t1;

pf[3] = &t2;

for (i=0; i<NUM_F; i++ )

{ pf[i]->setcol ( MAGENTA + i*2 );

pf[i]->setwidth ( NORM_WIDTH );

pf[i]->draw ();

}

i = -1;

do { key = bioskey(0);

if ( key == 0x0F09 ) // Tab

{ if ( i == -1 )

;

Else

{ col = pf[prev]->getcol();

pf[prev]->setcol ( BLACK );

pf[prev]->draw ();

pf[prev]->setcol ( col );

pf[i]->setwidth ( NORM_WIDTH );

pf[prev]->draw ();

}

i++;

if ( i == NUM_F )

i = 0;

pf[i]->setwidth ( THICK_WIDTH );

pf[i]->draw ();

prev = i;

}

if ( i > -1 )

pf[i]->move ( key );

} while ( key != 0x011B ); // Esc

closegraph();

return 0;

}

// ПРОГРАММА FIGURES8

#include <graphics.h>

#include <bios.h>

#include "figures8.h"

#define NUM_F 4

Main ()

{ Circle c1( 320, 240, 150 );

Circle c2( 320, 240, 50 );

Triangle t1( 100, 100, 400, 150, 250, 300 );

Triangle t2( 400, 400, 600, 400, 500, 300 );

TFigure *pf[NUM_F];

int grmode, grdriver=DETECT, i, key, prev, col;

initgraph ( &grdriver, &grmode, "" );

pf[0] = &c1;

pf[1] = &c2;

pf[2] = &t1;

pf[3] = &t2;

for (i=0; i<NUM_F; i++ )

{ pf[i]->setcol ( MAGENTA + i*2 );

pf[i]->setwidth ( NORM_WIDTH );

pf[i]->draw ();

}

i = -1;

do { key = bioskey(0);

if ( key == 0x0F09 ) // Tab

{ if ( i != -1 )

{ col = pf[prev]->getcol();

pf[prev]->setcol ( BLACK );

pf[prev]->draw ();

pf[prev]->setcol ( col );

pf[i]->setwidth ( NORM_WIDTH );

pf[prev]->draw ();

}

i++;

if ( i == NUM_F )

i = 0;

pf[i]->setwidth ( THICK_WIDTH );

pf[i]->draw ();

prev = i;

}

if ( i > -1 )

pf[i]->move ( key );

} while ( key != 0x011B ); // Esc

closegraph();

return 0;

}

// ФАЙЛ ВКЛЮЧЕНИЯ (ЗАГОЛОВОЧНЫЙ) FIGURES8.H

#include <graphics.h>

#define MAX_POINTS 4

#define STEP 10

// *************************************

Class TFigure

{ private:

int color;

int width;

int num_p;

int x[MAX_POINTS];

int y[MAX_POINTS];

public:

void setcol ( int c ) { color = c; }

void setwidth ( int w ) { width = w; }

void setnum_p ( int n ) { num_p = n; }

int getcol ( void ) { return color; }

int getwidth ( void ) { return width; }

int getxn ( int n ) { return x[n]; }

int getyn ( int n ) { return y[n]; }

Virtual void draw ( void )

{ setlinestyle ( 0, 0, getwidth() );

setcolor ( getcol() );

circle ( getxn ( 0 ), getyn ( 0 ), rad );

}

};

// ***************************************

Virtual void draw ( void )

{ setlinestyle ( SOLID_LINE, 1, getwidth() );

setcolor ( getcol() );

line ( getxn(0), getyn(0), getxn(1), getyn(1) );

line ( getxn(1), getyn(1), getxn(2), getyn(2) );

line ( getxn(0), getyn(0), getxn(2), getyn(2) );

}

};

// 2-1.CPP

/* --- Простейшая программа с главным окном - 13.01.2003 [К.Г.Финогенов] */

#define STRICT

#include <windows.h>

#include <windowsx.h>

/* --- Прототип оконной функции пользователя */

LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM );

/* --- Главная функция */

Switch ( msg )

{ case WM_DESTROY:

PostQuitMessage ( 0 );

return 0;

default:

return DefWindowProc ( hwnd, msg, wParam, lParam );

}

}

// File 8-3.cpp

#define STRICT

#include <windows.h>

#include <windowsx.h>

#include <commctrl.h>

#include <math.h> // sin(), acos()

#include "8-3.h"

/* --- Глобальные переменные прорграммы */

//int nPhase=0; // Сдвиг фаз

int nFreq=1; // Отношение частот

HINSTANCE hInstance;

HWND hwndGraph, hwndTrack, hwndScroll, hwndStatic;

HPEN hRedPen;

HBRUSH hGreyBrush;

SCROLLINFO sinfo;

/* --- Главная функция */

Switch ( msg )

{ HANDLE_MSG ( hwnd, WM_CREATE, OnCreate );

HANDLE_MSG ( hwnd, WM_HSCROLL, OnHScroll );

HANDLE_MSG ( hwnd, WM_GETMINMAXINFO, OnGetMinMaxInfo );

HANDLE_MSG ( hwnd, WM_DESTROY, OnDestroy );

default:

return DefWindowProc ( hwnd, msg, wParam, lParam );

}

}

/* --- Обработчик сообщения WM_CREATE */

10, 10, 220, 220,

hwnd, NULL, hInstance, NULL );

// --- Линейка с ползунком

hwndTrack = CreateWindowEx ( 0, TRACKBAR_CLASS, NULL,

WS_CHILD|WS_VISIBLE|TBS_AUTOTICKS,

250, 55, 208, 30,

hwnd, NULL, hInstance, NULL );

SendMessage ( hwndTrack, TBM_SETRANGE, TRUE, MAKELPARAM(1,10) );

SendMessage ( hwndTrack, TBM_SETPAGESIZE, 0, 1 );

SendMessage ( hwndTrack, TBM_SETPOS, TRUE, 1 );

// --- Поясняющие надписи на линейке с ползунком

CreateWindow ( "STATIC", "Отношение частот по осям",

WS_CHILD|WS_VISIBLE|SS_LEFT,

260, 25, 220, 22,

hwnd, NULL, hInstance, NULL );

CreateWindow ( "STATIC", "1 2 3 4 5 6 7 8 9 10",

WS_CHILD|WS_VISIBLE|SS_LEFT,

260, 85, 220, 22,

hwnd, NULL, hInstance, NULL );

// --- Линейка прокрутки

sinfo.cbSize = sizeof(SCROLLINFO);

sinfo.fMask = SIF_ALL;

sinfo.nMin = 0;

sinfo.nMax = 180;

sinfo.nPage = 15;

sinfo.nPos = 0;

hwndScroll = CreateWindow ( "SCROLLBAR", NULL,

WS_CHILD|WS_VISIBLE,

260, 160, 200, 20,

hwnd, NULL, hInstance, NULL );

SetScrollInfo ( hwndScroll, SB_CTL,&sinfo, TRUE );

// --- Поясняющие надписи для линейки прокрутки

CreateWindow ( "STATIC", "Сдвиг фаз в градусах",

WS_CHILD|WS_VISIBLE|SS_LEFT,

280, 130, 200, 22,

hwnd, NULL, hInstance, NULL );

CreateWindow ( "STATIC", "0",

WS_CHILD|WS_VISIBLE|SS_LEFT,

280, 180, 22, 22,

hwnd, NULL, hInstance, NULL );

CreateWindow ( "STATIC", "180",

WS_CHILD|WS_VISIBLE|SS_LEFT,

430, 180, 40, 22,

hwnd, NULL, hInstance, NULL );

// --- Статический элемент для вывода сдвига фаз

hwndStatic = CreateWindow ( "STATIC", "00",

WS_CHILD|WS_VISIBLE|SS_LEFT,

355, 200, 50, 20,

hwnd, NULL, hInstance, NULL );

return TRUE;

}

Switch ( msg )

{ HANDLE_MSG ( hwnd, WM_PAINT, GraphOnPaint );

default:

return DefWindowProc ( hwnd, msg, wParam, lParam );

}

}

/* --- Обработчик сообщения WM_PAINT окна графики */

Void OnDestroy ( HWND )

{

DeleteObject ( hGreyBrush );

DeleteObject ( hRedPen );

PostQuitMessage(0);

}

// Amper_A.cpp

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

#include <vcl.h>

#pragma hdrstop

USERES("Amper_A.res");

USEFORM("Amper_1.cpp", Form1);

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

Try

{

Application->Initialize();

Application->CreateForm(__classid(TForm1), &Form1);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

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

// Amper_1.cpp

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

#include <vcl.h>

#pragma hdrstop

#include "Amper_1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

double u=10, i, r=5;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

//u = StrToFloat ( Edit1->Text );

//r = StrToFloat ( Edit2->Text );

u = atof ( Edit1->Text.c_str() );

r = atof ( Edit2->Text.c_str() );

i = u/r;

Edit1->Text = FloatToStrF ( u, ffFixed, 7, 2 ) + " V";

Edit2->Text = FloatToStrF ( r, ffFixed, 7, 1 ) + " Om";

Label4->Caption = "Ток = " +

FloatToStr ( i ) + " А";

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Form1->Close();

}

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Edit1->Text = FloatToStr ( u ) + " V";

Edit2->Text = FloatToStr ( r ) + " Om";

}

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

void __fastcall TForm1::Edit2Click(TObject *Sender)

{

u = atof ( Edit1->Text.c_str() );

Edit1->Text = FloatToStrF ( u, ffFixed, 7, 2 ) + " V";

}

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

void __fastcall TForm1::Edit1Click(TObject *Sender)

{

r = atof ( Edit2->Text.c_str() );

Edit2->Text = FloatToStrF ( r, ffFixed, 7, 1 ) + " Om";

}

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

// Amper1.cpp

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

#include <vcl.h>

#pragma hdrstop

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

USEFORM("amper1_.cpp", Form1);

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

Try

{

Application->Initialize();

Application->CreateForm(__classid(TForm1), &Form1);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

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

/* Amper1_.cpp

Float u; // напряжение

Float r; // сопротивление

Float i; // ток

// проверим, введены ли данные в поля Напряжение и Сопротивление

if ( ((Edit1->Text).Length() == 0) || ((Edit2->Text).Length() == 0))

{

MessageDlg("Надо ввести напряжение и сопротивление",

mtInformation, TMsgDlgButtons() << mbOK, 0);

if ((Edit1->Text).Length() == 0)

Edit1->SetFocus(); // курсор в поле Напряжение

Else

Edit2->SetFocus(); // курсор в поле Сопротивление

return;

};

// получить данные из полей ввода

u = StrToFloat(Edit1->Text);

r = StrToFloat(Edit2->Text);

// вычислить ток

Try

{

i = u/r;

}

catch (EZeroDivide &e)

{

ShowMessage("Величина опротивления не должна быть равна нулю");

Edit2->SetFocus(); // курсор в поле Сопротивление

return;

}

// вывести результат в поле Label4

Label4->Caption = "Ток : " +

FloatToStrF(i,ffGeneral,7,2) + " A";

}

// нажатие клавиши в поле Напряжение

// коды запрещенных клавиш заменим нулем, в результате

// символы этих клавиш в поле редактирования не появятся

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

// Key - код нажатой клавиши

// проверим, является ли символ допустимым

if ( ( Key >= '0') && ( Key <= '9' ) ) // цифра

return;

// Глобальная переменная Decimalseparator

// содержит символ, используемый в качестве разделителя

// при записи дробных чисел

if ( Key == DecimalSeparator)

{

if ( (Edit1->Text).Pos(DecimalSeparator) != 0 )

Key = 0; // разделитель уже введен

return;

}

if (Key == VK_BACK) // клавиша <Backspace>

return;

if ( Key == VK_RETURN) // клавиша <Enter>

{

Edit2->SetFocus();

return;

};

// остальные клавиши запрещены

Key = 0; // не отображать символ

}

// нажатие клавиши в поле Сопротивление

void __fastcall TForm1::Edit2KeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if ( ( Key >= '0') && ( Key <= '9' ) ) // цифра

return;

if ( Key == DecimalSeparator) {

if ( (Edit2->Text).Pos(DecimalSeparator) != 0 )

Key = 0; // разделитель уже введен

return;

}

if (Key == VK_BACK) // клавиша <Backspace>

return;

if ( Key == VK_RETURN) // клавиша <Enter>

{

Button1->SetFocus(); // переход к кнопке Вычислить

// повторное нажатие клавиши <Enter>

// активизирует процесс вычисления тока

// см. Button1Click

return;

};

// остальные клавиши запрещены

Key = 0; // не отображать символ

}

// щелчок на кнопке Завершить

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Form1->Close(); // закрыть форму приложения

}

Кафедра Автоматизации производственных процессов

А.Б.Кикин

Наши рекомендации