- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果(在德尔福中)我愿意
Panel1.ManualFloat(Rect(500,500,600,600));
面板不是 float 在指定的矩形位置,而是 float 在某种 Windows 默认位置。如何让面板(或其他控件) float 在指定位置。然而,它似乎确实具有正确的形状。我是否需要设置其他一些属性才能使其正常工作?
编辑:只是为了让事情变得清楚。我希望上面的代码使面板成为一个 100x100 的正方形,位于相对于屏幕左上角的 (500x500) 处,但事实并非如此。形状正确,但位置不正确。如果后续控件是 float 的,它们会沿着屏幕向下层叠。
Edit2:这在 Delphi 7 中似乎不是问题,但在 Delphi 2007 到 XE2(可能更早)中是问题
最佳答案
别再看了:这是 VCL 中的一个错误。
ManualFloat
创建一个 float 窗口,并在 Top
中设置其 Left
、 TControl.CreateFloatingDockSite(Bounds: TRect)
值,随后设置其 ClientWidth
。
这是一个错误,因为这样做会强制创建 WindowHandle(它还没有句柄)
function TCustomForm.GetClientRect: TRect;
begin
if IsIconic(Handle) then // <===
这会调用窗口的默认定位(级联yadda yadda...)重置Top
和Left
修复方法是在 ClientWidth
中设置 ClientHeight
和 Top
属性之前设置 Left
和 TControl.CreateFloatingDockSite(Bounds: TRect)
更新:Controls.pas中的固定代码
function TControl.CreateFloatingDockSite(Bounds: TRect): TWinControl;
begin
Result := nil;
if (FloatingDockSiteClass <> nil) and
(FloatingDockSiteClass <> TWinControlClass(ClassType)) then
begin
Result := FloatingDockSiteClass.Create(Application);
with Bounds do
begin
// Setting Client area can create the window handle and reset Top and Left
Result.ClientWidth := Right - Left;
Result.ClientHeight := Bottom - Top;
// It is now safe to position the window where asked
Result.Top := Top;
Result.Left := Left;
end;
end;
end;
关于delphi - ManualFloat 不使用指定的 Rect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10003858/
如果(在德尔福中)我愿意 Panel1.ManualFloat(Rect(500,500,600,600)); 面板不是 float 在指定的矩形位置,而是 float 在某种 Windows 默认位
我是一名优秀的程序员,十分优秀!