Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой СПО.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1 Мб
Скачать
☆

4.3.2 Окно построения графиков.

Как писалось выше данное окно создается из главного окна приложения и располагается внутри его области.

Данное окно содержит в себе элементы которые позволяют выбирать формулу по которой будет вестись расчет функции Y, задавать аргументы функции, цвет рисования графика, изменять масштаб рисования, хранить информацию о ранее нарисованных графиках и удалять нарисованные графики по номеру.

Для рисования графика необходимо:

-Выбрать нужную формулу посредством выпадающего списка(либо оставить формулу которая задана по умолчанию);

-Ввести аргументы(либо оставить значения по умолчанию), в активных областях(области ввода автоматически включаются или отключаются в зависимости от выбранной формулы расчета). Аргументы водятся целыми либо десятичными дробями, разделитель для десятичных дробей запятая;

-Выбрать нужный цвет графика(либо оставить цвет по умолчанию, при обрисовке цвет графика автоматически изменяется);

-Нажать на кнопку "Рисовать график", после этого произойдет черчения графика и добавления его данных в таблицу начерченных графиков(Только если есть различия с ранее начерченными графиками).

Для удаления графика по номеру необходимо:

-Щелчком по нужной строчке таблицы ранее начерченных графиков выбрать удаляемый график;

-Нажать на кнопку "Удалить", после чего произойдет удаление выбранного графика из области построения и из таблицы графиков.

Для сохранения нарисованных графиков необходимо выполнить из главного меню основного окна программы Файл->Сохранить.

Для изменения масштаба отрисовки на имеются соответствующие области ввода данных подписанные в рабочем окне программы, перерисовка графиков происходит сразу после внесения изменений в эти поля.

Для закрытия окна построения необходимо выполнить Файл->Закрыть текущую, либо щелкнуть по крестику в правом верхнем углу нужной области.

5 Листинг программы

Проект программы состоит из следующих составных частей(каждая из которых соответствует своей форме):

1.Unit2.cpp, Unit2.h в данных файлах происходит создание и работа с главной формой Form2.

2. Unit3.cpp, Unit3.h в данных файлах происходит создание и работа с формой на которой происходит построение графиков.

3. Unit4.cpp, Unit4.h в данных файлах происходит создание и работа с формой на которой происходит ввод параметров окон построения графиков.

4. ABOUT.cpp, ABOUT.h в данных файлах происходит создание и работа с формой содержащей краткий сведения о программе.

Далее по тексту последовательно в отдельных пунктах приведем содержимое заголовочного и программного файлов каждой из форм.

5.1 Листинг файлов главной формы Form2.

#ifndef Unit2H

#define Unit2H

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

#include <System.Classes.hpp>

#include <Vcl.Controls.hpp>

#include <Vcl.StdCtrls.hpp>

#include <Vcl.Forms.hpp>

#include <Vcl.Menus.hpp>

#include <Vcl.Dialogs.hpp>

#include <Vcl.ExtDlgs.hpp>

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

class TForm2 : public TForm

{

__published: // IDE-managed Components

TMainMenu *MainMenu1;

TMenuItem *N1;

TMenuItem *N2;

TMenuItem *N3;

TMenuItem *N4;

TMenuItem *N5;

TMenuItem *N6;

TMenuItem *N7;

TMenuItem *N9;

TMenuItem *N10;

TSavePictureDialog *SavePictureDialog1;

void __fastcall N2Click(TObject *Sender);

void __fastcall N7Click(TObject *Sender);

void __fastcall N5Click(TObject *Sender);

void __fastcall N4Click(TObject *Sender);

void __fastcall N3Click(TObject *Sender);

void __fastcall N10Click(TObject *Sender);

void __fastcall N1Click(TObject *Sender);

private: // User declarations

public: // User declarations

void SetMDIx(int Xmin,int Xmax);

void SetMDIscale(int Xscale,int Yscale);

void SetMDIaccuracy(int var);

void SetMDIColorSetka(TColor Color);

__fastcall TForm2(TComponent* Owner);

int Xmins,Xmaxs,Xscales,Yscales,flag;

float accuracy;

TColor MDIColorSetka;

};

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

extern PACKAGE TForm2 *Form2;

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

#endif

#include <vcl.h>

#pragma hdrstop

#include "Unit3.h"

#include "Unit2.h"

#include "Unit4.h"

#include "ABOUT.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

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

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

Xmins=-180;

