(Delphi bug)控件不会记住它们在表单上的位置

时间:2013-06-21 13:46:25

标签: delphi delphi-xe

我有一个(Delphi bug?)几个月让我烦恼:在我的一个应用程序中,我在TPanel上有一些控件(tedit,tbutton等)。每次我关闭项目并重新打开它时,我发现控件移动了几个像素。在20-30次关闭后,控件几乎不在面板中,所以我必须将它们拖回来。有人遇到过这样的问题吗?如何解决?

我有Delphi XE。


更新:
实际上我在我的两个项目中遇到过这个问题。两者都涉及对TPanel的控制 如果我编译项目的控件,在exe中,控件也处于错误的位置 我有一个与顶部(TPanel)对齐的TEdit,底部固定在底部。底部也会'忘记'它的正确位置并移到顶部。


更新:
错误确认。当用户更改面板的“斜角”属性时出现!

3 个答案:

答案 0 :(得分:2)

此问题于2012年6月在Delphi XE2的Quality Central #106320中报告 它的状态仍然是“需要反馈”,没有示例项目,但它看起来好像与后代表单有关。

我建议您一旦确定了组件所在的确切位置,就可以在FormCreate中调整它们的位置。
然后,在设计模式中,您可以快速“大致”纠正位置,因为他们知道它们会在运行时出现。

Robs的建议听起来也值得一试。

BTW如果你设法制作一个示例项目,那么其他人可以确定它是否在以后的版本中得到修复。

答案 1 :(得分:1)

显然some conflict between anchors and position,可能涉及表单继承。我希望它与应用各种定位约束的顺序有关,以及何时更新父控件的边框大小或边距。此外,对齐顶部和锚定底部听起来像一个问题的配方。相反,请考虑清除对齐设置并固定顶部和侧面;它应该给出相同的效果。或者,将间距控件(例如,TShape)对齐到面板的底部,然后将编辑控件与客户区对齐,这应该与锚定到底部的效果相同。

尽管如此,这应该很容易解决。在表单的OnCreate事件处理程序中,通过调用SetBounds将组件移动到正确的位置。要在开发周期中停止进一步移动,您应该清除锚点,然后在运行时重新设置它们。

答案 2 :(得分:1)

D7也发生在我身上。我发现每当我打开设计时间表并更改桌面的分辨率或最小化IDE时,底部对齐的控件都会向下推,有时会超出表单。

为了防止我现在使用与HTML页面设计相同的方式。

我的每个表单都有一个用tPanels划分的布局(比如html中使用的标签或标签)tPanels根据他们的设计对齐。

可能不是同一个问题,但我认为我找到的解决方案也可能适合你。

相关问题