您好,我这里做一个软件,鼠标点到FORM上,自动创建一个IMAGE,记录下X,Y坐标,然后在点到其它地方,上次创建的IMAGE要销毁,然后再记录新控件的X,Y坐标,不知道如何实现,谢谢您告诉我。 假如FORM上CREATE了多个TIMAGE,如何通过命令来销毁他们,还有就是如果知道多个坐标,又如何依次的CREATE这些IMAGE呢。

解决方案 »

  1.   

    为什么要销毁呢?你不是要移动该控件吗?移动就好了呀!控件里设两属性保存座标就好了呀!多个TIMAGE?不同的对象那里会有混肴呢?
      

  2.   

    如果知道多个坐标,又如何依次的CREATE这些IMAGE呢。如果象你说的那样创建控件后再把座标付给他们!
      

  3.   

    var
    i:integer;
    image1:Timage;
    begin
    for i:=0 to ComponentCount-1 do
    begin
     if Components[i] is TImage then
        TImage(Components[i]).Free;
    end;
    image1:=TImage.Create(self);
    image1.Top:=100;//坐标
    image1.Left:=100;//坐标
    image1.Height:=100;
    image1.Width:=100;
    image1.Parent:=Form1;
    image1.Canvas.TextOut(10,10,'ok');
    end;
      

  4.   

    hsmserver(撒哈拉之雨的悲伤) 的做法是可以的
    只是还要取鼠标所在位置的坐标
    var
       winPos:TPoint;
    begin
       GetCursorPos(winpos);  //得到当前鼠标指针的在屏幕上的坐标
      ------------------------------------
    心中多少的创伤,不可抵挡的空虚,卑躬屈膝的一生,今天只想冲出那枷锁,就要象狂人,金属者---金属狂人
      

  5.   

    to hsmserver(撒哈拉之雨的悲伤) 您的做法我刚才实验过了,控件没有销毁,是不是哪里有问题。
      

  6.   

    //以下代码调试通过,不过具体位置好象有点点不准确
    //假设D:\1.bmp存在
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
     i: integer;
     P: TPoint;
     image: TImage;
    begin
      for i:=0 to ComponentCount-1 do
      begin
        if Components[i] is TImage then
          TImage(Components[i]).Destroy;
      end;
      GetCursorPos(p);
      image := TImage.Create(Form1);
      image.Parent := Form1;
      image.Top := p.Y-image.Height*2 ;
      image.Left := p.X-image.Width*2 ;
      image.Stretch := true;
      image.Picture.LoadFromFile('D:\1.bmp');end;
      

  7.   

    就是得到坐标点那里好象不准确
    大家看看问题在哪?
    理论上应该是(p.X+image.Width/2)或者(p.Y+image.Height/2)
    得出来的坐标结果不准确
      

  8.   

    为什么不直接用p.y,p.x作为它的左上角的坐标?
    或者应该是(p.X-image.Width/2)或者(p.Y-image.Height/2)