zoukankan      html  css  js  c++  java
  • 坐标的相对转换ClientToScreen与ScreenToClient

    假如一个有一个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。

  • 相关阅读:
    第一阶段总结
    第二次项目总结(移动端)
    iOS 配置smart svn8.6.6
    iOS Xcode6.4添加pch文件
    iOS 上传应用到APPStore 详细版
    真机测试
    ios 引导页
    iOS 画图工具的截图
    iOS UIViewController
    iOS 把图片存到相册中
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/8031126.html
Copyright © 2011-2022 走看看