procedure TForm1.FormCreate(Sender: TObject);
begin
   image:= TImage.Create(self);
   with image do
   begin
   Left := 100;
   Top := 100;
   parent:= self;
   visable:= true;
   enabled:= true;
   width:= 20;
   height:= 20;
   Imagelist1.GetBitmap(0,image.Picture.Bitmap);
   image.onclick:=imageonclick;
end;procedure TForm1.imageonclick(Sender: TObject);
begin
 showmessage('ok'); 
end;  
以上点击image时,可以响应onclick事件,
当enabled为true,visiable为true时,什么情况下image的onclick事件无法响应

解决方案 »

  1.   

    ?>???你什么都不写不就完了?
    procedure TForm1.imageonclick(Sender: TObject);
    begin
    // showmessage('ok'); 
    end;  
      

  2.   

    楼主的意思是当image看不见的时候点就没用是吗
    你只用这样写就可以拉:
    procedure TForm1.imageonclick(Sender: TObject);
    begin
     if image.visiable=true then
      showmessage('ok'); 
    end;
      

  3.   

    对不起,大家,在做的东西很繁杂,我表达不清楚,是这样的:我希望动态创建一些image,宽20,高20,想在他们的onclick里写入自己的要处理的。像上面所说的,我试过的确可以响应onclick,但是当我移入要做的工程里的时候单击这些image却死活没有反应,我不明白为什么?
    部分代码如下:
    ……
    nodeImageA : array[1..250] of TImage;
    ……
    procedure TForm1.FormCreate(Sender: TObject);
    begin
         Randomize;
         for i:=1 to 250 do
         begin
           
            nodeImageA[i] := TImage.Create(tabsheet7);
            Imagelist1.GetBitmap(0,nodeImageA[i].Picture.Bitmap);
            with nodeImageA[i] do
            begin
               Width :=10;
               Height:= 15;
               DragMode := dmAutomatic;
               DragKind := dkDrag;           Parent := tabsheet7;
               Left :=random(tabsheet7.Width-10);
               Top:= random(tabsheet7.Height-10);
               Visible:=true;
               Enabled := true;
               BringToFront;
               OnClick := ShapeOnClick;  ////点击image(节点)触发shapeonclick事件
             end;
         end;
    end;procedure TForm1.ShapeOnClick(Sender: TObject);
    begin     showmessage('click ok');//////////////end;主要的就是这样的,但是click那些 image时,没有希望的click ok弹出!
    谢谢你们,帮帮忙
      

  4.   

    谢谢了,做了一个完整的小试验,如下:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,ExtCtrls, ImgList, ComCtrls;type
      TForm1 = class(TForm)
        PageControl1: TPageControl;////
        TabSheet1: TTabSheet;        ////
        ImageList1: TImageList;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
         nodeImageA : array[1..250] of TImage;
         procedure ShapeOnClick(Sender: TObject);
     //    procedure click(Sender: TObject; Button: TMouseButton; Shift: 
    //TShiftState; X, Y: Integer);  end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
    i:integer;
    begin
         Randomize;
         for i:=1 to 250 do
         begin
           
            nodeImageA[i] := TImage.Create(tabsheet1);
            Imagelist1.GetBitmap(0,nodeImageA[i].Picture.Bitmap);
            with nodeImageA[i] do
            begin
               Width :=10;
               Height:= 15;
               DragMode := dmAutomatic;
               DragKind := dkDrag;           Parent := tabsheet1;
               Left :=random(tabsheet1.Width-10);
               Top:= random(tabsheet1.Height-10);
               Visible:=true;
               Enabled := true;
               BringToFront;
               OnClick := ShapeOnClick;  ////点击image(节点)触发shapeonclick事件
             end;
            // nodeImageA[i].OnMouseDown:=click;
         end;end;
    procedure TForm1.ShapeOnClick(Sender: TObject);
    begin     showmessage('click ok');//////////////end;//procedure TForm1.click(Sender: TObject; Button: TMouseButton;
    //  Shift: TShiftState; X, Y: Integer);
    //begin
    //showmessage('ok');
    //end;end.
    不管是click还是通过onmousedown,单击image 无任何反应
      

  5.   

    DragMode := dmAutomatic;  //注释掉这行
      

  6.   

    to VisualLion(狮子) 注释掉DragMode := dmAutomatic; 的确可以使onclick响应,谢谢,但是原本image可以拖动的功能却没有了,我得拖动是这样的
    procedure TForm1.TabSheet1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
            (source as TImage).Left:=x;
            (source as TImage).Top:=y;
    end;
    能否有办法使onclick和利用上述拖动能同时实现的?
      

  7.   

    Var
       TemClick         : Procedure(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer) Of Object;
    Begin
             //判断CheckBox的onClick事件是否有内容
             If Assigned(Form1.click) Then
                Begin
                   TemClick := Form1.click;
                   //屏蔽onClick事件代码
                   Form1.click.onClick := Nil;
                   //干你的事
                    ……
                    ……
                   //恢复
                   Form1.click := TemClick;
                End;
    End
      

  8.   

    我想你可以在MouseUP里面写你的代码
      

  9.   

    在mouseup里是可以写,但我的确想知道在我上面说的那种情况下,能否解决?
      

  10.   

    你可以在OnStartDrag事件里写上你在MouseDown里的代码
      

  11.   

    我希望的是不拖动的时候,点击image弹出一窗体,而不是在开始拖动的时候去处理mousedown的东西
      

  12.   

    你可以在drag中判断,但你又要响应拖动,又要响应click本来就不太合理,
    为什么不用双击dblclick
      

  13.   

    nodeImageA[i].OnDblClick:=dbclick;我在formcreate中加入了该句,同样没有反应
      

  14.   

    情况是这样的:动态的创建了若干个image用于表示某个网络中的若干节点,这些节点中间的联系用若干条直线表示,当click某个节点(image)时,希望弹出一个窗体,在窗体上显示相关信息,同时又希望通过鼠标可以拖动这些节点(image)以进行人工的放置节点的位置。所以产生了以上的逻辑
      

  15.   

    OnStartDrag事件里写上你在MouseDown里的代码,我想是可以的
      

  16.   

    设置成双击也会产生冲突,在form上这样是可以的,但是在tabsheet上我不明白为什么会产生冲突,我现在已经决定采取这样的方法:
    对动态创建的image的OnMouseDown事件=imageOnMouseDown(自定义的),dragmode仍然为dmAutomatic;用右键点击来触发自定义事件。右键的down和拖动不冲突
    谢谢大家给于这么多诚恳的建议,再次谢谢了