Xmaxs=180;

Xscales=1;

Yscales=1;

accuracy=2;

MDIColorSetka=clMenuBar;

}

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

void TForm2::SetMDIx(int Xmin,int Xmax)

{

TForm1 *child;

for (int i=0; i < MDIChildCount; i++){

child = dynamic_cast<TForm1 *> (MDIChildren[i]);

child->Xrmin1=Xmin;

child->Xrmax=Xmax;

child->PaintAxis();

for(int j=1;j<=child->n;j++){

child->PaintGrath(j);

}

}

}

void __fastcall TForm2::N2Click(TObject *Sender)

{

TForm1* Form1 = new TForm1(this);

Form1->Caption = "Форма: "+IntToStr(MDIChildCount);

Form1->Show();

}

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

void TForm2::SetMDIscale(int Xscale,int Yscale)

{

TForm1 *child;

for (int i=0; i < MDIChildCount; i++){

child = dynamic_cast<TForm1 *> (MDIChildren[i]);

child->deltaX=Xscale;

child->deltaY=Yscale;

child->Edit4->Text=IntToStr(Xscale);

child->Edit5->Text=IntToStr(Yscale);

child->PaintAxis();

for(int j=1;j<=child->n;j++){

child->PaintGrath(j);

}

}

}

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

void TForm2::SetMDIaccuracy(int var){

TForm1 *child;

for (int i=0; i < MDIChildCount; i++){

child = dynamic_cast<TForm1 *> (MDIChildren[i]);

if(var==0) child->accuracy=1;

if(var==1) child->accuracy=0.1;

if(var==2) child->accuracy=0.01;

if(var==3) child->accuracy=0.001;

child->PaintAxis();

for(int j=1;j<=child->n;j++){

child->PaintGrath(j);

}

}

}

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

void TForm2::SetMDIColorSetka(TColor Color){

TForm1 *child;

for (int i=0; i < MDIChildCount; i++){

child = dynamic_cast<TForm1 *> (MDIChildren[i]);

child->ColorSetka=Color;

child->PaintAxis();

for(int j=1;j<=child->n;j++){

child->PaintGrath(j);

}

}

}

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

void __fastcall TForm2::N7Click(TObject *Sender)

{

Application->CreateForm(__classid(TForm4),&Form4);

Form4->ShowModal();

Form4->Free();

}

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

void __fastcall TForm2::N5Click(TObject *Sender)

{

Close();

}

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

void __fastcall TForm2::N4Click(TObject *Sender)

{

TForm1 *child;

child = dynamic_cast<TForm1 *> (ActiveMDIChild);

SavePictureDialog1->DefaultExt=".jpg";

SavePictureDialog1->Execute();

child->Image1->Picture->SaveToFile(SavePictureDialog1->FileName);

}

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

void __fastcall TForm2::N3Click(TObject *Sender)

{

TForm1 *child;

child = dynamic_cast<TForm1 *> (ActiveMDIChild);

child->Close();

}

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

void __fastcall TForm2::N10Click(TObject *Sender)

{

Application->CreateForm(__classid(TAboutBox),&AboutBox);

AboutBox->ShowModal();

AboutBox->Free();

}

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

void __fastcall TForm2::N1Click(TObject *Sender)

{

if(MDIChildCount==0){

Form2->N3->Enabled=False;

Form2->N4->Enabled=False;

}

if(MDIChildCount==1){

Form2->N3->Enabled=True;

Form2->N4->Enabled=True;

}

}

5.2 Листинг файлов дочерней формы Form1.

#ifndef Unit3H

#define Unit3H

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

#include <System.Classes.hpp>

#include <Vcl.Controls.hpp>

#include <Vcl.StdCtrls.hpp>

#include <Vcl.Forms.hpp>

#include <Vcl.ExtCtrls.hpp>

#include <VCLTee.Chart.hpp>

#include <VCLTee.DBChart.hpp>

#include <VCLTee.Series.hpp>

#include <VCLTee.TeeFunci.hpp>

#include <VCLTee.TeEngine.hpp>

#include <VCLTee.TeeProcs.hpp>

#include <Vcl.ActnColorMaps.hpp>

#include <Vcl.ActnMan.hpp>

#include "IWImageList.hpp"

#include <Vcl.ImgList.hpp>

#include <Vcl.Grids.hpp>

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

class TForm1 : public TForm

