我现在遇到的问题是,动态创建了可视组件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()如何给出?其他参数不用考虑,我知道怎么写.唯恐问题说不明白,所以比较罗嗦,请大家见谅。多谢!!!
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:
end
Edit1.OnMouseMove := YourFunc;procedure YourFunc(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Edit2.text := IntToStr(x);
Edit3.text := IntToStr(y);
end;
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;
多谢多谢,暂时没多少分,以后必定另外开帖送分!