是这样的,我想在一个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;

解决方案 »

  1.   

    首先你要学好面向对象
    接下来,定义一个图形基类,这个类包括各种共用的操作及属性,比如MouseMove,MouseDown,判断鼠标是否在图形上,选中某一个图形等等,各种绘图元素从此基类派生,你每画一个图形元素,都要作为一个对象维护起来
    最后要做的就是对对象列表中的对象进行操作,而不是直接到image上去找,会死人的
      

  2.   

    图片文件不用保存,保存到内存DC就可以,也可以直接在内存DC上画
      

  3.   

    T圆=class
      图心位置:TPoint;
      半径:Double;
      颜色:Tcolor;
      procedure Draw(ACanvas:TCanvas);//绘制圆
    end;T矩形
      起点,终点位置:TRect;
      颜色:Tcolor;
      procedure Draw(ACanvas:TCanvas);//绘制矩形
    end;用鼠标起点,终点来确定位置,创建一个对象,保存在列表中。
    循环调用列表中的对象的Draw 来绘制图象。
      

  4.   

    以前做过
    http://www.ahjoe.com/source/cardsmdi.asp