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;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Delphi] TStringBuilder그리고 꼭 사용해야만 할까? 그림처럼 Heap 영역에 "Hello" 공간을 생성하고 포인팅을 한다. "Hello World" 공간을 새로 생성한 후 포인팅을 하게 된다. 결국 "Hello" 라는 String 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.