Кафедра Автоматизации производственных процессов
Кафедра Автоматизации производственных процессов
А.Б.Кикин
ТЕХНОЛОГИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
ПРИМЕРЫ ПРОГРАММ НА С++
Файл | СОДЕРЖАНИЕ | Стр. |
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(); // закрыть форму приложения
}
Кафедра Автоматизации производственных процессов
А.Б.Кикин