{

__published: // IDE-managed Components

TButton *Button2;

TEdit *Edit1;

TEdit *Edit2;

TEdit *Edit3;

TColorBox *ColorBox1;

TImage *Image1;

TImageList *ImageList1;

TComboBox *ComboBox1;

TButton *Button3;

TStringGrid *StringGrid1;

TStaticText *StaticText1;

TStaticText *StaticText2;

TStaticText *StaticText3;

TStaticText *StaticText4;

TStaticText *StaticText5;

TStaticText *StaticText6;

TStaticText *StaticText7;

TEdit *Edit4;

TEdit *Edit5;

TStaticText *StaticText8;

TStaticText *StaticText9;

TPanel *Panel1;

TStaticText *StaticText10;

TPanel *Panel2;

TPanel *Panel3;

TPanel *Panel4;

TPanel *Panel5;

TEdit *Edit6;

TEdit *Edit7;

TStaticText *StaticText11;

TStaticText *StaticText12;

void __fastcall Button2Click(TObject *Sender);

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

void __fastcall ComboBox1Change(TObject *Sender);

void __fastcall ComboBox1DrawItem(TWinControl *Control, int Index, TRect &Rect,

TOwnerDrawState State);

void __fastcall StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,

TGridDrawState State);

void __fastcall Button3Click(TObject *Sender);

void __fastcall Edit4Change(TObject *Sender);

void __fastcall Edit5Change(TObject *Sender);

private: // User declarations

public: // User declarations

int xmax,ymax; //Размер экрана

int xmid, ymid; //Середина экрана по осям

double X,Y; // Координаты для вычисления

double deltaX,deltaY;

TColor ColorSetka;

TRect Rect1[20],Rect2[20],Rectb[20],Rectc[20];

TColor Col[20];

int n;

int Yform[20],Xrmin,Xrmax,Xrmin1;

double accuracy;

void PaintAxis();

int PaintGrath();

int PaintGrath(int x);

int OnTableEdit;

int DeleteGrath(int NumDel);

void SetYform(int Yk);

int PixelInDel;

float MinOrMaxValueX;

void Seta(UnicodeString as);

void Setb(UnicodeString bs);

void Setc(UnicodeString cs);

void SetCol(TColor Coln);

int f[10];

TStringList *a1;

int f1[10];

TStringList *b1;

int f3[10];

TStringList *c1;

__fastcall TForm1(TComponent* Owner);

};

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

extern PACKAGE TForm1 *Form1;

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

#endif

#include <vcl.h>

#pragma hdrstop

#include "Unit3.h"

#include "Unit2.h"

#include <string>

#include <iostream>

#include<cctype>

#include <StrUtils.hpp>

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

#pragma package(smart_init)

#pragma link "IWImageList"

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner) //Значения по умолчанию

: TForm(Owner)

{

accuracy=0.01;

Xrmax=180;

Xrmin1=-180;

xmax=568;

ymax=473;

xmid=xmax/2;

ymid=ymax/2;

deltaX=1;

deltaY=1;

n=0;

OnTableEdit=0;

PixelInDel=20;

MinOrMaxValueX=(xmid/PixelInDel)*(PixelInDel/deltaX);

ComboBox1->Style = csOwnerDrawFixed;

for(int i=0;i<=20;i++){

Yform[i]=4;

}

int i=0;

while(i!=20){

Rect1[i].left=2000;

Rect1[i].top=1000;

i++;

}

i=0;

while(i!=20){

Col[i]=clRed;

i++;

}

StringGrid1->Rows[0]->DelimitedText = ("Номер Функция a b c Цвет");

StringGrid1->Canvas->Pen->Width=2;

a1=new TStringList;

b1=new TStringList;

c1=new TStringList;

a1->Add("0");

b1->Add("0");

c1->Add("0");

ColorSetka=clMenuBar;

}

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

void TForm1::PaintAxis() //Печать осей

