座標的先對轉化clienttoscreen與screentosclient

假如一個有一個TEdit的實例edt_Position,edt_Position所在容器有好幾層,所在的窗體爲frmMain。現要彈出一個FORM,FORM的容器爲frmMain,彈出的位置在edt_Position的下面,並且左邊對齊,如何做呢?

首先將edt_Position的座標轉換爲屏蔽座標,再將此座標加上偏移量再轉換爲在frmMain的座標即可。

var
LScreenPoint, LClientPoint :TPoint;
begin
  LScreenPoint.X := 0;
   LScreenPoint.Y := 0;
   Windows.ClientToScreen(edt_Position.Handle, LScreenPoint);
   LScreenPoint.Y := LScreenPoint.Y + TEdit(Sender).Height;
   LClientPoint :=frmMain.ScreenToClient(LScreenPoint);
   FORM.Left := LClientPoint.X ;
   FORM.Top := LClientPoint.Y;

  FORM,Show();
end;


注:函數 ClientToScreen,控件的方法與API函數同名使用,造成在調用時delphi優先調用控件的ClientToScreen方法。如果只想調用API函數,那麼可以用 windows.ClientToScreen。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章