最后的几分了,高手来救命 ( 积分: 100 )

  • 主题发起人 主题发起人 匪匪
  • 开始时间 开始时间

匪匪

Unregistered / Unconfirmed
GUEST, unregistred user!
我模访QQ做一个小程序。
我动态生成了一些按钮。当点击一个按钮时,就出来一个相应的聊天窗口(如果没有显示出来),我现在所有的按钮都是用的一个变量,比如:button: TButton,我怎么保证,我每次通过Button:= TButton.Create(Self);建立的Button对象与前面的都是不一样的。我测试过,这些动态生成的Button的地址都是一样的,handle却不一样。
如果所有这些Button的地址都是一样的。那我怎么办?因为象QQ那样的人物头象按钮都是不同的,他们这些按钮都有一个data:pointer类型的变量,我怎么声明Button变量或怎么做,才能让这些按钮都存在于不同的地址空间。
 
我模访QQ做一个小程序。
我动态生成了一些按钮。当点击一个按钮时,就出来一个相应的聊天窗口(如果没有显示出来),我现在所有的按钮都是用的一个变量,比如:button: TButton,我怎么保证,我每次通过Button:= TButton.Create(Self);建立的Button对象与前面的都是不一样的。我测试过,这些动态生成的Button的地址都是一样的,handle却不一样。
如果所有这些Button的地址都是一样的。那我怎么办?因为象QQ那样的人物头象按钮都是不同的,他们这些按钮都有一个data:pointer类型的变量,我怎么声明Button变量或怎么做,才能让这些按钮都存在于不同的地址空间。
 
D10.天地弦 15:18:13
应该地址不一样吧
匪匪斗神 15:19:42
可是我测试时,发现是一样的啊
D10.天地弦 15:18:40
我看看
匪匪斗神 15:20:06
Showmessage(IntToStr(Dword(Pointer(@Button))))
D10.天地弦 15:19:09
局部变量吧
匪匪斗神 15:20:29
是的。我用的是局部变量
匪匪斗神 15:20:44
如果用全局的,肯定会覆盖掉吧。
D10.天地弦 15:21:19
Showmessage(IntToStr(Dword(Pointer(@Button))))
D10.天地弦 15:21:29
这里你的好像有问题
匪匪斗神 15:22:51
我这只是显示他的地址啊。
D10.天地弦 15:21:45
@Button是这个变量的地址
匪匪斗神 15:22:56
怎么有问题?
匪匪斗神 15:22:59
嗯。
D10.天地弦 15:22:02
而不是Button指象实例的地址
匪匪斗神 15:23:24
那怎么取得实例地址?
匪匪斗神 15:23:51
去掉那个符号?
D10.天地弦 15:22:51
Integer(Button)
D10.天地弦 15:23:08
var
TmpButton:TButton;
i:integer;
begin
for i:=1 to 5 do
begin
TmpButton := TButton.Create(self);
TmpButton.Caption := IntToStr(Integer(TmpButton));
TmpButton.Parent:=self;
TmpButton.Left := 0;
TmpButton.Top := i * 20;
end;
匪匪斗神 15:24:22
这个不行吧。
D10.天地弦 15:23:18
你可以看看,是不一样的
D10.天地弦 15:23:28
@Button这样当然会一样,
匪匪斗神 15:24:53
我试试
D10.天地弦 15:23:45
你可以看看高手突破
D10.天地弦 15:25:14
@Button实际上也是一个指针
匪匪斗神 15:26:42
那是指向 的?
D10.天地弦 15:25:37
里面的内容才是实例所在的地址
匪匪斗神 15:27:11
也就是说@@Button就行了?
D10.天地弦 15:26:03
PInteger(@TmpButton)^
D10.天地弦 15:26:10
这样才是实例的地址
匪匪斗神 15:27:21
我写错了。
D10.天地弦 15:26:16

匪匪斗神 15:27:37

D10.天地弦 15:26:34
@@Button根本不行吧
匪匪斗神 15:27:53
是的。取了两次地址。
匪匪斗神 15:27:59
我所以说我写错了
D10.天地弦 15:26:56
我画个图给你
匪匪斗神 15:28:10

D10.天地弦 15:28:16

D10.天地弦 15:28:22
可以看到不?
匪匪斗神 15:29:47
嗯,看到了。
匪匪斗神 15:30:13
你是说,对象变量其实是一个指针,对吧。
D10.天地弦 15:29:08
对象(Button)其实也是一个指针
匪匪斗神 15:30:22
是指向实例的指针。
匪匪斗神 15:30:26
嗯。
D10.天地弦 15:29:20

D10.天地弦 15:29:26
对的
匪匪斗神 15:30:38

匪匪斗神 15:31:06
那我现在怎么样保证我那些生成的按钮对象都在不同的空间呢?
匪匪斗神 15:31:26
用局部变量就行了吗?
D10.天地弦 15:30:22
TButton.Create(self);这样本来就是在不同的空间了
匪匪斗神 15:31:35
不会覆盖吗?
D10.天地弦 15:30:31
当然不会
匪匪斗神 15:31:41
嗯。
D10.天地弦 15:30:49
Create是构造函数,
匪匪斗神 15:32:05
我试试。你先别走啊。你进去发下言,我给分你。
D10.天地弦 15:31:03
会为实例分配一块新的空间。
匪匪斗神 15:32:13
嗯我懂了。
匪匪斗神 15:32:20

D10.天地弦 15:31:31
你帮我整理一下,放进去吧。可以方便后面的人
D10.天地弦 15:31:40
刚刚的记录。
匪匪斗神 15:32:54
嗯,好的。
D10.天地弦 15:31:44
3Q
匪匪斗神 15:32:59
等下
D10.天地弦 15:31:50

匪匪斗神 15:33:03
还有个问题啊。
 
接受答案了.
 
后退
顶部