x,y都是从数据库中取值,然后所有点输出到一个image控件上,
 for i:=0 to di do
begin   Query1.Close;
   Query1.SQL.Clear;
   Query1.SQL.Add('select *  from ip.db where id='+IntToStr(i));
   Query1.Open;
   name:=Query1.fieldbyname('名称').AsString;
   x:=Query1.fieldbyname('x').AsInteger;
   y:=Query1.fieldbyname('y').AsInteger;
   Canvas.Brush.Style:=bsClear;
   image1.Canvas.TextOut(x,y,name);
  end;
怎么给image1.Canvas.TextOut(x,y,name)输出的点加上一个事件,点击这个点完成我需要的功能。

解决方案 »

  1.   

    这个非常简单!首先,你要保证你的Image里面的图片是BMP格式。然后你在鼠标的Image1MouseUp事件里面判断坐标是否与你的X和Y相等即可。建议你别用X和Y,否则与Image1MouseUp事件里面的X和Y冲突。
      

  2.   

    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    beginend;
    加到这里面试一下
      

  3.   

    你输出的点只是画在canvas上的,而不是一个控件,所以无法加事件。要加也只能加在image上
    估计只能用image.onclick,然后判断鼠标位置。
      

  4.   

    例如: Zx:=Query1.fieldbyname('x').AsInteger;
     Zy:=Query1.fieldbyname('y').AsInteger;
    那么:procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if (Zx=x) and (Zx=Y) then
       begin    //这就是你的事件啦!   end;
    end;
      

  5.   

    procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    beginend;
      

  6.   

    procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var 
      iX,iY : Integer;
    begin
    for i:=0 to di do
      begin
       Query1.Close;
       Query1.SQL.Clear;
       Query1.SQL.Add('select *  from ip.db where id='+IntToStr(i));
       Query1.Open;
       name:=Query1.fieldbyname('名称').AsString;
       x:=Query1.fieldbyname('x').AsInteger;
       y:=Query1.fieldbyname('y').AsInteger;
       if (iX = X) and (iY = Y) then 
         begin
           Canvas.Brush.Style:=bsClear;
           image1.Canvas.TextOut(x,y,name);
         end;
      end;
    end;
      

  7.   

    MouseDown中的点应该和你的image1.Canvas.TextOut是完全一致的吧,哪怕再小都可以吧?
      

  8.   

    做好了,弄了一个范围,谢谢大家
     
    x3:=Query1.fieldbyname('x').AsInteger;
    y3:=Query1.fieldbyname('y').AsInteger;
    x1:=strtoint(edit1.Text);
    y1:=strtoint(edit2.Text);x5:=x1-40;
    y5:=y1+10;
    if (x1>x3) and (x3>x5) and(y1<y3) and(y3<y5) then