{

Image1->Picture->Bitmap->FreeImage();

Image1->Picture->Bitmap = NULL;

Image1->Canvas->Pen->Color=ColorSetka; //Масштабная сетка

Image1->Canvas->Pen->Style=psDash;

for (int i=PixelInDel ; i<=ymax ; i=i+20)

{

Image1->Canvas->MoveTo(0,ymid+i);

Image1->Canvas->LineTo(xmax,ymid+i);

Image1->Canvas->MoveTo(0,ymid-i);

Image1->Canvas->LineTo(xmax,ymid-i);

}

for (int i=PixelInDel ; i<=xmax ; i=i+20)

{

Image1->Canvas->MoveTo(xmid+i,0);

Image1->Canvas->LineTo(xmid+i,ymax);

Image1->Canvas->MoveTo(xmid-i,0);

Image1->Canvas->LineTo(xmid-i,ymax);

}

Image1->Canvas->Pen->Width=1;

Image1->Canvas->Pen->Style=psSolid;

Image1->Canvas->Pen->Color=clBlack;

Image1->Canvas->MoveTo(1,ymid); //Рисование осей

Image1->Canvas->LineTo(xmax,ymid);

Image1->Canvas->MoveTo(xmid,1);

Image1->Canvas->LineTo(xmid,ymax);

Image1->Canvas->Font->Size=6;

for (int i=0 ; i<=xmax ; i=i+20)

{

Image1->Canvas->MoveTo(xmid+i,ymid-1);

Image1->Canvas->LineTo(xmid+i,ymid+2);

Image1->Canvas->MoveTo(xmid-i,ymid-1);

Image1->Canvas->LineTo(xmid-i,ymid+2);

if(i==0){Image1->Canvas->TextOutW(xmid-5,ymid+1,IntToStr(0));}

if(i!=0){

Image1->Canvas->TextOutW(xmid+i-5,ymid-10,FloatToStr(i/deltaX));

Image1->Canvas->TextOutW(xmid-i-5,ymid-10,FloatToStr(i/deltaX));

}

}

for (int i=0 ; i<=ymax ; i=i+20)

{

Image1->Canvas->MoveTo(xmid-1,ymid+i);

Image1->Canvas->LineTo(xmid+2,ymid+i);

Image1->Canvas->MoveTo(xmid-1,ymid-i);

Image1->Canvas->LineTo(xmid+2,ymid-i);

if(i!=0){

Image1->Canvas->TextOutW(xmid+5,ymid+i-5,FloatToStr(i/deltaY));

Image1->Canvas->TextOutW(xmid+5,ymid-i-5,FloatToStr(i/deltaY));

}

}

Image1->Canvas->Pen->Width=5; //Рисование рамки

Image1->Canvas->MoveTo(0,0);

Image1->Canvas->LineTo(xmax,0);

Image1->Canvas->LineTo(xmax,ymax);

Image1->Canvas->LineTo(0,ymax);

Image1->Canvas->LineTo(0,0);

Image1->Canvas->Pen->Width=1;

Image1->Canvas->Pen->Style=psSolid;

}

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

int TForm1::PaintGrath(int x) //Печать графика по номеру

{

Image1->Canvas->Pen->Color=Col[x];

int Flag=0;

for(float i=Xrmin1;i<=Xrmax;i=i+accuracy)

{

if(i<(-MinOrMaxValueX)) continue;

if(i>MinOrMaxValueX) break;

switch(Yform[x])

{

case 0:Y=Y=tan(StrToFloat(a1->Strings[x])*i*i

+StrToFloat(b1->Strings[x])*i); break;

case 1:Y=StrToFloat(a1->Strings[x])*i*i*i*i*i+StrToFloat(b1->Strings[x])

*i*i*i+StrToFloat(c1->Strings[x])*i; break;

case 2:Y=StrToFloat(b1->Strings[x])*StrToFloat(a1->Strings[x])*i*i*i

+StrToFloat(c1->Strings[x])*i*i; break;

case 3:{

if((i<=0)||(i==1)) continue;

else

Y=log(StrToFloat(a1->Strings[x])*i*i)/log(i);

}

}

if((i>=Xrmin1)&&(Flag!=1))

{

Image1->Canvas->MoveTo(xmid+i*deltaX,ymid-Y*deltaY);

Flag=1;

continue;

}

Image1->Canvas->LineTo(xmid+i*deltaX,ymid-Y*deltaY);

}

return 0;

}

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

int TForm1::DeleteGrath(int NumDel) //Удаление графика из области построения и таблицы

