얼마 전에 나는 Align
또는 Anchors
설정 (예 : here)으로 컨트롤의 동작을 고민했습니다. 이번에는 버튼의 최상위 위치가 원래의 10에서 -50 정도로 이동 한 것을 알기 전까지 한 유닛으로 작업 했으므로 원인을 찾으려고 노력했습니다.베벨을 사용하는 패널에서 컨트롤의 위치
BevelKind = bkFlat
으로 패널을 사용하고 Anchors = [akRight, akBottom]
으로 컨트롤을 사용하면 모든 컨트롤의 위치가 설정에 따라 줄어 듭니다. 다음 예제에서와 같이 Left
은 Anchors = [akRight]
및 Top
과 함께 Anchors = [akBottom]
으로 이동합니다. 항상 패널이 설정 한 경사의 너비 (이 경우 양방향으로 -4). 프로그램을 실행하거나 다음 장치를 다시 열면 위치는 (150, 10)
에서 (146, 6)
으로 이동하고 장치를 열고 저장 한 후에 무기한으로 계속됩니다.
그래서 단위를 열고 dfm
파일에 저장 한 후 모든 구성 요소의 위치 재 계산을 담당해야하는 이유를 알고 싶습니다.
PMain.pas
unit PMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Grids;
type
TUMain = class(TForm)
pnl1: TPanel;
btn1: TButton;
end;
var
UMain: TUMain;
implementation
{$R *.dfm}
end.
012,351,641 PMain.dfm
object UMain: TUMain
Left = 0
Top = 0
Caption = 'UMain'
ClientHeight = 50
ClientWidth = 250
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object pnl1: TPanel
Left = 0
Top = 0
Width = 250
Height = 50
Align = alClient
BevelKind = bkFlat
Caption = 'pnl1'
TabOrder = 0
DesignSize = (
246
46)
object btn1: TButton
Left = 150
Top = 10
Width = 75
Height = 25
Anchors = [akRight, akBottom]
Caption = 'btn1'
TabOrder = 0
end
end
end
하나의 조언 : '정렬'을 사용하거나 '앵커'를 사용하십시오. 그러나 동시에 시도하지 마십시오. 'Align'은 무언가를 완전히 한쪽으로 치우 치고 싶거나 완전히 무언가를 다루고 싶다면 좋다. 앵커는 절대 가장자리에 있지 않더라도 상위 경계선을 따라 (하나 이상의 방향으로) 컨트롤의 테두리를 유지하거나 늘리는 것이 좋습니다. –
@ Rudy 나는 그것이 OP가하고있는 것이라고 생각하지 않는다. DFM에서,'TPanel'은'alClient'에 정렬되어있는 반면, 그 패널의'TButton'에는 앵커'[akRight, akBottom]'이 있습니다. 실제로, 나는 항상 이것을 수행하고 (정렬 된 패널에 앵커 된 버튼), OP가 묘사하는 것처럼 어떤 문제도 경험하지 못했습니다. –
@Jerry 위의 예제를'Bevels'와'BeeKind = bkFlat'로 시도해보아야합니다, 이것이 문제라고 생각합니다. – Triber