比如我动态生成一个Button。现想在使它具有单击事件。或者别的什么事件,应该怎样实现啊?

解决方案 »

  1.   

    呵呵,简单
    生成的button有onclick事件
    你先写一个过程,参数要与onclick的参数一至
    然后,button.onclick := 你的过程名ok
      

  2.   

    是的,先申明一个过程,但过程类型和OnClick必须一致,最后赋值,如下var
      Btn:TButton;procedure TForm1.MyOnClick(Sender:TObject);
    begin
      //SomeCodeImplementYourFunctionHere
    end;....procedure TForm1.FormCreate(Sender:TObject);
    begin
      Btn:=TButton.Create(Self);
      with Btn do 
      begin
        Parent:=Self;
        OnClick:=Self.MyOnClick;
      end;
    end;
      

  3.   

    FrameSniper(§绕瀑游龙§) 已经回答了
      

  4.   

    to 绕瀑游龙
      我做这个系统的构思是:在程序运行时在panel控件中动态生成几个shape控件,生成的控件在panel中当用鼠标拖动其中一个shape时,这个shape应能够移动。你觉得这个功能应该什么实现。
      

  5.   

    哦,就是实现控件的动态拖动吧!只要上层基类中包含TControl就好实现,如下:从TShape派生一个子类TMoveShape,然后覆盖基类的动态方法MouseDown并且写一个处理WM_SysCommand消息的消息处理器就可以了!type 
      TMoveShape = class(TShape) 
      private 
        fDragable:Boolean; 
      protected 
        procedure MouseDown(Button: TMouseButton;Shift: TShiftState; X, Y: Integer);override; 
      public 
        Constructor Create(AOwner:TComponent);override; 
        Destructor Destroy;override; 
      published 
        property Dragable:Boolean read fDragable write fDragable; 
      end;procedure Register; implementation procedure Register; 
    begin 
      RegisterComponents('MoveShape', [TMoveShape]); 
    end; { TMoveShape } 
    constructor TMoveShape.Create(AOwner: TComponent); 
    begin 
      inherited Create(AOwner); 
    end; destructor TMoveShape.Destroy; 
    begin 
      inherited; 
    end; procedure TMoveShape.MouseDown(Button: TMouseButton; Shift: TShiftState; X, 
      Y: Integer); 
    const 
      SC_DragMove = $F012;
    begin 
      inherited; 
      if assigned(onMouseDown)then 
        OnMouseDown(self,Button,Shift,x,y); 
      if fDragable then 
      begin 
        ReleaseCapture; 
        (self as TControl).perform(WM_SysCommand, SC_DragMove, 0);  
      end; 
    end; 如此实现后,就可以实现运行时拖动了!
     
      

  6.   

    to 绕瀑游龙
       可能是我没有把问题说清楚,让你误解了我的意思,我的想法是在程序运行时生成一个shape,然后能够拖动它,再把它拖动后的位置保存在表里面,以便下次程序运行时,直接从表里获得该shape拖动后的位置。如果shape是静态产生的就很容易,但如果是动态生成时,由于没有了mousedown事件,就比较麻烦了。我觉得应该用你第一个回贴就可以实现,但又不知道具体代码如何写。你能不能帮我实现它?谢了!!!呵呵!!
      

  7.   

    不,首先用我的第一个代码无法实现你说的功能;其次,MouseDown事件是肯定有的。我上面给你的代码只是叫你派生一个TShape的子类,并且覆盖它的MouseDown事件来让这个类可以在运行时可以被拖动!你只要动态创建上面这个类的对象就可以了!
      

  8.   

    不,你只要按照上面那样申明一个子类,然后动态创建就可以了!上面那个派生的TShape子类就可以实现拖动效果另外我给你的第一段代码是不能实现你的功能的!
      

  9.   

    你给的那个代码好像不能实现拖动的较果啊。你有没有msn啊。我的是[email protected]
    我们能否用msn交流下。呵呵!!
      

  10.   

    FrameSniper(§绕瀑游龙§) 已经说的很清楚了!你只要在程序中动态的创建他写的那个子类的对象,就可以实现你要求拖动的功能!佩服FrameSniper(§绕瀑游龙§)   信誉值好高啊!
      

  11.   

    我的信誉分是通过提交FAQ提上去的!另外楼主,你说的没有错误,那个代码是通过不了,我一直试了很多次!我到是昨天知道个方法,帮你找找!
      

  12.   

    http://expert.csdn.net/Expert/topic/2309/2309386.xml?temp=.8004724这个地址里面后面有个人的回复的方法很简单实用,你可以实验实验,我已经实验通过了