{

if(n==0) return 0;

PaintAxis();

TRect RectTemp[20];

TColor Coltmp[20];

float aTemp[20],bTemp[20],cTemp[20];

int Yformt[20],fl=0;

if(n>1) //Удаление при количестве графиков >1

{

fl=1;

if(NumDel>1) //Перерисовываем все графики кроме удаляемого(при номере удаляемого >1)

{

for(int i=1;i<NumDel;i++)

{

PaintGrath(i);

}

for(int i=NumDel+1;i<=n;i++)

{

PaintGrath(i);

}

}

if(NumDel==1) //Перерисовываем все графики кроме удаляемого(при номере удаляемого =1)

{

for(int i=NumDel+1;i<=n;i++)

{

PaintGrath(i);

}

}

for (int i=1; i < StringGrid1->RowCount; i++) { //Очищаем таблицу

StringGrid1->Rows[i]->Clear();

}

int i=NumDel;

while(i!=20){ //Удаляем формулу графика из таблицы

Rect1[i].top=Rect1[i+1].top-24;

i++;

}

for(int i=0;i<NumDel;i++){ //Удаляем из масива аргументов Yform

Yformt[i]=Yform[i];

}

for(int i=NumDel+1;i<=20;i++){

Yformt[i-1]=Yform[i];

}

for(int i=0;i<=20;i++){

Yform[i]=Yformt[i];

}

i=0;

while(i<NumDel){ //Удаляем из масива цветов

Coltmp[i]=Col[i];

i++;

}

i=NumDel+1;

while(i!=20){

Coltmp[i-1]=Col[i];

i++;

}

i=0;

while(i!=20){

Col[i]=Coltmp[i];

i++;

}

n--;

a1->Delete(NumDel);

b1->Delete(NumDel);

c1->Delete(NumDel);

for(int i=1;i<=n;i++){ //Перепечатываем текст в таблице

StringGrid1->Rows[i]->DelimitedText = (IntToStr(i)+" "+IntToStr(i)+" "

+AnsiReplaceStr(a1->Strings[i],",",".")+" "

+AnsiReplaceStr(b1->Strings[i],",",".")+" "

+AnsiReplaceStr(c1->Strings[i],",","."));

}

}

if((n==1)&&(fl==0)) //Удаление при количестве графиков =1

{

a1->Delete(NumDel);

b1->Delete(NumDel);

c1->Delete(NumDel);

Yform[n]=4;

for (int i=1; i < StringGrid1->RowCount; i++) { //Очищаем таблицу

StringGrid1->Rows[i]->Clear();

}

n--;

}

StringGrid1->Invalidate();

return 0;

}

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

void TForm1::SetYform(int Yk)

{

Yform[n+1]=Yk;

}

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

void TForm1::Seta(UnicodeString as)

{

a1->Add(as);

}

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

void TForm1::Setb(UnicodeString bs)

{

b1->Add(bs);

}

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

void TForm1::Setc(UnicodeString cs)

{

c1->Add(cs);

}

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

void TForm1::SetCol(TColor Coln){

Col[n+1]=Coln;

}

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

int TForm1::PaintGrath()

{

int tmpfl=0,Flag=0; //флаг перчати цветом

if(n==0) PaintAxis();

if((Edit1->Text.ToDouble()!=StrToFloat(a1->Strings[n]))

||(Edit2->Text.ToDouble()!=StrToFloat(b1->Strings[n]))

||(Edit3->Text.ToDouble()!=StrToFloat(c1->Strings[n]))

||(Yform[n]!=ComboBox1->ItemIndex))

{ //при изменениях функции или аргументов пополняем массивы

Seta(Edit1->Text);

Setb(Edit2->Text);

Setc(Edit3->Text);

SetCol(ColorBox1->Selected);

SetYform(ComboBox1->ItemIndex);

Image1->Canvas->Pen->Color=ColorBox1->Selected;

OnTableEdit=1;

StringGrid1->Invalidate();

n++;

tmpfl=1;

}

if(tmpfl==0) return 0;

for(double i=Xrmin1;i<=Xrmax;i=i+accuracy)

{

if(i<(-MinOrMaxValueX)) continue;

if(i>MinOrMaxValueX) break;

switch(Yform[n]) //вычисляем y в зависимости от выбранной формулы

{

case 0:Y=Y=tan(StrToFloat(a1->Strings[n])*i*i

+StrToFloat(b1->Strings[n])*i); break;

case 1:Y=StrToFloat(a1->Strings[n])*i*i*i*i*i+StrToFloat(b1->Strings[n])

*i*i*i+StrToFloat(c1->Strings[n])*i; break;

case 2:Y=StrToFloat(b1->Strings[n])*powl(StrToFloat(a1->Strings[n]),i*i*i)

+StrToFloat(c1->Strings[n])*i*i; break;

case 3:{

if((i<=0)||(i==1)) continue;

else

Y=log(StrToFloat(a1->Strings[n])*i*i)/log(i);

}

}

if((i>=Xrmin1)&&(Flag!=1))

{

Image1->Canvas->MoveTo(xmid+i*deltaX,ymid-Y*deltaY);

Flag=1;

continue;

}

Image1->Canvas->LineTo(xmid+i*deltaX,ymid-Y*deltaY);

}

if(tmpfl==1){ //если выбранным цветом произошла печать увиличиваем индекс colorbox1

ColorBox1->ItemIndex++;

tmpfl=0;

}

return 0;

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

PaintGrath();

}

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

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

