Файл модуля UnitDM.cpp
#include <vcl.h>
#pragma hdrstop
#include "UnitDM.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*dm;
//---------------------------------------------------------------------------
__fastcall Tdm::Tdm(TComponent* Owner)
: TDataModule(Owner)
{
}
//---------------------------------------------------------------------------__fastcall Tdm::DataModuleCreate(TObject *Sender)
{s = GetCurrentDir();=s+s[3]+"GRAPH.FDB";>DatabaseName=s;>Open();opts;>IndexFieldNames="NAME;ID";
}
//---------------------------------------------------------------------------__fastcall Tdm::DataModuleDestroy(TObject *Sender)
{(IBTransaction1->Active)->Commit();
}
Модуль getstr.cpp
#include <vcl.h>
#pragma hdrstop
#include "getstr.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*rmGetName;
//---------------------------------------------------------------------------
__fastcall TrmGetName::TrmGetName(TComponent* Owner)
: TForm(Owner)
{
}
Файл модуля new_Point.cpp
#include <vcl.h>
#pragma hdrstop
#include "new_Point.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*newPoint;
//---------------------------------------------------------------------------
__fastcall TnewPoint::TnewPoint(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall TnewPoint::eXKeyPress(TObject *Sender, char &Key)
{(Key!=0x8)
{*edt = dynamic_cast<TEdit *>(Sender);= edt->Text;=s.SubString(1,edt->SelStart)+Key+s.SubString((edt->SelStart)+1,s.Length());
{d=StrToFloat(s);
}(...)
{=0x0;
}
}
}
//---------------------------------------------------------------------------__fastcall TnewPoint::FormActivate(TObject *Sender)
{>Text="";>Text="";>Text="";>Text="";>Text="";;
}
//---------------------------------------------------------------------------__fastcall TnewPoint::eXChange(TObject *Sender)
{>Enabled=(eX->Text!="")&&(eY->Text!="")&&(eA->Text!="")&&(eB->Text!="")&&
(eRin->Text!="");
}
Файл модуля view.cpp
#include <vcl.h>
#include <controls.hpp>
#pragma hdrstop
#include "view.h"
#include "UnitDM.h"
#include "math.h"
#include "getstr.h"
#include "new_Point.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*fView;
//---------------------------------------------------------------------------
__fastcall TfView::TfView(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------clLine = (TColor) RGB(25,25,150);clCircle =(TColor) RGB(252,255,240);clPoint= (TColor) RGB(255,0,0);RPoint=2;min (double t1, double t2)
{(t1<t2) return t1;return t2;
}__fastcall TfView::CalcGraph()
{(!dm->qGraph->IsEmpty())
{>qGraph->DisableControls();
TBookmark BK = dm->qGraph->GetBookmark(); //идентифицировать данный фрагмент текста по закладке.
// gImage->Width = gImage->Height;T= UpDown1->Position;>qGraph->First();= dm->qGraphX->Value+dm->qGraphA->Value*T+dm->qGraphR->Value ,= dm->qGraphY->Value+dm->qGraphB->Value*T+dm->qGraphR->Value,= dm->qGraphX->Value+dm->qGraphA->Value*T-dm->qGraphR->Value,= dm->qGraphY->Value+dm->qGraphB->Value*T-dm->qGraphR->Value;(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())
{(maxX < dm->qGraphX->Value+dm->qGraphA->Value*T+dm->qGraphR->Value) maxX = dm->qGraphX->Value+dm->qGraphA->Value*T+dm->qGraphR->Value;(maxY < dm->qGraphY->Value+dm->qGraphB->Value*T+dm->qGraphR->Value) maxY = dm->qGraphY->Value+dm->qGraphB->Value*T+dm->qGraphR->Value;(minX > dm->qGraphX->Value+dm->qGraphA->Value*T-dm->qGraphR->Value) minX = dm->qGraphX->Value+dm->qGraphA->Value*T-dm->qGraphR->Value;(minY > dm->qGraphY->Value+dm->qGraphB->Value*T-dm->qGraphR->Value) minY = dm->qGraphY->Value+dm->qGraphB->Value*T-dm->qGraphR->Value;
}(maxY> maxX) maxX=maxY;(minY< minX) minX=minY;(gImage->Width<gImage->Height)= gImage->Width / (maxX-minY);= gImage->Height / (maxX-minY);>qGraph1->SQL->Clear();(int i=0;i<dm->qGraph->SQL->Count;i++) dm->qGraph1->SQL->Add(dm->qGraph->SQL->Strings[i]);(int i=0;i<dm->qGraph->Params->Count;i++) dm->qGraph1->Params->Items[i]->Value=dm->qGraph->Params->Items[i]->Value;>qGraph->GotoBookmark(BK);>qGraph->FreeBookmark(BK);>qGraph->EnableControls();
}
}__fastcall TfView::PaintGraph()
{(!dm->qGraph->IsEmpty())
{>qGraph->DisableControls();BK = dm->qGraph->GetBookmark();
// gImage->Width = gImage->Height;>Canvas->Brush->Color=clWhite;>Canvas->FillRect(gImage->ClientRect);T= UpDown1->Position;
// if (cbShowR->Checked)
{(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())(predPoint == dm->qGraph->RecNo)
{>Canvas->Pen->Color = clGray;>Canvas->Brush->Color =clCircle;x1=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T-dm->qGraphR->Value-minX),=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T-dm->qGraphR->Value-minX),=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T+dm->qGraphR->Value-minX),=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T+dm->qGraphR->Value-minX);>Canvas->Ellipse((int) x1,(int) y1,(int) x2,(int) y2);
}
}>Canvas->Pen->Color = clLine;>qGraph1->Open();>Canvas->Pen->Width=2;>Canvas->Pen->Color = clLine;(dm->qGraph1->First();!dm->qGraph1->Eof;dm->qGraph1->Next())(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())
{x1=(dm->qGraphX->Value+dm->qGraphA->Value*T),=(dm->qGraphY->Value+dm->qGraphB->Value*T),=(dm->qGraph1X->Value+dm->qGraph1A->Value*T),=(dm->qGraph1Y->Value+dm->qGraph1B->Value*T),=min(pow(dm->qGraph1R->Value,2),pow(dm->qGraphR->Value,2));(((dm->qGraph1->RecNo)<(dm->qGraph->RecNo)) && ((pow(x1-x2,2)+pow(y1-y2,2))<=d))
{>Canvas->MoveTo((int) (scale*(x1-minX)),(int) (scale*(y1-minX)));>Canvas->LineTo((int) (scale*(x2-minX)),(int) (scale*(y2-minX)));
}
}>qGraph1->Close();>Canvas->Pen->Color =clPoint;>Canvas->Brush->Color =clPoint;(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())
{x1=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T-minX)-RPoint,=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T-minX)-RPoint,=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T-minX)+RPoint,=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T-minX)+RPoint;>Canvas->Ellipse((int) x1,(int) y1,(int) x2,(int) y2);
}>qGraph->GotoBookmark(BK);>qGraph->FreeBookmark(BK);>qGraph->EnableControls();
}
}__fastcall TfView::FormActivate(TObject *Sender) //активация формы
{>DataSet = dm->tGraphNames;>DataSet = dm->qGraph;=0;(Sender);>OnChange = eTimeChange;
}
//---------------------------------------------------------------------------__fastcall TfView::FormResize(TObject *Sender) //изменение размера
{();();
}
//---------------------------------------------------------------------------__fastcall TfView::gImageMouseMove(TObject *Sender, TShiftState Shift,X, int Y)
{T= UpDown1->Position;(gImage->Canvas->Pixels[X][Y]==clPoint)
{ dm->qGraph->DisableControls();BK = dm->qGraph->GetBookmark();(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())
{x1=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T-minX)-RPoint,=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T-minX)-RPoint,=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T-minX)+RPoint,=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T-minX)+RPoint;(((x1<=X)&&(x2>=X)&&(y1<=Y)&&(y2>=Y))&&(predPoint!=dm->qGraph->RecNo))
{(HWin == NULL)
{= new THintWindow(this);>Parent = fView;>Color = clInfoBk;
}= dm->qGraph->RecNo;= "X="+dm->qGraphX->AsString+", Y="+dm->qGraphY->AsString+", R="+dm->qGraphR->AsString;Tr;.Left = fView->Left+gImage->Left+X-gImage->Canvas->TextWidth(s)/2;.Top = fView->Top+gImage->Top+Y;.Right = Tr.Left + gImage->Canvas->TextWidth(s)+20;.Bottom = Tr.Top + gImage->Canvas->TextHeight(s);();>ActivateHint(Tr,s);
}
}>qGraph->GotoBookmark(BK);>qGraph->FreeBookmark(BK);>qGraph->EnableControls();
}
{(predPoint != 0)
{= 0;();
}= 0;(HWin!=NULL)
{>Free();=NULL;= 0;
}
}
}
//---------------------------------------------------------------------------__fastcall TfView::FormClose(TObject *Sender, TCloseAction &Action)
{>DataSet = NULL;>DataSet = NULL;
}
//---------------------------------------------------------------------------__fastcall TfView::BitBtn1Click(TObject *Sender) //новый граф
{>ShowModal();(rmGetName->ModalResult==mrOk)
{>spNewGraph->Params->Items[1]->Value = rmGetName->Edit1->Text;id;>spNewGraph->ExecProc();= dm->spNewGraph->Params->Items[0]->Value;>tGraphNames->Refresh();opt;>tGraphNames->Locate("ID",id, opt);
}(Sender);
}
//---------------------------------------------------------------------------__fastcall TfView::BitBtn2Click(TObject *Sender) //удалить граф
{(MessageDlg("Удалить граф "+dm->tGraphNamesNAME->AsString+"?",mtConfirmation,TMsgDlgButtons() << mbYes<<mbNo,0)== mrYes)
{>spDeleteGraph->Params->Items[0]->Value = dm->tGraphNamesID->Value;>spDeleteGraph->ExecProc();>tGraphNames->Refresh();
}(Sender);
}
//---------------------------------------------------------------------------__fastcall TfView::Button2Click(TObject *Sender) //удалить узел
{(MessageDlg("Удалить узел?",mtConfirmation,TMsgDlgButtons() << mbYes << mbNo,0)== mrYes)
{>spDeletePoint->Params->Items[0]->Value = dm->qGraphGRAPH_ID->Value;>spDeletePoint->Params->Items[1]->Value = dm->qGraphGRAPH_TIME->Value;>spDeletePoint->Params->Items[2]->Value = dm->qGraphX->Value;>spDeletePoint->Params->Items[3]->Value = dm->qGraphY->Value;>spDeletePoint->Params->Items[4]->Value = dm->qGraphA->Value;>spDeletePoint->Params->Items[5]->Value = dm->qGraphB->Value;>spDeletePoint->Params->Items[6]->Value = dm->qGraphR->Value;>spDeletePoint->ExecProc();>qGraph->Close();>qGraph->Open();
}(Sender);
}
//---------------------------------------------------------------------------__fastcall TfView::Button1Click(TObject *Sender) //добавить узел
{>ShowModal();(newPoint->ModalResult==mrOk)
{>spAddPoint->Params->Items[0]->Value = dm->tGraphNamesID->Value;>spAddPoint->Params->Items[1]->Value = 0;>spAddPoint->Params->Items[2]->Value = StrToFloat(newPoint->eX->Text);>spAddPoint->Params->Items[3]->Value = StrToFloat(newPoint->eY->Text);>spAddPoint->Params->Items[4]->Value = StrToFloat(newPoint->eA->Text);>spAddPoint->Params->Items[5]->Value = StrToFloat(newPoint->eB->Text);>spAddPoint->Params->Items[6]->Value = StrToFloat(newPoint->eRin->Text);>spAddPoint->ExecProc();>qGraph->Close();>qGraph->Open();
}(Sender);
}
//---------------------------------------------------------------------------__fastcall TfView::dsNamesDataChange(TObject *Sender, TField *Field)
{>qGraph->Close();>qGraph->Params->Items[0]->Value = dm->tGraphNamesID->Value;>qGraph->Params->Items[1]->Value = 0;>qGraph->Open();(Sender);
}
//---------------------------------------------------------------------------__fastcall TfView::eTimeChange(TObject *Sender)
{();();
}
//---------------------------------------------------------------------------__fastcall TfView::BitBtn3Click(TObject *Sender) //сохранить
{>qGraph->DisableControls();BK = dm->qGraph->GetBookmark();T= UpDown1->Position;*stm = new TStringList();>Add(dm->tGraphNamesNAME->AsString);>Add(eTime->Text);(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())
{X =dm->qGraphX->Value+dm->qGraphA->Value*T,=dm->qGraphY->Value+dm->qGraphB->Value*T;>Add(FloatToStr(X)+" "+FloatToStr(Y)+" "+dm->qGraphA->AsString+" "+dm->qGraphB->AsString+" "+dm->qGraphR->AsString);
}>qGraph->GotoBookmark(BK);>qGraph->FreeBookmark(BK);>qGraph->EnableControls();->DefaultExt="txt";->Filter="ASCII files (*.txt)|*.txt|";->Title="Сохранить граф "+dm->tGraphNamesNAME->AsString;(SaveDialog1->Execute())
{
{FileNameR = SaveDialog1->FileName;>SaveToFile(FileNameR);
}(...)
{("Не удалось сохранить",mtError, TMsgDlgButtons() << mbOK ,0);
}
}stm;
}
//---------------------------------------------------------------------------__fastcall TfView::Button3Click(TObject *Sender) //загрузить из файла
{->DefaultExt="txt";->Filter="ASCII files (*.txt)|*.txt|";->Title="Сохранить граф "+dm->tGraphNamesNAME->AsString;(OpenDialog1->Execute())
{ int T=0;*stm = new TStringList(); // а надо ли в Мемо?FileNameR = OpenDialog1->FileName;>LoadFromFile(FileNameR);(stm->Count>2)
{buf[100];(buf, stm->Strings[0].c_str());= String(buf);>spNewGraph->Params->Items[1]->Value = FileNameR ;>spNewGraph->ExecProc();id = dm->spNewGraph->Params->Items[0]->Value;>tGraphNames->Refresh();opt;>tGraphNames->Locate("ID",id, opt);(buf, stm->Strings[1].c_str());= StrToInt(String(buf));X,Y,A,B,R;(int i=2; i<stm->Count;i++ )
{(buf, stm->Strings[i].c_str());*p = strtok(buf, " \r\n");= StrToFloat(String(p));= strtok(NULL, " \r\n");= StrToFloat(String(p));= strtok(NULL, " \r\n");= StrToFloat(String(p));= strtok(NULL, " \r\n");= StrToFloat(String(p));= strtok(NULL, " \r\n");= StrToFloat(String(p));>spAddPoint->Params->Items[0]->Value = id;>spAddPoint->Params->Items[1]->Value = 0;>spAddPoint->Params->Items[2]->Value = X-A*T;>spAddPoint->Params->Items[3]->Value = Y-B*T;>spAddPoint->Params->Items[4]->Value = A;>spAddPoint->Params->Items[5]->Value = B;>spAddPoint->Params->Items[6]->Value = R;>spAddPoint->ExecProc();
}
}>qGraph->Close();>qGraph->Open();stm;->Position=T;(Sender); }
}