Delphi 컨트롤과 창 사이의 위치 변환 문제

두 창 사이의 상대적인 위치를 설정하고 두 가지 방법으로 나눈다.
 
첫 번째: 간단한 방법으로 창의 속성 Position을 설정합니다. 여러 가지 옵션이 있습니다.
poDesigned: 창이 실행될 때 표시되는 위치와 크기가 디자인과 같습니다.
poDefault: 실행할 때 창의 크기와 위치를 자동으로 설정합니다.
PodefaultPosOnly: 실행할 때 창의 크기와 위치를 자동으로 설정합니다. 창의 크기는 창의 Height와 Width 속성 파라미터가 결정됩니다.
PoDefaultSizeOnly: 실행할 때 창의 크기와 위치를 자동으로 설정합니다. 창의 크기는 창의 Left와 Top 속성 파라미터가 결정됩니다.
poScreenCenter: 창 크기는 창의 Height와 Width 속성 파라미터가 정해져 있지만 창은 화면 중앙에 있습니다.
poDesktopCenter: 창 크기는 창의 Height와 Width 속성 파라미터가 정해져 있지만, 창은 데스크톱 중앙에 있습니다.
PoMainFormCenter: 창 크기는 Height와 Width 속성 파라미터가 정해져 있지만, 창은 메인 창의 중앙에 있습니다.
poOwnerFormCenter 창 크기는 창의 Height와 Width 속성 파라미터가 정해져 있지만 창은 부모 창의 중앙에 있습니다.
참고: Self를 설정하든Top,Self.Left 값이 어떻게 됩니까? 마지막 창은 자동으로 Position에 따라 창의 위치를 조정합니다
(form1.Position:=poScreenCenter;),그래서 두 번째 방법이 필요해.
여기서 poMainFormCenter 또는 poOwnerFormCenter로 설정할 수 있습니다.
 
두 번째: 코드를 통해 창의 위치를 설정합니다.
창 컨트롤의 좌표는 창에 대한 것이고, 창의 위치는 화면에 대한 것입니다.첫 번째 읽기
창의 컨트롤 위치를 두 번째 창에 사용하면 두 번째 창의 위치가 정확하지 않습니다.따라서 함수를 변환해야 합니다.
                 Function ClientToScreen(const Point:TPoint):TPoint;//창 지표를 화면 지표로 변환합니다.
                 Function ScreenToClient(const Point:TPoint):TPoint;//화면 지표를 창 지표로 변환합니다.
 
Uses Types;

 

procedure TMainForm.btn1Click(Sender: TObject);

var

  FindCaseForm : TFindCaseForm;

  Point : TPoint;

begin

  FindCaseForm := TFindCaseForm.Create(nil);

  Point.X :=  btn1.Left + btn1.width ; 

  Point.Y := btn1.Top + btn1.height;

  Point := MainForm.ClientToScreen(point);

  FindCaseForm.Left :=  Point.X;

  FindCaseForm.Top :=  Point.Y;

  FindCaseForm.ShowModal;

  FreeAndNil(FindCaseForm);

end;

좋은 웹페이지 즐겨찾기