是这样的,我想在一个Image上画很多圆和矩形,问题:1.如何进行选中和移动操作?有没示例代码?2.因为,我要画的是很多圆和矩形,有什么好的方案来解决上述第一点的问题?3.如何保存这些圆和矩形的坐标,以及原有图片成一个文件?
以下是相关测试代码:1.绘图。
image1.Canvas.Pen.Style:=psSolid;
image1.Canvas.Pen.Color:=clred;
image1.Canvas.Pen.Width:=1;
image1.Canvas.Brush.Style := bsClear;
if DrawType=2 then //画圆
image1.Canvas.Ellipse(fx,fy,x,y)
else
image1.Canvas.Rectangle(fx,fy,x,y);//画方
Self.Cursor:=crDefault;
2.判断坐标是否则在矩形内。var
myRect : TRect;
begin
// 创建一个矩形
myRect := Rect(20, 30, 100, 200);
// 检查点(20,30) 是否在矩形内
if PtInRect(myRect, Point(20,30)) then
ShowMessage(' 25, 33 is inside the rectangle')
else
ShowMessage(' 25, 33 is outside the rectangle');
end;
接下来,定义一个图形基类,这个类包括各种共用的操作及属性,比如MouseMove,MouseDown,判断鼠标是否在图形上,选中某一个图形等等,各种绘图元素从此基类派生,你每画一个图形元素,都要作为一个对象维护起来
最后要做的就是对对象列表中的对象进行操作,而不是直接到image上去找,会死人的
图心位置:TPoint;
半径:Double;
颜色:Tcolor;
procedure Draw(ACanvas:TCanvas);//绘制圆
end;T矩形
起点,终点位置:TRect;
颜色:Tcolor;
procedure Draw(ACanvas:TCanvas);//绘制矩形
end;用鼠标起点,终点来确定位置,创建一个对象,保存在列表中。
循环调用列表中的对象的Draw 来绘制图象。
http://www.ahjoe.com/source/cardsmdi.asp