在我的表单中,有两个标签,第一个标签(
Label1
)设置为AutoSize=true
,它的Caption
可能会不时改变。第二个标签 (Label2
) 与 Label1
之间的边距应为 20px,即使 Label1
的大小已更改。整个表单应与 Label2
右侧保持 50px 的边距。
我可以用代码实现这个:
label2.Left := label1.Left + label1.Width + 20;
Width := label2.Left + label2.Width + 50;
但是有没有办法不用代码实现呢?
严格来说,根本没有任何代码,不。好吧,无论如何,不在你的例子中。
AlignWithMargins
和 Margins
属性来控制控件之间的间距。但是,只有当控件的 Align
属性设置为 alNone
以外的值时,此操作才会生效,并且在您的示例中唯一有意义的值是 alCustom
,在这种情况下,您必须将代码移至表单的 OnAlignInsertBefore
和 OnAlignPosition
事件,例如:
function TForm1.FormAlignInsertBefore(Sender: TWinControl; C1,
C2: TControl): Boolean;
begin
Result := (C1 = Label1) and (C2 = Label2);
end;
procedure TForm1.FormAlignPosition(Sender: TWinControl; Control: TControl;
var NewLeft, NewTop, NewWidth, NewHeight: Integer; var AlignRect: TRect;
AlignInfo: TAlignInfo);
begin
if Control = Label1 then begin
NewLeft := Label2.Left - 20 - NewWidth;
NewTop := Label2.Top;
end
else if Control = Label2 then begin
NewLeft := AlignRect.Right - 50 - NewWidth;
NewTop := Label1.Top;
end;
end;
现在,您可以自由地将
Label1.Caption
设置为您想要的任何内容,甚至可以调整表单的大小,两个标签也会相应地重新定位。