如何知道控件在屏幕上的位置

dell_note 2013-08-20 09:42:33
一个表单在运行时,想知道表单上的某个控件在屏幕上的位置,用什么方法?
...全文
315 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dell_note 2013-08-25
  • 打赏
  • 举报
回复
谢谢各位! 采用各位给提供的建议已解决这个问题了。
lygcw9602 2013-08-23
  • 打赏
  • 举报
回复
不一定非要在TEXTBOX控件的下方,只要在屏幕中,我认为也可以。 在表单中,放置一个控件,比如LISTBOX控件,当用鼠标选中LISTBOX控件中的内容时,自动关闭表单即可。
十豆三 2013-08-23
  • 打赏
  • 举报
回复
例: form1.scx,将 ShowWindow 属性设为2,表单中有一个 Text2,你想让弹出的表单窗口正好在此 Text2 下方 你的弹出表单:form2.scx,将 ShowWindow 属性设为1。 运行 form1.scx 时 Public oForm Do Form form1.scx Name oForm form2.scx 的 Init 事件加代码: If Type('oForm')='O' This.Move(oForm.Text2.Left,oForm.Text2.Top+oForm.Text2.Height) Endif 在 form1.scx 中运行 form2.scx 时,也就是弹出你的窗口时:Do Form form2.scx
dell_note 2013-08-22
  • 打赏
  • 举报
回复
引用 12 楼 lygcw9602 的回复:
不知楼主想用什么控件做为弹出窗口,如果是这样的问题,应该容易解决。
就用表单(Form),做为弹出窗口。
dell_note 2013-08-21
  • 打赏
  • 举报
回复
先谢谢各位 在表单上有一个TEXTBOX控件,输入内容后按回车,让弹出的窗口紧挨着这个TEXTBOX下方。 用CONTAINER控件试了,如果CONTAINER后面有其它TEXTBOX时,而又没有将CONTAINER隐藏时,会不美观。 用表单集时,也有一些细节上的不足。 所以想用弹出窗口的方法,想让这个窗口紧挨着这个TEXTBOX下方。
lygcw9602 2013-08-21
  • 打赏
  • 举报
回复
不知楼主想用什么控件做为弹出窗口,如果是这样的问题,应该容易解决。
都市夜猫 2013-08-20
  • 打赏
  • 举报
回复
那就再加一个 win32api 函数 ClientToScreen,将 client 坐标转换成 screen 坐标。
lygcw9602 2013-08-20
  • 打赏
  • 举报
回复
OBJTOCLIENT( ) 函数 返回一个控件或对象相对于表单的位置或尺寸。
都市夜猫 2013-08-20
  • 打赏
  • 举报
回复
用 objtoclient 函数
十豆三 2013-08-20
  • 打赏
  • 举报
回复
楼主是想要在屏幕上的位置,而不是表单上的位置。
lygcw9602 2013-08-20
  • 打赏
  • 举报
回复
表单ACTIVATE 事件 Create table Settings (Name c(24), Top I, Left I, Height I, Width I) Insert into Settings from name thisform.cmdexit Insert into Settings from name thisform.text1 Insert into Settings from name thisform.text2 Insert into Settings from name thisform.text3 browse 说明:cmdexit 为命令按钮 text1、text2、text3 分别为表单上的三个文本框
都市夜猫 2013-08-20
  • 打赏
  • 举报
回复
不至于吧,上面还只是列举了最基本的情况,更多的情况是 1. 表单可以有不同种类的边框,可调整大小/固定/单线/没有边框 2. 标题栏也可以有不同高度,至少 vfp9 中就可以设置 HalfHeightCaption 来改变 3. 更变态的,vfp9 中窗口是可以停靠的,设置 Dockable 为 1 再看看,当你把这个窗口停靠到右边或下面时,看看这时窗口的 Left 和 Top 是多少? 如果用加加减减来计算上面的各种组合,估计把人搞疯了也算不出个正确值 所以只能分两步来算出正确结果。首先用 ObjToClient 得出控件相对窗口客户区原点的坐标,再用 ClientToScreen 算出表单客户区相对桌面原点的坐标,最后两值分别相加,得出控件相对桌面原点的坐标
lygcw9602 2013-08-20
  • 打赏
  • 举报
回复
都市夜猫 2013-08-20
  • 打赏
  • 举报
回复
另外,要用 api 来转换的目的是因为仅有 sysmetric(9) 是不够的,还可能有边框 sysmetric(3 or 4)
都市夜猫 2013-08-20
  • 打赏
  • 举报
回复
引用
表单的TOP+控件的TOP+SYSMETRIC(9) 应该就是在屏幕上的TOP吧 LEFT 同理
如果要测量位置的控件放在嵌套的容器或页框中,就未必了
lygcw9602 2013-08-20
  • 打赏
  • 举报
回复
表单的TOP+控件的TOP+SYSMETRIC(9) 应该就是在屏幕上的TOP吧 LEFT 同理

2,748

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