如何给一个form上的所有Twincontrol控件的onmousedown事件赋值?(如果有的话)

解决方案 »

  1.   

    var
      i: integer;
    begin
      for i := 0 to form1.ComponentCount-1 do
      begin
        if Form1.Components[i] is TWinControl then
          TWinControl(Form1.Components[i] ).OnMouseDown := YourEvent;
      end;
    end;
      

  2.   

    to ljmanage(过客) 我想你一定没有测试过吧?to  lynew(死循环-开始) :我需要用代码赋值的,因为在设计的时候我还不知道有哪些控件
      

  3.   

    我觉得你直接重载Form的WinProc函数会比较好
      

  4.   

    ljmanage(过客)的思路是对的。
      

  5.   

    to ljmanage(过客) 我想你一定没有测试过吧?
    ???????
    给你就是思路,你不会一行代码也不想写吧
    如果还有什么特别的
    你可以在动态生成控件的时候加tag=9之类的,然后在ljmanage(过客) 的代码中判断tag
      

  6.   

    你有没有考虑到:不同的Twincontrol组件可能有不同的参数。**** 深圳的DELPHI爱好者聚会通知! ****详情请看:
    http://www.delphibbs.com/delphibbs/dispq.asp?LID=1619353
      

  7.   

    to all:Twincontrol没有直接提出OnMouseDown事件,所以直接给TwinControl赋值OnmouseDown事件是根本不会触发的!我想ljmanage只是把现成的代码中事件的名字改了一下就认为可以了,事实上我肯定经过思考和实践才来问问题的,我想回答问题的不要抱着想当然的态度来回答问题,可笑还有不少人“想当然”以为是对的,却不会去试试
      

  8.   

    请教问题要虚心,我们回答可能是错的,但是大伙是热心的,有什么“可笑”
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure btn(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.btn(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ShowMessage('ok');
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      myMemo:TMemo;
    begin
      myMemo:=TMemo.Create(nil);
      with myMemo do
      begin
        parent:=Form1;
        left:=100;
        top:=100;
        onMouseDown:=btn;
      end;
    end;end.
      

  9.   

    to esu(ESU) :你认真想过才回答的吗?
    btw,你上面的这段程序似乎和我的问题没有关系,也许你没看明白我得意思,也许我没说清楚。如果是我没说清楚,那我再说一遍;一个from上面有很多不一样的Twincontrol控件,比如Tlabel,TEdit,TCombox等等,我希望他们响应同一个OnmouseDwon事件MyMouseDown。问通过什么办法可以实现?
    请你想清楚了再回答。
      

  10.   

    那就把你想要付给事件的控件的MOUSEDOWN(假如有的话)指向你自定义的MOUSEDOWN事件或者是已写好的某个控件的MOUSEDOWN事件。在属性的事件列表框中,delphi会显示出来的。
      

  11.   

    灵活一点点
    再本方法一点点
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure btn(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    {$R *.DFM}{ TForm1 }procedure TForm1.btn(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      ShowMessage('ok');
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      myMemo:TMemo;
      myEdit:TEdit;
      i: integer;
    begin
      myMemo:=TMemo.Create(nil);
      with myMemo do
      begin
        parent:=Form1;
        left:=100;
        top:=100;
       // onMouseDown:=btn;
      end;  myEdit:=TEdit.Create(nil);
      with myEdit do
      begin
        parent:=Form1;
        left:=300;
        top:=100;
        onMouseDown:=btn;
      end;  for i := 0 to form1.ControlCount-1 do
      begin
        //这里列出所有响应onMouseDown的
        if (Form1.Controls[i] is TEdit) then
           (Form1.Controls[i] as TEdit).onMouseDown := btn;
        if (Form1.Controls[i] is TMemo) then
           (Form1.Controls[i] as TMemo).onMouseDown := btn;
      end;
    end;end.