简单的问题.我有一个包含3个组件的面板.所有这些都有Align:= alRight.但问题是在运行时它们的顺序与设计时间不同.
我可以改为使用alCustom强制订购右边界吗?我用的是D2007.
是的,您可以进行任何类型的自定义对齐.只需使用控件的OnAlignInsertBefore()和OnAlignPosition()事件.(这些存在于Delphi 2007中,但未发布,因此它们不会出现在Object Inspector的Events选项卡中;您仍然可以在代码中分配它们.我已经在下面显示了原型;它们已在下面的帮助文件中记录TAlignInsertBeforeEvent和TAlignPositionEvent;您还可以看到CustomAlignInsertBefore和OnAlignInsertBefore.)
TAlignInsertBeforeEvent = function(Sender: TWinControl;
C1, C2: TControl): Boolean of object;
TAlignPositionEvent = procedure(Sender: TWinControl; Control: TControl;
var NewLeft, NewTop, NewWidth, NewHeight: Integer;
var AlignRect: TRect; AlignInfo: TAlignInfo) of object;
Run Code Online (Sandbox Code Playgroud)
该文档包含两种方法的参数的非常好的描述.
在Delphi 2010中,这些事件将发布并显示在Object Inspector的Events选项卡中.
我从来没有见过你遇到的问题,但是......你是否尝试将它们全部设置为alNone,将它们从右边缘移开,然后按照你想要的顺序重新设置Align:= alRight出现?
您没有透露太多手头的问题,但我会看一下流程面板。
当将控件放在流程面板上时,会“自动”出现一个新的顺序属性。您可以设置控件的流动方式,如果您希望控件之间有空间,则可以设置每个控件的边距。
需要澄清一点:新的“order-property”实际上称为“ControlIndex”,并将出现在对象检查器的底部。