{

Action = caFree;

}

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

void __fastcall TForm1::ComboBox1Change(TObject *Sender)

{ //При выборе формулы активируем и деактивируем области ввода

if(ComboBox1->ItemIndex==0)

{

Edit1->Enabled=True;

Edit2->Enabled=True;

Edit3->Enabled=False;

}

if(ComboBox1->ItemIndex==1)

{

Edit1->Enabled=True;

Edit2->Enabled=True;

Edit3->Enabled=True;

}

if(ComboBox1->ItemIndex==2)

{

Edit1->Enabled=True;

Edit2->Enabled=True;

Edit3->Enabled=True;

}

if(ComboBox1->ItemIndex==3)

{

Edit1->Enabled=True;

Edit2->Enabled=False;

Edit3->Enabled=False;

}

}

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

void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index, TRect &Rect,

TOwnerDrawState State)

{

ComboBox1->Canvas->FillRect ( Rect );

ImageList1->Draw ( ComboBox1->Canvas, Rect.left, Rect.top, Index );

}

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

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,

TGridDrawState State)

{

if(OnTableEdit==1)

{

Rect1[n]=StringGrid1->CellRect(1,n);

Rect2[n]=StringGrid1->CellRect(5,n);

Rectb[n]=StringGrid1->CellRect(3,n);

Rectc[n]=StringGrid1->CellRect(4,n);

OnTableEdit=0;

StringGrid1->Rows[n]->DelimitedText = (IntToStr(n)+" "+IntToStr(n)+" "

+AnsiReplaceStr(a1->Strings[n],",",".")+" "

+AnsiReplaceStr(b1->Strings[n],",",".")+" "

+AnsiReplaceStr(c1->Strings[n],",","."));

}

int i=0;

while(i!=20) //Цикл заполнения колонки с формулами

{

i++;

if((i==n+1)&&(n!=0)) {

break;

}

StringGrid1->Canvas->FillRect(Rect1[i]);

ImageList1->Draw ( StringGrid1->Canvas, Rect1[i].left, Rect1[i].top, Yform[i] );

StringGrid1->Canvas->Pen->Color=Col[i];

StringGrid1->Canvas->Pen->Width=2;

if(n>0){

int j=0;

while(j!=34){ //Цикл заполнения колонки цветов

StringGrid1->Canvas->MoveTo(Rect2[i].left+j,Rect2[i].top);

StringGrid1->Canvas->LineTo(Rect2[i].left+j,Rect2[i].bottom);

j=j+1;

}

StringGrid1->Canvas->Pen->Color=clWhite;

if(Yform[i]==0){ //закрашивания неиспользуемых ячеек при Yfor==0

j=4;

while(j!=30){

StringGrid1->Canvas->MoveTo(Rectc[i].left+j,Rectc[i].top);

StringGrid1->Canvas->LineTo(Rectc[i].left+j,Rectc[i].bottom-4);

j=j+1;

}

}

if(Yform[i]==3){ //закрашивания неиспользуемых ячеек при Yfor==0

j=4;

while(j!=30){

StringGrid1->Canvas->MoveTo(Rectc[i].left+j,Rectc[i].top);

StringGrid1->Canvas->LineTo(Rectc[i].left+j,Rectc[i].bottom-4);

j=j+1;

}

j=4;

while(j!=30){

StringGrid1->Canvas->MoveTo(Rectb[i].left+j,Rectb[i].top);

StringGrid1->Canvas->LineTo(Rectb[i].left+j,Rectb[i].bottom-4);

j=j+1;

}

}

}

if(n==0) break;

}

}

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

void __fastcall TForm1::Button3Click(TObject *Sender)

{

DeleteGrath(StringGrid1->Row);

StringGrid1->Invalidate();

}

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

