使一个控件相对于另一个控件有固定的边距

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

在我的表单中,有两个标签,第一个标签(label1)设置为自动调整大小,并且其标题可能会不时更改。即使 label1 大小发生更改,第二个标签 (label2) 也应与第一个标签有 20px 的边距。整个表单应与标签右侧保持 50 px 的边距2。

enter image description here

我可以用代码来实现:

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

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

controls delphi-xe3
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;
© www.soinside.com 2019 - 2024. All rights reserved.