在我们的应用程序中打开标准VCL表单时,会略微调整或调整几个控件的大小。例如左边几个像素或几个像素。保存表单显然会提交这些更改。任何人都知道是什么导致这种情况以及如何阻止它?
我们的应用程序是在Delphi 7中开发的,我认为这个问题已经开始,因为我们最近将它移到了XE7。对各种形式进行了各种代码更改后,我们开始注意到控件已经移动/调整了一些,并认为它们是错误的。但是今天我注意到它在表单打开时发生了。该表格之前保存在XE7中(它不仅仅是D7表格的第一次打开)。
控件似乎主要从高度,宽度或左侧属性中丢失几个像素。我没有看到任何这些值增加,只是减少。不是表格上的所有控件,只是少数。问题不仅限于单一形式。 Form.Scaled属性为false。
有什么东西被四舍五入/重新计算?有2个开发人员在使用该应用程序 - 可能是因为开发不同的分辨率或其他问题而引起的问题?
非常感谢任何想法=)
EDIT!查看所应用更改的差异,我认为所有调整后的控件都可以使用非默认锚点设置。例如向左移动2个像素的按钮被锚定[akTop,akRight]。它位于一个固定的面板上[akLeft,akTop]。另一个从宽度和高度丢失2个像素的控件被锚定[akLeft,akTop,akRight,akBottom]。我刚刚恢复了更改,通过编辑dfm更改了锚定并再次打开了表单:之前移动的控件没有移动。我确定它与锚定有关。
EDIT2!容易重复!它与控件的锚点和它的父控件(TPanel)的BorderStyle有关。添加带有TPanel的表单并在面板中添加TLabel。将TLabel设置为锚[akTop,akRight]。将TPanel设置为没有斜角,CTRL3d = False,BorderStyle = bsSingle和BorderWidth = 1。注意TLabel的Left属性。保存表单。再打开它。看看TLabel的Left属性。它已经移动了2个像素。继续打开,保存并关闭表单,并观看标签从右向左移动。 Here's a pic of my example form