void __fastcall TForm1::Edit4Change(TObject *Sender)

{

if((Edit4->Text!="-")&&(Edit4->Text!="")&&(Edit4->Text!="+")){

deltaX=Edit4->Text.ToInt();

PaintAxis();

Edit6->Text=FloatToStr(PixelInDel/deltaX);

MinOrMaxValueX=(xmid/PixelInDel)*(PixelInDel/deltaX);

for(int i=1;i<=n;i++){

PaintGrath(i);

}

}

}

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

void __fastcall TForm1::Edit5Change(TObject *Sender)

{

if((Edit5->Text!="-")&&(Edit5->Text!="")&&(Edit5->Text!="+")){

deltaY=Edit5->Text.ToInt();

PaintAxis();

Edit7->Text=FloatToStr(PixelInDel/deltaY);

for(int i=1;i<=n;i++){

PaintGrath(i);

}

}

}

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

5.3 Листинг файлов формы с настройками Form4.

#ifndef Unit4H

#define Unit4H

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

#include <System.Classes.hpp>

#include <Vcl.Controls.hpp>

#include <Vcl.StdCtrls.hpp>

#include <Vcl.Forms.hpp>

#include <Vcl.ButtonGroup.hpp>

#include <Vcl.ExtCtrls.hpp>

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

class TForm4 : public TForm

