在我的表单中,有两个标签,第一个标签(label1)设置为自动调整大小,并且其标题可能会不时更改。即使 label1 大小发生更改,第二个标签 (label2) 也应与第一个标签有 20px 的边距。整个表单应与标签右侧保持 50 px 的边距2。
我可以用代码来实现:
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;