目前最新的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;

解决方案 »

  1.   

    可能是RecreateWnd方法起了作用。
      

  2.   

    看它他的源码,最后每个窗口都会发一个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;
      

  3.   

    查谷歌和他的帮助文档对这个消息CM_CUSTOMSTYLECHANGED是干嘛的都一无所获啊。
    纠结中。