{

__published: // IDE-managed Components

TStaticText *StaticText1;

TEdit *Edit1;

TEdit *Edit2;

TStaticText *StaticText2;

TStaticText *StaticText3;

TEdit *Edit3;

TStaticText *StaticText6;

TStaticText *StaticText7;

TEdit *Edit5;

TStaticText *StaticText8;

TButtonGroup *ButtonGroup1;

TButtonGroup *ButtonGroup2;

TButtonGroup *ButtonGroup3;

TStaticText *StaticText4;

TComboBox *ComboBox1;

TStaticText *StaticText5;

TButtonGroup *ButtonGroup4;

TColorBox *ColorBox1;

void __fastcall Edit1Change(TObject *Sender);

void __fastcall Edit2Change(TObject *Sender);

void __fastcall Edit3Change(TObject *Sender);

void __fastcall Edit5Change(TObject *Sender);

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

void __fastcall FormCreate(TObject *Sender);

void __fastcall ComboBox1Change(TObject *Sender);

void __fastcall ColorBox1Change(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm4(TComponent* Owner);

};

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

extern PACKAGE TForm4 *Form4;

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

#endif

#include <vcl.h>

#pragma hdrstop

#include "Unit4.h"

#include "Unit3.h"

#include "Unit2.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm4 *Form4;

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

__fastcall TForm4::TForm4(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm4::Edit1Change(TObject *Sender)

{

if((Edit1->Text!="-")&&(Edit1->Text!="")&&(Edit1->Text!="+")){

Form2->SetMDIx(Edit1->Text.ToInt(),Edit2->Text.ToInt());

Form2->Xmins=Edit1->Text.ToInt();

Form2->flag=1;

}

}

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

void __fastcall TForm4::Edit2Change(TObject *Sender)

{

if((Edit2->Text!="-")&&(Edit2->Text!="")&&(Edit2->Text!="+")){

Form2->SetMDIx(Edit1->Text.ToInt(),Edit2->Text.ToInt());

Form2->Xmaxs=StrToInt(Edit2->Text);

Form2->flag=1;

}

}

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

void __fastcall TForm4::Edit3Change(TObject *Sender)

{

if((Edit3->Text!="-")&&(Edit3->Text!="")&&(Edit3->Text!="+")){

Form2->SetMDIscale(Edit3->Text.ToInt(),Edit5->Text.ToInt());

Form2->Xscales=StrToInt(Edit3->Text);

Form2->flag=1;

}

}

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

void __fastcall TForm4::Edit5Change(TObject *Sender)

{

if((Edit5->Text!="-")&&(Edit5->Text!="")&&(Edit5->Text!="+")){

Form2->SetMDIscale(Edit3->Text.ToInt(),Edit5->Text.ToInt());

Form2->Yscales=StrToInt(Edit5->Text);

Form2->flag=1;

}

}

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

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

{

Action = caFree;

}

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

void __fastcall TForm4::FormCreate(TObject *Sender)

{

if(Form2->flag==1){

Edit1->Text=IntToStr(Form2->Xmins);

Edit2->Text=IntToStr(Form2->Xmaxs);

Edit3->Text=IntToStr(Form2->Xscales);

Edit5->Text=IntToStr(Form2->Yscales);

ComboBox1->ItemIndex=Form2->accuracy;

ColorBox1->Selected=Form2->MDIColorSetka;

}

}

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

void __fastcall TForm4::ComboBox1Change(TObject *Sender)

{

Form2->SetMDIaccuracy(ComboBox1->ItemIndex);

Form2->accuracy=ComboBox1->ItemIndex;

}

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

void __fastcall TForm4::ColorBox1Change(TObject *Sender)

{

Form2->SetMDIColorSetka(ColorBox1->Selected);

Form2->MDIColorSetka=ColorBox1->Selected;

Form2->flag=1;

}

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

5.4 Листинг файлов формы с кратким описание программы ABOUT.

#ifndef AboutH

#define AboutH

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

#include <System.hpp>

#include <Windows.hpp>

#include <SysUtils.hpp>

#include <Classes.hpp>

#include <Graphics.hpp>

#include <Forms.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Buttons.hpp>

#include <ExtCtrls.hpp>

#include <Vcl.Imaging.jpeg.hpp>

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

class TAboutBox : public TForm

{

__published:

TPanel *Panel1;

TImage *ProgramIcon;

TLabel *ProductName;

TLabel *Version;

TLabel *Copyright;

TLabel *Comments;

TButton *OKButton;

private:

public:

virtual __fastcall TAboutBox(TComponent* AOwner);

};

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

extern PACKAGE TAboutBox *AboutBox;

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

#endif

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

#include <vcl.h>

#pragma hdrstop

#include "About.h"

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

#pragma resource "*.dfm"

TAboutBox *AboutBox;

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

__fastcall TAboutBox::TAboutBox(TComponent* AOwner)

: TForm(AOwner)

{

}

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

4.5 Исходный код проектного файла Project.cpp

#include <vcl.h>

#pragma hdrstop

#include <tchar.h>

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

USEFORM("Unit3.cpp", Form1);

USEFORM("Unit4.cpp", Form4);

USEFORM("Unit2.cpp", Form2);

USEFORM("ABOUT.cpp", AboutBox);

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

WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)

{

try

{

Application->Initialize();

Application->MainFormOnTaskBar = true;

Application->CreateForm(__classid(TForm2), &Form2);

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

Application->CreateForm(__classid(TForm4), &Form4);

Application->CreateForm(__classid(TAboutBox), &AboutBox);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

catch (...)

{

try

{

throw Exception("");

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

}

return 0;

}

Заключение

В ходе выполнения данного курсового проекта были получены практические навыки по работе и написанию программ с применение среды визуального программирования RAD Studio C++ Builder XE2, а полученная программа полностью отвечает поставленным в техническом задание условиям. Так же была составлена вся оговоренная в техническом задание документация в соответствии с требованиями ЕСПД.

Библиографический список:

1. Бьерн Страуструп. Язык программирование Си++. – М.: Бином, 2005.

2. Айра Пол. Объектно-ориентированное программирование на C++. – СПб.:, М.: Невский диалект – Бином, 1999.

3. Герберт Шилдт. Самоучитель C++: Пер. с англ. – 3-е изд. – СПб.: БХВ-Петербург, 2003.

4. Шамис, В. А. "C++ Builder Borland Developer Studio 2006", СПб. и др. Питер 2007, 780 с. ил.

5. Культин, Н. Б. "C++ Builder Самоучитель", СПб. БХВ-Петербург 2004, 320 с. ил.

6. Д. Холингвэрт, Д. Баттерфилд, Б. Сворт, Д. Оллсоп ," C++ Builder 5: Руководство разработчика Т. 1 Основы"Пер. с англ. и ред. Ю. Г. Гордиенко, В. Т. Тертышного, М. и др. Вильямс 2001, 872 с. ил.

7. ГОСТ 19.402-78. ЕСПД. Описание программы.

8. ГОСТ 19.502-78. ЕСПД. Описание применения. Требования к содержанию и оформлению.

9. ГОСТ 19.301-79. ЕСПД. Программа и методика испытаний. Требования к содержанию и оформлению.

10. ГОСТ 19.505-79. ЕСПД. Руководство оператора. Требования к содержанию и оформлению.

11. ГОСТ 19.401-78. ЕСПД. Текст программы. Требования к содержанию и оформлению.