我在XE2上遇到了一个奇怪的问题:
我正在使用HWND_TOPMOST和SetWindowPos来设置我的表单在顶部,但是如果我在运行时切换VCL样式,窗口不再是最上面的,取消设置/重新设置它也不能修复它。
有什么办法解决这个问题吗?
发布于 2012-05-10 08:35:23
您的问题是由于样式更改而重新创建表单,并且由于VCL对此一无所知而丢失了其最顶层的样式。使用以下两种方法:
FormStyle := fsStayOnTop; 或者覆盖CreateWindowHandle,以便每次重新创建表单时都会调用SetWindowPos:
type
TForm1 = class(TForm)
..
protected
procedure CreateWindowHandle(const Params: TCreateParams); override;
..
procedure TForm1.CreateWindowHandle(const Params: TCreateParams);
begin
inherited;
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
end;顺便说一句,我不能重复“取消设置/重新设置不能修复它”。在我的测试中,再次调用SetWindowPos修复了这个问题。
https://stackoverflow.com/questions/10525823
复制相似问题