问题如下,
例如一个控件label1
其单击过程OnClick中含有变量sender
我想知道怎样根据这个sender找到
label1的指针
前提是不允许直接使用@label1,要根据Sender这个变量来确定
例如一个控件label1
其单击过程OnClick中含有变量sender
我想知道怎样根据这个sender找到
label1的指针
前提是不允许直接使用@label1,要根据Sender这个变量来确定
解决方案 »
- 急,急,急 受限用户进不了程序
- SOS 在线等..........
- Delphi怎么判断网上邻居共享目录的权限是否可以写?
- IdUDPServer的问题!这句到底什么含义?熟悉的进!
- 统计问题,请高手帮忙!
- 一个曾经对软件狂热的程序员,想转行开个小店,真诚转让我自己独立开发的产品,寻找买主
- 怎样实现两个ComboBox互动?
- 关于SHFileOperation的奇怪问题
- 请问delphi 中能不能不改变字体的情况下使字符显示宽一点 [RMB奖历]
- 请问nmudp使用的时候怎样得到对方传来的字符串?
- 请问一个"Record not found or changed by another user"错误的问题!高分
- 请问delphi中有这样的控件马?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Label1_2_3_Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Label1_2_3_Click(Sender: TObject);
var
P : Pointer;
begin
Showmessage(TLabel(Sender).Name);
//也可以这样理解:
P := Sender;
Showmessage(TLabel(P).Name);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.OnClick := Label1_2_3_Click;
Label2.OnClick := Label1_2_3_Click;
Label3.OnClick := Label1_2_3_Click;
end;end.
不过我要实现的是获取控件的指针,不是Sender的指针,Sender是局部变量,过程结束后,指针也就无效了
我用在onclick结束后,指针也能指向正确的控件
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
procedure Label1_2_3_Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
var
P : Pointer;procedure TForm1.Label1_2_3_Click(Sender: TObject);
begin
P := Sender;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.OnClick := Label1_2_3_Click;
Label2.OnClick := Label1_2_3_Click;
Label3.OnClick := Label1_2_3_Click;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
if P<>nil then
Showmessage('最近一次被点击的Label是:' + TLabel(P).Name);
end;end.
在label1的onclick过程里赋值 ctrlAddr:=Sender
ctrlAddr是label1的地址么?
P : TLabel;procedure TForm1.Label1_2_3_Click(Sender: TObject);
begin
P := TLabel(Sender); //对象之间的赋值, 仅仅是指针赋值而已 (“引用”)
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.OnClick := Label1_2_3_Click;
Label2.OnClick := Label1_2_3_Click;
Label3.OnClick := Label1_2_3_Click;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
if P<>nil then
Showmessage('最近一次被点击的Label是:' + P.Name);
end;
我这里有label,image,shape三种动态生成的控件,数量和名称不定
另有一个label movePos,单击以上三种控件后指针P就指向具体某一控件a
然后拖动movePos,改变p所代表的控件的位置,
这样单击不同的控件后,拖动movePos就改变相应的控件位置,
所以我要在被拖动的onclick过程里给全局指针变量P赋值你上面的方法具体是不是还应该定义一个TControl的全局变量,然后根据不同的类型实例化?
请明示
var
P : TLabel;
只是在说这样一个意思:对象名字就是一个指针。
回到最初的定义:
var
P : Pointer;
在使用时,TLabel(P).Name这样的使用方式,只是在把这个指针强制转换为一个相应的类型使用。同理,你可以TControl(P).Name这样使用。而不必“还应该定义一个TControl的全局变量”。当然,如果:
var
P : TControl;
也是可以的。