Self.Handle的值在运行时居然会改变

iqyely 2011-12-22 05:08:04
目前最新的XE2 Update3

当换皮肤后TStyleManager.TrySetStyle('Emerald Light Slate');
主窗体的Self.Handle值居然变化了,整的人好晕。这算是BUG么?

部门测试代码

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add('1:' + IntToStr(Self.Handle));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
TStyleManager.TrySetStyle('Emerald Light Slate');
Memo1.Lines.Add('2:' + IntToStr(Self.Handle));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Lines.Add('3:' + IntToStr(Self.Handle));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
...全文
238 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iqyely 2011-12-23
  • 打赏
  • 举报
回复
查谷歌和他的帮助文档对这个消息CM_CUSTOMSTYLECHANGED是干嘛的都一无所获啊。
纠结中。
iqyely 2011-12-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 funxu 的回复:]

句柄被改了?神马情况,不过句柄就是个地址标识,记得以前看过一本书中提到过,运行时句柄是可以被修改的
[/Quote]

以前真没碰到过句柄变了的,如果变了,那进程通信时岂不是每次都要重新获取下。我一直以为这是个定值呢
kaikai_kk 2011-12-22
  • 打赏
  • 举报
回复
看它他的源码,最后每个窗口都会发一个CM_CUSTOMSTYLECHANGED消息
CM_CUSTOMSTYLECHANGED值是:$B000+89 即10进制的45145,不知道是什么消息,窗口会变一下
应该是把地址变了,所以handle也就变了

你可以不用皮肤.单独这样测试,它也是变了的:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add('1:' + IntToStr(Self.Handle));
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
SendMessage(self.Handle, 45145, 0, 0);
Memo1.Lines.Add('2:' + IntToStr(Self.Handle));
end;
ccrun.com 2011-12-22
  • 打赏
  • 举报
回复
可能是RecreateWnd方法起了作用。
funxu 2011-12-22
  • 打赏
  • 举报
回复
句柄被改了?神马情况,不过句柄就是个地址标识,记得以前看过一本书中提到过,运行时句柄是可以被修改的

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