1、作图,并可把从作图过程中获得的数据全部保存在数据库中。该数据库文件形式存在。
2、通过调用该数据库中的数据,进行图形软件的计算输出。
3、可以通过鼠标移动所画的图形,可以通过右键知道该部件的名称,及基本属性,可以改动这些属性.
给出思路也行,最好有demo.
2、通过调用该数据库中的数据,进行图形软件的计算输出。
3、可以通过鼠标移动所画的图形,可以通过右键知道该部件的名称,及基本属性,可以改动这些属性.
给出思路也行,最好有demo.
解决方案 »
- 求C++代码转换!100分
- ADOConnection的ConnectionTimeout不起作用
- ,这个串口通信是用什么方法校验的,是德国人10年前开发的程序
- 求高手出招,一个非常着急头疼的问题,愿高分答谢!!
- 请问有甚么好的表格控件可以象PowerBuilder的datawin那样的可以随意拖动并且具有打印功能的好表格??
- 有关activex使用的问题.新手
- 跪求一个将DBGrid里的记录导出为EXCEL的问题。。。。望救救我!~~~~~~~~~~~~~
- 如何让RichEdit不能编辑,?????
- 我用ADOQuery执行 insert 或 update 语句,语法完全正确,为什么还系统跳出提示说‘语法错误’呢,百思不得其解。晕 ~~
- 开发ISAPI web应用,如果用了ADO访问数据库,要注意什么?
- 关于多次INSERT的效率问题,请进来看看!
- 如何给TWebBrowser增加NavigateError事件
如:如果是一根线段,则记录其开始点和结束点
如果是三角形,则记录其3个点的坐标
而如果是圆,那就记录其圆心点坐标及半径的长度
等等
你好,不是实现PhotoShop的效果,我所画的图形可认为是个实体,代表一种含意。
~~~~~~~~~~~~~~~~~
大家继续啊。。
{
public:
YObject *head,*tail;
YObjects(){head=tail=NULL;}
~YObjects(){DeleteAll();}
void Add(YObject *obj);
void Delete(YObject *obj);
void Delete(int index);
void DeleteAll();
void UnSelectAll();
void SelectAll();
void MoveToBottom(YObject *obj);
void MoveToFront(YObject *obj){};
void Draw();
void Save(String path);
YObject *WhoIsIt(int x,int y);
virtual void LeftPressed(int X,int Y);
virtual void MouseMoved(int X,int Y);
virtual void LeftReleased(int X,int Y);
};///////////
class YObject
{
protected:
int sx,sy;
public:
static bool needredraw;
static int originx,originy;
int X,Y;
bool selected,pressed;
enum YWHICHBOX which;
TCanvas *canvas;
YObject *next,*prior;
YObject(){X=Y=0;next=prior=NULL;canvas=NULL;selected=false;pressed=false;}
virtual void Draw();
virtual String Save();
virtual void DrawFocus(){};
virtual bool IsMe(int x,int y){return false;}
virtual enum YWHICHBOX InWhichBox(int x,int y);
virtual void MoveTo(int x,int y);
virtual void Move(int dx,int dy);
static bool IsInBox(int x,int y,int left,int top,int width,int height);
virtual void LeftPressed(int X,int Y){};
virtual void MouseMoved(int X,int Y){};
virtual void LeftReleased(int X,int Y){};
};bool YObject::needredraw=false;
int YObject::originx=0;
int YObject:: originy=0;
void YObject::MoveTo(int x,int y)
{
X=x;Y=y;
}
void YObject::Move(int dx,int dy)
{
X+=dx;Y+=dy;
}String YObject::Save()
{
return "NULL";
}
enum YWHICHBOX YObject::InWhichBox(int x,int y)
{
return EXTE;
}
bool YObject::IsInBox(int x,int y,int left,int top,int width,int height)
{
return x>=left && x<=left+width && y>=top && y<=top+height;
}
void YObject::Draw()
{
if(canvas==NULL) return;
if(selected) DrawFocus();
//canvas->TextOutA(X,Y,"obj");
}
class YLine:public YObject
{
public:
int EX,EY;
YLine(){EX=EY=10;}
void Draw();
String Save();
void DrawFocus();
void Move(int dx,int dy);
void MoveTo(int x,int y);
bool IsMe(int x,int y);
enum YWHICHBOX InWhichBox(int x,int y);
virtual void LeftPressed(int X,int Y);
virtual void MouseMoved(int X,int Y);
virtual void LeftReleased(int X,int Y);
};
String YLine::Save()
{
String str;
str="L|"+IntToStr(X)+"|";
str=str+IntToStr(Y)+"|";
str=str+IntToStr(EX)+"|";
str=str+IntToStr(EY);
return str;
}
void YLine::Draw()
{
if(canvas==NULL) return;
YObject::Draw();
canvas->MoveTo(X,Y);
canvas->LineTo(EX,EY);
}
void YLine::DrawFocus()
{
int d=RECTLETW,w,h;
if(canvas==NULL) return;
canvas->Rectangle(X-d,Y-d,X+d,Y+d);
w=(EX-X)/2;h=(EY-Y)/2;
canvas->Rectangle(X+w-d,Y+h-d,X+w+d,Y+h+d);
canvas->Rectangle(EX-d,EY-d,EX+d,EY+d);
}
enum YWHICHBOX YLine::InWhichBox(int x,int y)
{
int d=RECTLETW,w,h;
w=(EX-X);h=(EY-Y);
if(IsInBox(x,y,X-d,Y-d,2*d,2*d)) return LT;
if(IsInBox(x,y,X+w/2-d,Y+h/2-d,2*d,2*d)) return MT;
if(IsInBox(x,y,X+w-d,Y+h-d,2*d,2*d)) return RB;
return EXTE;
}
void YLine::LeftPressed(int X,int Y)
{
pressed=true;
sx=X;sy=Y;
if(!selected){
if(IsMe(X,Y)) selected=true;
}
if(selected){
which=InWhichBox(X,Y);
if(which==EXTE) selected=false;
}
}
void YLine::MouseMoved(int x,int y)
{
if(!pressed) return;
if(selected){
switch(which)
{
case LT:
X+=x-sx;Y+=y-sy;
sx=x;sy=y;
needredraw=true;
break;
case MT:
X+=x-sx;Y+=y-sy;
EX+=x-sx;EY+=y-sy;
sx=x;sy=y;
needredraw=true;
break;
case RB:
EX+=x-sx;EY+=y-sy;
sx=x;sy=y;
needredraw=true;
break;
}
}
}
void YLine::LeftReleased(int X,int Y)
{
pressed=false;
}void YLine::Move(int dx,int dy)
{
X+=dx;Y+=dy;
EX+=dx;EY+=dy;
}
void YLine::MoveTo(int x,int y)
{
int dx,dy;
dx=x-X;dy=y-Y;
Move(dx,dy);
}
bool YLine::IsMe(int x,int y)
{
int d=RECTLETW;
if(x>=X-d && x<=X+d && y>=Y-d && y<=Y+d) return true;
if(x>=EX-d && x<=EX+d && y>=EY-d && y<=EY+d) return true;
return false;
}
class YRectangle:public YObject
{
public:
int width,height;
YRectangle(){width=10;height=10;}
void Draw();
void DrawFocus();
String Save();
enum YWHICHBOX InWhichBox(int x,int y);
bool IsMe(int x,int y){return (x>=X && x<=X+width && y>=Y && y<=Y+height);}
virtual void LeftPressed(int X,int Y);
virtual void MouseMoved(int X,int Y);
virtual void LeftReleased(int X,int Y);};class YEllipse:public YRectangle
{
public:
void Draw();
};void YRectangle::Draw()
{
if(canvas==NULL) return;
YObject::Draw();
canvas->Rectangle(X+originx,Y+originy,X+originx+width,Y+originy+height);
}
String YRectangle::Save()
{
String str;
str="R|"+IntToStr(X)+"|";
str=str+IntToStr(Y)+"|";
str=str+IntToStr(width)+"|";
str=str+IntToStr(height);
return str;
}void YRectangle::DrawFocus()
{
int d=RECTLETW;
int w=width,h=height;
int x=X+originx,y=Y+originy;
if(canvas==NULL) return;
canvas->Rectangle(x-d,y-d,x+d,y+d);
canvas->Rectangle(x+w/2-d,y-d,x+w/2+d,y+d);
canvas->Rectangle(x+w-d,y-d,x+w+d,y+d);
canvas->Rectangle(x+w-d,y+h/2-d,x+w+d,y+h/2+d);
canvas->Rectangle(x+w-d,y+h-d,x+w+d,y+h+d);
canvas->Rectangle(x+w/2-d,y+h-d,x+w/2+d,y+h+d);
canvas->Rectangle(x-d,y+h-d,x+d,y+h+d);
canvas->Rectangle(x-d,y+h/2-d,x+d,y+h/2+d);
}
enum YWHICHBOX YRectangle::InWhichBox(int x,int y)
{
int d=RECTLETW;
int w=width,h=height;
if(IsInBox(x,y,X-d,Y-d,2*d,2*d)) return LT;
if(IsInBox(x,y,X+w/2-d,Y-d,2*d,2*d)) return MT;
if(IsInBox(x,y,X+w-d,Y-d,2*d,2*d)) return RT;
if(IsInBox(x,y,X+w-d,Y+h/2-d,2*d,2*d)) return RM;
if(IsInBox(x,y,X+w-d,Y+h-d,2*d,2*d)) return RB;
if(IsInBox(x,y,X+w/2-d,Y+h-d,2*d,2*d)) return MB;
if(IsInBox(x,y,X-d,Y+h-d,2*d,2*d)) return LB;
if(IsInBox(x,y,X-d,Y+h/2-d,2*d,2*d)) return LM;
if(IsInBox(x,y,X,Y,w,h)) return INNER;
return EXTE;
}
void YRectangle::LeftPressed(int X,int Y)
{
pressed=true;
sx=X;sy=Y;
if(!selected){
if(IsMe(X,Y)) selected=true;
}
if(selected){
which=InWhichBox(X,Y);
if(which==EXTE) selected=false;
}
}
void YRectangle::MouseMoved(int x,int y)
{
if(!pressed) return;
if(selected){
int dx,dy;
dx=x-sx;dy=y-sy;
switch(which)
{
case LT:
width-=dx;height-=dy;
X=x;Y=y;
sx=x;sy=y;
needredraw=true;
break;
case MT:
height-=dy;Y=y;
sx=x;sy=y;
needredraw=true;
break;
case RT:
width+=dx;height-=dy;
Y=y;
sx=x;sy=y;
needredraw=true;
break;
case RM:
width+=dx;
sx=x;sy=y;
needredraw=true;
break;
case RB:
width+=dx;height+=dy;
sx=x;sy=y;
needredraw=true;
break;
case MB:
height+=dy;
sx=x;sy=y;
needredraw=true;
break;
case LB:
width-=dx;height+=dy;
X=x;
sx=x;sy=y;
needredraw=true;
break;
case LM:
width-=dx;X=x;
sx=x;sy=y;
needredraw=true;
break;
case INNER:
Move(dx,dy);
sx=x;sy=y;
needredraw=true;
break;
}
}
}
void YRectangle::LeftReleased(int X,int Y)
{
pressed=false;
}void YEllipse::Draw()
{
if(canvas==NULL) return;
if(selected){
YRectangle::Draw();
}
canvas->Ellipse(X,Y,X+width,Y+height);
}
void __fastcall TForm1::PaintMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
int x,y;
x=X-YObject::originx;y=Y-YObject::originy;
if(RBrect->Checked){
YRectangle *p=new YRectangle();
p->X=x;p->Y=y;
p->canvas=Paint->Canvas;
myobjs.Add(p);
}
if(RBcircle->Checked){
YCircle *p=new YCircle();
p->X=x;p->Y=y;
p->canvas=Paint->Canvas;
myobjs.Add(p);
}
if(RBellipse->Checked){
YEllipse *p=new YEllipse();
p->X=x;p->Y=y;
p->canvas=Paint->Canvas;
myobjs.Add(p);
}
if(RBline->Checked)
{
YLine *p=new YLine();
p->X=x;p->Y=y;p->EX=x+10;p->EY=y+10;
p->canvas=Paint->Canvas;
myobjs.Add(p);
}
if(RBselect->Checked){
myobjs.LeftPressed(x,y);
}
if(RBdelete->Checked){
YObject *p=myobjs.WhoIsIt(x,y);
if(p!=NULL) myobjs.Delete(p);
}
Paint->Invalidate();
}
void __fastcall TForm1::PaintMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
myobjs.MouseMoved(X-YObject::originx,Y-YObject::originy);
if(YObject::needredraw){
Paint->Invalidate();
YObject::needredraw=false;
}
}
void __fastcall TForm1::PaintMouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
myobjs.LeftReleased(X-YObject::originx,Y-YObject::originy);
}
void __fastcall TForm1::PaintPaint(TObject *Sender)
{
myobjs.Draw();
}
void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
YObject::originx=-ScrollBar1->Position;
Paint->Invalidate();
}
void __fastcall TForm1::ScrollBar2Change(TObject *Sender)
{
YObject::originy=-ScrollBar2->Position;
Paint->Invalidate();
}
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
String path; char * str; int i;
TStringList * T =new TStringList();
TStringList * Temp =new TStringList();
path=ExtractFilePath(Application->ExeName)+"Mysave.tst";
myobjs.DeleteAll();
T->LoadFromFile(path);
for (i=0;i<T->Count ;i++)
{
str=T->Strings[i].c_str() ;
if (str[0]=='L'){
YLine *p=new YLine();
Temp->Delimiter ='|';
Temp->DelimitedText =str;
p->canvas=Paint->Canvas;
p->X=Temp->Strings[1].ToInt();
p->Y=Temp->Strings[2].ToInt();
p->EX=Temp->Strings[3].ToInt();
p->EY=Temp->Strings[4].ToInt();
myobjs.Add(p);
}
if(str[0]=='C'){
YCircle *p=new YCircle();
Temp->Delimiter ='|';
Temp->DelimitedText =str;
p->canvas=Paint->Canvas;
p->X=Temp->Strings[1].ToInt();
p->Y=Temp->Strings[2].ToInt();
p->radius=Temp->Strings[3].ToInt();
myobjs.Add(p);
}
if(str[0]=='R')
{
YRectangle *p=new YRectangle();
Temp->Delimiter ='|';
Temp->DelimitedText =str;
p->X=Temp->Strings[1].ToInt();
p->Y=Temp->Strings[2].ToInt();
p->width=Temp->Strings[3].ToInt();
p->height=Temp->Strings[4].ToInt();
p->canvas=Paint->Canvas;
myobjs.Add(p);
}
if(str[0]=='E')
{
YEllipse *p=new YEllipse();
Temp->Delimiter ='|';
Temp->DelimitedText =str;
p->X=Temp->Strings[1].ToInt();
p->Y=Temp->Strings[2].ToInt();
p->width=Temp->Strings[3].ToInt();
p->height=Temp->Strings[4].ToInt();
p->canvas=Paint->Canvas;
myobjs.Add(p);
} }
Temp->Free();
T->Free();
myobjs.Draw() ;
ShowMessage("打开成功!");
}
//---------------------------------------------------------------------------void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
String str; str=ExtractFilePath(Application->ExeName)+"Mysave.tst";
myobjs.Save(str); }
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
Close();
}
void __fastcall TForm1::PaintMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
int x,y;
x=X-YObject::originx;y=Y-YObject::originy;
if(RBrect->Checked){
YRectangle *p=new YRectangle();
p->X=x;p->Y=y;
p->canvas=Paint->Canvas;
myobjs.Add(p);
}
if(RBcircle->Checked){
YCircle *p=new YCircle();
p->X=x;p->Y=y;
p->canvas=Paint->Canvas;
myobjs.Add(p);
}
if(RBellipse->Checked){
YEllipse *p=new YEllipse();
p->X=x;p->Y=y;
p->canvas=Paint->Canvas;
myobjs.Add(p);
}
if(RBline->Checked)
{
YLine *p=new YLine();
p->X=x;p->Y=y;p->EX=x+10;p->EY=y+10;
p->canvas=Paint->Canvas;
myobjs.Add(p);
}
if(RBselect->Checked){
myobjs.LeftPressed(x,y);
}
if(RBdelete->Checked){
YObject *p=myobjs.WhoIsIt(x,y);
if(p!=NULL) myobjs.Delete(p);
}
Paint->Invalidate();
}
void __fastcall TForm1::PaintMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
myobjs.MouseMoved(X-YObject::originx,Y-YObject::originy);
if(YObject::needredraw){
Paint->Invalidate();
YObject::needredraw=false;
}
}
void __fastcall TForm1::PaintMouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
myobjs.LeftReleased(X-YObject::originx,Y-YObject::originy);
}
void __fastcall TForm1::PaintPaint(TObject *Sender)
{
myobjs.Draw();
}
void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
YObject::originx=-ScrollBar1->Position;
Paint->Invalidate();
}
void __fastcall TForm1::ScrollBar2Change(TObject *Sender)
{
YObject::originy=-ScrollBar2->Position;
Paint->Invalidate();
}
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
String path;
char * str;
int i;
TStringList * T =new TStringList();
TStringList * Temp =new TStringList(); path=ExtractFilePath(Application->ExeName)+"Mysave.tst";
myobjs.DeleteAll();
T->LoadFromFile(path); for (i=0;i<T->Count ;i++)
{
str=T->Strings[i].c_str() ;
if (str[0]=='L'){
YLine *p=new YLine();
Temp->Delimiter ='|';
Temp->DelimitedText =str;
p->canvas=Paint->Canvas;
p->X=Temp->Strings[1].ToInt();
p->Y=Temp->Strings[2].ToInt();
p->EX=Temp->Strings[3].ToInt();
p->EY=Temp->Strings[4].ToInt();
myobjs.Add(p);
}
if(str[0]=='C'){
YCircle *p=new YCircle();
Temp->Delimiter ='|';
Temp->DelimitedText =str;
p->canvas=Paint->Canvas;
p->X=Temp->Strings[1].ToInt();
p->Y=Temp->Strings[2].ToInt();
p->radius=Temp->Strings[3].ToInt();
myobjs.Add(p);
}
if(str[0]=='R')
{
YRectangle *p=new YRectangle();
Temp->Delimiter ='|';
Temp->DelimitedText =str;
p->X=Temp->Strings[1].ToInt();
p->Y=Temp->Strings[2].ToInt();
p->width=Temp->Strings[3].ToInt();
p->height=Temp->Strings[4].ToInt();
p->canvas=Paint->Canvas;
myobjs.Add(p);
}
if(str[0]=='E')
{
YEllipse *p=new YEllipse();
Temp->Delimiter ='|';
Temp->DelimitedText =str;
p->X=Temp->Strings[1].ToInt();
p->Y=Temp->Strings[2].ToInt();
p->width=Temp->Strings[3].ToInt();
p->height=Temp->Strings[4].ToInt();
p->canvas=Paint->Canvas;
myobjs.Add(p);
}
}
Temp->Free(); T->Free(); myobjs.Draw() ;}
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
String str;
str=ExtractFilePath(Application->ExeName)+"Mysave.tst";
myobjs.Save(str);
}
我想实现个房屋管理的程序,房屋用图形来表示
怎样把铺位以图形的方式存到数据库中?又怎样根据数据库中的信息,用不同的颜色表示铺位的状态(已租、未租、合同、租金过期情况等)及铺位的位置?
~~~~~~~~~~~~~~~~~~~~~~
to: 1285189390(风铃中的刀声)
>>>>>>>>>>你不是要开发Gis吧?
能用空间数据表示更好,有什么好的想法?
但我在里面用一了COM. 所以不好给你源码, 只能给你个提示.
也许能给你个演示程序或思路.
QQ 33591840