image22.name就是了呀,不用什么转换直接用就行了。

解决方案 »

  1.   

    还有,在用paintbox进行图形绘制时,如被其他窗口遮挡则显示后即擦除了所画图形,我看了以前的帖子,还没有解决的办法,难道除了重新绘制外真的没有其他方法了吗?好象在VC中设置invalidate即可,不知在delphi中应如何解决,望高人予以指教!
      

  2.   

    invalidate就是重画,一样的,
    呵呵,你如果把画图的函数写在onpaint事件中的话,就可以
    也就是相当于调用了invalidate
      

  3.   

    各位误解了我的意思,在我的程序中大约添加了100多个image,从image1到image100,用鼠标右键单击任一image后进行某项操作,操作中我希望知道到底单击的是哪一个,源码如下:  MyImg:=FramePopupMenu.PopupComponent as TImage;比如我单击的是image22,但我应如何将其对象名转化为字符串呢?
      

  4.   

    to netlib:但我的绘制过程是随机的,就象“附件”中的画图程序,用鼠标随意乱画后,遮挡后即不会被清除。
      

  5.   

    我看不可能办到,Image1,Image2只是一下标识复而已,在编译时实际上已经被编译器转换为一个指定的指针值,也就是说内存中根本就不存在Image1,Image2这些东西了,又如何能得到1,2.
      

  6.   

    直接调用invalidate重画被遮部分
      

  7.   

    用Click 事件中的Sender对象,(Sender as TImage).name取得对象名称
      

  8.   

    MyImg:=FramePopupMenu.PopupComponent as TImage;
    if Assigned(MyImg) then
      ShowMessage(MyImg.Name);
      

  9.   

    当你点击Image控件产生的事件写代码:
    var sName:string;//对象名
      if (sender is TImage) then 
       begin
        sName:=(sender as TImage).Name
       end;
      

  10.   

    取对象名称用(sender as TImage).name是可以的,
    但你让系统重画不擦除你,可以用截获WM_ERASEBKGND系统消息,
    但这样会带来一大堆画图的事件,因为应该程序的界面都要你自己处理了,
    还有一种方法,就是你把你乱画的东西通过一定的方法保存起来,
    重画的时候画上去
      

  11.   

    看来大家都没有看清jingfan () 的要求,他要的是Image1,Image2这些东西,(Sender as TImage).Name返回的是"TImage",不管是单击Image1还是Image2还是其它的Image?,返回值都永远是"TImage"
      

  12.   

    谢谢各位的建议,对象名转换为字符串我已经实现了,分已送出,但paintbox问题仍不知如何解决,我本来想利用paintbox的enable属性,开始设为true,画完后设为false,但设为false后所画的图形即消失,不知何故?另:如果采用其他控件,能否实现画图后遮挡不消除吗?期待着各位高人的指点!