143 lines
3.9 KiB
C++
143 lines
3.9 KiB
C++
//---------------------------------------------------------------------------
|
|
|
|
#include <vcl.h>
|
|
#pragma hdrstop
|
|
|
|
#include "Unit1.h"
|
|
//---------------------------------------------------------------------------
|
|
#pragma package(smart_init)
|
|
#pragma resource "*.dfm"
|
|
TForm1 *Form1;
|
|
//---------------------------------------------------------------------------
|
|
__fastcall TForm1::TForm1(TComponent* Owner)
|
|
: TForm(Owner)
|
|
{
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
int x=0, y=0;
|
|
int step = 5;
|
|
bool sp = false;
|
|
bool down = false;
|
|
bool shtrix = false;
|
|
int color = 0x0000ff;
|
|
int jir = 2;
|
|
bool md = false;
|
|
int ip = 0;
|
|
TPoint p[1000];
|
|
|
|
void __fastcall TForm1::FormPaint(TObject *Sender)
|
|
{
|
|
TRect aRect = Rect(0,0,ClientWidth,ClientHeight);
|
|
Canvas->Brush->Color=0xffffff;
|
|
Canvas->FillRect(aRect);
|
|
Canvas->Pen->Width=jir;
|
|
//Canvas->Pen->Mode=
|
|
Canvas->Pen->Style=shtrix?psDot:psSolid;
|
|
Canvas->Pen->Color=0x0000ff;
|
|
Canvas->Brush->Color=0x00ff00;
|
|
if(md) for(int i=0; i<ip; i++) {
|
|
//Canvas->MoveTo(p[i].x-1,p[i].y-1);
|
|
//Canvas->LineTo(p[i].x+1,p[i].y+1);
|
|
Canvas->Pixels[p[i].x][p[i].y]=clRed;
|
|
|
|
}else Canvas->Polygon(p, ip);//Canvas->Polyline(p,ip);
|
|
Canvas->Pen->Color=0xff0000;
|
|
Canvas->MoveTo(x,y);
|
|
Canvas->LineTo(x,y);
|
|
Canvas->Font->Color=0xff0000;
|
|
Canvas->TextOutA(23,ClientHeight-30,"x= "+IntToStr(x)+" y= "+IntToStr(y));
|
|
Canvas->TextOutA(123,ClientHeight-30,"step= "+IntToStr(step));
|
|
Canvas->TextOutA(223,ClientHeight-30,"Òî÷åê: "+IntToStr(ip));
|
|
}
|
|
|
|
void zz(int j, int x, int y) {
|
|
for(int i=j; i<1000; i++) {
|
|
p[i].x = x;
|
|
p[i].y = y;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
|
|
TShiftState Shift)
|
|
{
|
|
if(((int)Key)==VK_LEFT) {
|
|
x -= step;
|
|
}
|
|
if(((int)Key)==VK_RIGHT) {
|
|
x += step;
|
|
}
|
|
if(((int)Key)==VK_UP) {
|
|
y -= step;
|
|
}
|
|
if(((int)Key)==VK_DOWN) {
|
|
y += step;
|
|
}
|
|
if(((int)Key)==VK_F3) {
|
|
step--;
|
|
}
|
|
if(((int)Key)==VK_F4) {
|
|
step++;
|
|
}
|
|
if(((int)Key)==32) {
|
|
zz(ip++,x,y);
|
|
//p[ip].x = x;
|
|
//p[ip].y = y;
|
|
//ip++;
|
|
}
|
|
if(((int)Key)==13) {
|
|
md=!md;
|
|
}
|
|
if(((int)Key)==VK_BACK) {
|
|
zz(ip--,p[ip].x,p[ip].y);
|
|
}
|
|
if(((int)Key)==VK_ADD) {
|
|
jir++;
|
|
}
|
|
if(((int)Key)==VK_SUBTRACT) {
|
|
jir--;
|
|
if(jir<=0) jir=1;
|
|
}
|
|
if(((int)Key)==VK_DELETE) {
|
|
zz(ip=0,0,0);
|
|
}
|
|
if(((int)Key)==VK_HOME) {
|
|
Form1->Edit1->Visible=!Form1->Edit1->Visible;
|
|
Form1->Edit1->Text="array[1.."+IntToStr(ip)+"]of PointType=\n(";
|
|
for(int i=0; i<ip; i++) {
|
|
Form1->Edit1->Text=Form1->Edit1->Text+
|
|
"(x:"+IntToStr(p[i].x)+"; y:"+IntToStr(p[i].y)+"),";
|
|
if (i%5 == 4) Form1->Edit1->Text=Form1->Edit1->Text+"\n";
|
|
}
|
|
Form1->Edit1->Text = Form1->Edit1->Text+"\n);";
|
|
}
|
|
FormPaint(this);
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
|
|
TShiftState Shift, int X, int Y)
|
|
{
|
|
down = false;
|
|
zz(ip++,x=X,y=Y);
|
|
FormPaint(this);
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
|
|
int X, int Y)
|
|
{
|
|
if(down) {
|
|
zz(ip,x=X,y=Y);
|
|
FormPaint(this);
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
|
|
TShiftState Shift, int X, int Y)
|
|
{
|
|
down = true;
|
|
}
|
|
|
|
|