1、我创建了一组动态Image,并载入了图片
在双击事件中我如何知道是哪个Image被点击了呢?能否传递一些参数?
TImage(sender)虽然可以对相应的Image作处理,但是不知道是创建的第
几个Image,从而获取到相应的其它信息。
2、如何让Image的双击事件和Label关联起来,即点击一个Image的时候相当于
同时点击了label,并获得Label的caption?
谢谢

解决方案 »

  1.   

    1、我创建了一组动态Image,并载入了图片 
    在双击事件中我如何知道是哪个Image被点击了呢?能否传递一些参数? 
    TImage(sender)虽然可以对相应的Image作处理,但是不知道是创建的第 
    几个Image,从而获取到相应的其它信息。
    思路:
    定义一个公用的image单击事件
    procedure imageclick(sender:TObject);
    begin
      .....
    end;创建image时要赋name这个属性
    如 for i:=0 to 10 do
       begin
         image:=Timgae.creat(self);
         .....
         image.name:='image'+inttostr(i);//这个是关键
          image.onclick:=imageclick;
       end;
    然后查找时用
      self.FindComponent('image1');找到这个image再执行对应的事件
    这些是伪代码,你自已再稍做修改。
      

  2.   

    给Timage.Tag赋值,就可在双击事件中判断了:if TImage(Sender).Tag = 1 then
      ....
      

  3.   

    这个函数应该这样
    procedure Txxx. imageclick(sender:TObject); 
    begin 
      ..... 
    end; 
      

  4.   

    你可以参考一下这个帖子
    http://topic.csdn.net/u/20080903/16/7d3ffa6c-6376-4ed9-a20f-8eafe3e4a653.html
      

  5.   

    1.你可用参数(Sender as TImage).Name 来判是那个Image被点击了
    2.在程序中可用
       Label1Click(Sender);
      来点击一个Image的时候相当于同时点击了label
      

  6.   

      为什么我直接将给Image.name赋值时会出现 1 is not a valid component name ?
      

  7.   

     能详细点吗?我说的是一组动态Image和Label
      

  8.   


    呵~~给你写个演示代码吧。不知你是如何动态创建一组Image的,我的代码只是启发你。另外,Label也可用类似方法创建。这个演示需要C:\下有三个bmp文件,分别是a001.bmp  a002.bmp  a003.bmp
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure ImgDblClick(Sender: TObject);
        procedure LblClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ImgDblClick(Sender: TObject);
    begin
      Showmessage(TImage(Sender).Name);
      LblClick(Self.FindComponent(Format('Label%d',[TImage(Sender).Tag])));
    end;procedure TForm1.LblClick(Sender: TObject);
    begin
      Showmessage(TLabel(Sender).Caption);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      I : integer;
    begin
      for I := 1 to 3 do
        with TImage.Create(Self) do begin
          Name := 'Img' + Format('%.3d',[I]);
          Parent := Self;
          Top := 30;
          Left := 50 + 100*I;
          Tag := I;
          Picture.Bitmap.LoadFromFile(Format('c:\a%.3d.bmp',[I]));
          OnDblClick := Self.ImgDblClick;
        end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      I : integer;
    begin
      for I := 1 to 3 do
        TLabel(Self.FindComponent(Format('Label%d',[I]))).OnClick := Self.LblClick;
    end;end.
      

  9.   

    另外,上面代码,象
     for I := 1 to 3 do
        TLabel(Self.FindComponent(Format('Label%d',[I]))).OnClick := Self.LblClick;
    这样的,可以换成别的方法。我只是顺手用了这个方法。
      

  10.   

    给你个例子:unit dimage;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls,StrUtils;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        procedure MyImageClick(Sender: TObject);
        procedure MyLabelClick(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.MyImageClick(Sender: TObject);
    var
      t:Tlabel;
      s:string;
      i,no:integer;
    begin
      s:=(Sender as Timage).Name;
      ShowMessage('你点击了'+s);
      no:=StrToInt(RightStr(s,1));
      s:='MyLabel'+IntToStr(no);
      t:=FindComponent(s) as TLabel;  if t<>nil then
        T.OnClick(t);
    end;
    procedure TForm1.MyLabelClick(Sender: TObject);
    begin
      ShowMessage('你点击了'+(Sender as TLabel).Name+' Captoin:'+(Sender as TLabel).Caption);
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
      img:TImage;
      lb:tlabel;
    begin
      for i:=1 to 5 do
      begin
         img:=TImage.Create(self);
         img.Parent:=self;
         img.Top:=100;
         img.Left:=i*100+20;
         img.Width:=100;
         img.Height:=100;
         img.Name:='MyImage'+inttostr(i);
         img.Picture.LoadFromFile('d:\icno\102.ico');
         img.OnClick:=MyImageClick;
         lb:=TLabel.Create(self);
         lb.Parent:=self;
         lb.Name:='MyLabel'+inttostr(i);
         lb.Caption:='MyCaption'+inttostr(i);
         lb.Top:=80;
         lb.Left:=i*100+20;
         lb.OnClick:=MyLabelClick;
      end;
    end;end.