坐标的先对转化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。


你可能感兴趣的:(坐标的先对转化clienttoscreen与screentosclient)