DELPHI 给动态创建的控件指定onclick事件处理过程,如何传递自己的参数

动态创建的label,在其onclick事件中赋值LabOnClick这个过程
newLabel.OnClick:=LabOnClick(Sender;'说明');
声明:
procedure LabOnClick(Sender:Tobject,msgStr:String);
过程:
procedure Tform1.LabOnClick(Sender:Tobject,msgStr:String);
begin
showmessage();
end;

这个里面加msgStr参数会出错,不知道如何加这个参数,赋值的时候写Sender是否不对

第1个回答  2013-03-19
label的onClick事件 对应的只有Sender:Tobject 一个参数
你的 LabOnClick(Sender:Tobject,msgStr:String);

怎么也是对不起来的。所以不行

要么 1 重写一个label
2 我惯用的偷懒办法
newLabel.OnClick:=LabOnClick(Sender);
然后每个label的hint不一样 每次点击
就获取其中的hint

procedure TForm1.LabOnClick(Sender: TObject);
begin
showmessage(Tlabel(Sender).Hint);
end;
实际上 我动态创建很多控件,经常拿tag来区分的
比如说
设备1 ID是3 newLabel.tag:=3;
设备2 ID是9 newLabel.tag:=9;
事件发生后 就根据 Tlabel(Sender).tag 我就知道是哪个设备被点击了
不用String字段本回答被提问者采纳
第2个回答  2013-03-19
告诉你一个本办法,很好使,而且在改代码的时候很方便,特别使用于动态加好多控件的。
例如,需要动态建立50个label,点击的时候出现对话框,提示本laibel的标题。
你先在form上添加一个label,名称为label0,编写label的代码:
procedure TForm1.Label1Click(Sender: TObject);
begin
ShowMessage(TLabel(sender).Caption);
end;
生成50个label并赋予点击事件:
procedure TForm1.btn1Click(Sender: TObject);
var labels : array[1..50] of TLabel;
begin
for i:=1 to 50 do
labels[i] = TLabel.Create(nil);
labels[i].OnClick := label1.OnClick;
end;
至于位置、父容器什么你再编代码设置。

DELPHI 给动态创建的控件指定onclick事件处理过程,如何传递自己的参数...
label的onClick事件 对应的只有Sender:Tobject 一个参数 你的 LabOnClick(Sender:Tobject,msgStr:String);怎么也是对不起来的。所以不行 要么 1 重写一个label 2 我惯用的偷懒办法 newLabel.OnClick:=LabOnClick(Sender);然后每个label的hint不一样 每次点击 就获取其中的hint procedure TForm1.L...

Delphi中动态生成的button调用onclick如何传递参数
Delphi中的事件(Event)实际上是一个方法指针。象楼上写的 btn.OnClick := OnClick; 这样的语句实际上就是把新生成的Button的Onclick这个方法指针指向自己写的OnClick这个过程。第二个问题,有办法,就是Sender参数。它就是调用本过程的主体。如果你看一下TButton的源代码,会发现传入的参数就是本对...

delphi中怎样判断事件触发
说白了 OnClick 是一个指针 它可以指向你所为它指定的 过程; 你需要在动态创建Label 的时候将创建出来的Label 的Onclick 事件分配给 一个TNotifyEvent格式 事件. 如 procedure Form1.LabelsClicked(Sender: TObject);begin end;注意它的参数: Sender 其实它是一个指针。 而Sender 此时事实上就是 这...

delphi中怎样判断事件触发
说白了 OnClick 是一个指针 它可以指向你所为它指定的 过程; 你需要在动态创建Label 的时候将创建出来的Label 的Onclick 事件分配给 一个TNotifyEvent格式 事件. 如 procedure Form1.LabelsClicked(Sender: TObject);begin end;注意它的参数: Sender 其实它是一个指针。 而Sender 此时事实上就是 这...

DELPHI基础教程:Delphi自定义部件开发(二)[4]
因为所有事件处理过程都是过程 所以从事件处理过程中返回信息的唯一方法是通过var参数 自定义部件可以用这些信息决定在用户事件处理过程执行后是否和怎样处理事件 例如 所有的击键事件(OnKeyDown OnKeyUp和OnKeyPressed)通过名为key的var参数传递键值 为了使应用程序看见包含在事件中的不同的键 事件处理过程可以改变key...

关于Delphi中动态数组的问题
Create(SELF);ImageBuffer[0].Tag := 0;...ImageBuffer[0].OnClick := Image0Click;ImageBuffer[1] := TImage.Create(SELF);...end;procedure TForm1.Image0Click(Sender: TObject);begin ShowMessage('Image0 Clicked!');end;Delphi语法还是很活的,只有想不到的,没有做不到的 ...

DELPHI基础教程:简单数据库应用的创建及MASTAPP介绍(二)[2]
为Read按钮编辑的OnClick事件处理过程如下 procedure Form TButton Click(Sender:TObject)begin Edit Text:=Table Company Value;end;在这里要注意的是 从字段对象中读取字段值时必须要将它赋给与之数据类型相匹配的变量 否则会出错 在上面的程序代码中 Table Company的类型是TStringField 即是字符串类型...

delphi的函数
为按钮的OnClick事件建立事件处理过程如下:procedureTForm1.ChangeColorClick(Sender:TObject);beginif ColorDialog1.Execute thenForm1.Color:=ColorDialog1.ColorelseForm1.Color:=clRed;end;此事件处理过程使用一个返回Boolean值的Execute方法。按动按钮,并在颜色对话框中选择一个颜色。如果按动OK按钮,...

Delphi关于函数后边跟上(Sender:TObject)的用法
Sender是一个TObject类型的参数,它告诉Delphi哪个控件接收这个事件并调用相应的处理过程。你可以编写一个单一的事件处理句柄,通过Sender参数和IF…THEN…语句或者CASE语句配合,来处理多个构件。发生事件的构件或控件的值已经赋给了Sender参数,该参数的用途之一就在于:可以使用保留字IS来测试Sender,以便找到...

在Delphi中怎样抓取鼠标形状
对于这两个属性,Delphi提供了如下值供用户选择:cdDefault、crArrow、cdCross、crBeam、crSize等十几个属性值。二、鼠标的移动 鼠标移动时会触发事件OnMouseMove,语法如下: procedure ObjectMouseMove(Sender:TObject;Shift:TshiftState;X,Y:Integer) 其中参数Sender代表((目标对象)),参数Shift代表鼠标移动时需同时按...

相似回答