我现在遇到的问题是,动态创建了可视组件Tedit后,要为这个动态控件指定onmousemove事件,而且不只是动态创建一个Tedit控件,有可能是多个,每个Tedit控件的onmousemove事件是一样的。按照一般的方法,就是先定义一个函数,然后在创建Tedit控件的时候直接指定onmousemove事件,下面是delphi标准的事件代码:
procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
//具体代码省略
end;
请大家注意,创建Tedit我是这样做的(省略了部分内容)
var e:Tedit;
begin
 e:=Tedit.create(self);
 e.parent:=panel1;
 e.onmousemove:=myfunction(//这里的参数不会指定,自定义函数myfunction的代码在下面);
end;
自定义函数myfunction的代码:
procedure   tform1.myfunction(Control:   TControl;   Shift:   TShiftState;   X,   Y,   Precision:   integer);    
  begin   
 //代码省略
 end;
大家注意,自定义函数myfunction中的shift参数和x,y参数在e.onmousemove:=myfunction()如何给出?其他参数不用考虑,我知道怎么写.唯恐问题说不明白,所以比较罗嗦,请大家见谅。多谢!!!

解决方案 »

  1.   

    e.onmousemove:=myfunction;这里不需要指定参数
      

  2.   

    TO trainbox(rain):自定义函数myfunction是有参数的,怎么能在e.onmousemove:=myfunction中不指定参数?
      

  3.   

    你这个参数无非是想指定是哪个Edit触发的事件, 所以没有必要在 myfunction 中指定!你可以利用 Edit 的 tag 属性在myfunction 中:Case When TEdit(Sender).Tag of
    1:
    end
      

  4.   

    TO:Antiquesoft(古董) 我的自定义函数myfunction有多个参数,并非一个参数,而且并不是你说的是想判断是哪个Tedit触发的事件,请把问题看清楚,多谢!
      

  5.   

    注意自定义的事件的参数要与要赋值的事件的参数一致!
    Edit1.OnMouseMove := YourFunc;procedure YourFunc(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin
      Edit2.text := IntToStr(x);
      Edit3.text := IntToStr(y);
    end;
      

  6.   

    TO:kjiwu(阿磊)自定义函数的参数为什么要和要赋值的事件的参数一致?最主要的问题就在于怎么指定参数。可能大家还是没看明白我的疑惑再什么地方啊!请大家注意,自定义函数myfunction的参数shift和x,y与标准onmousemove事件中的参数shift和x,y名称及类型是相同的,但这只是形式的相同而已。关键是给动态创建的Tedit的onmousemove事件赋值myfunction函数,myfunction函数中的shift、x、y的参数值就是要取控件的标准onmousemove事件中的对应参数值,这是最大的问题。
      

  7.   

    一句話: 不行!原因:參數不一致!建議: 使用 Tag
      

  8.   

    事件处理函数必须属于某个对象的。独立函数是不可以作为事件处理函数的。比如 kjiwu(阿磊) 的以下代码Edit1.OnMouseMove := YourFunc;procedure YourFunc(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin
    Edit2.text := IntToStr(x);
    Edit3.text := IntToStr(y);
    end;因为 YourFunc是一个不属于任何对象的,独立的函数,所以这样是不行的。解决办法: 将该函数放到 TForm1 窗口类中,作为窗口的一个成员函数type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure YourFunc(Sender: TObject; Shift: TShiftState; X, Y: Integer);
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.YourFunc(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin
    Edit2.text := IntToStr(x);
    Edit3.text := IntToStr(y);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    Edit1.OnMouseMove := YourFunc;
    end;
      

  9.   

    TO:ahjoe(强哥)我测试一下你的代码
      

  10.   

    TO:ahjoe(强哥)HoHo,你不愧是强哥啊,这么多人就是看不明白我的问题在哪里,只有你一针见血啊,高人啊!!!
    多谢多谢,暂时没多少分,以后必定另外开帖送分!
      

  11.   

    TO:kjiwu(阿磊) 你的答案我由于没仔细分析,当时认为不对,现在看来是正确的,多谢!!!