如何让一个VCL控件相对于另一个控件有固定的边距?

问题描述 投票:0回答:1

在我的表单中,有两个标签,第一个标签(

Label1
)设置为
AutoSize=true
,它的
Caption
可能会不时改变。第二个标签 (
Label2
) 与
Label1
之间的边距应为 20px,即使
Label1
的大小已更改。整个表单应与
Label2
右侧保持 50px 的边距。

image

我可以用代码实现这个:

label2.Left := label1.Left + label1.Width + 20;
Width := label2.Left + label2.Width + 50;

但是有没有办法不用代码实现呢?

delphi vcl
1个回答
0
投票

严格来说,根本没有任何代码,不。好吧,无论如何,不在你的例子中。

VCL 控件确实具有

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
设置为您想要的任何内容,甚至可以调整表单的大小,两个标签也会相应地重新定位。

© www.soinside.com 2019 - 2024. All rights reserved.