主要源码如下:在Panel1上创建一组TImage控件: 
 public
    { Public declarations }      procedure ClickMe(Sender: TObject);
 
var
  Form1: TForm1;
  Image:TImage;
  ImageList:TList;
  xleft,ytop:integer;procedure TForm1.FormCreate(Sender: TObject);
begin
  xleft:=100;
  ytop:=10;
  ImageList:=TList.Create;
end;procedure TForm1.FormDestroy(Sender: TObject);
var
   t:integer;
begin
   for t:=ImageList.Count - 1 downto 0 do
     TImage(ImageList[t]).Free;
   ImageList.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
      fImage:=TImage.Create(self.Panel1);
      with fImage do
       begin
        //属性
        Parent:=self.Panel1;
        Left :=xleft;
        Top := ytop;
        Width:=50;
        Height:=50;
        Stretch:=true;
        Picture.LoadFromFil('c:\1.bmp');         
        Tag:=ImageList.Count;
        Visible:=true;        //事件
        OnClick:=ClickMe;
       end;      ImageList.Add(fImage);
      ytop:=ytop+55;
end;procedure TForm1.ClickMe(Sender: TObject);
begin
   ShowMessage('ok'+IntToStr(fImage.Top));
   //点击任意一个Image,只能显示最后创建的Image的值。
     如何准确识别哪一个Image被点击?
   //最好是具有唯一性,即如果有两个以上的Image的BoundsRect完全相同(即相互覆盖),也能准确识别。
end;

解决方案 »

  1.   

    if Sender is TImage then
    begin
      ShowMessage('ok'+IntToStr((Sender as TImage).Top));
    end;
      

  2.   

    同意楼上,动态的要对Sender转换一下
      

  3.   

    用tag标记(各个可视组件都有tag标记属性)。如设Image1.tag := 1; Image2.tag := 2;在响应时可以使用    case (sender as TImage).tag of
          1:{处理Image1};
          2:{处理Image2};
        end;
      

  4.   

    同意  crapex(编程浪子) 的做法!!