Foxtable(狐表)用户栏目专家坐堂 → [求助]关于窗口弹出位置


  共有2833人关注过本帖树形打印复制链接

主题:[求助]关于窗口弹出位置

帅哥哟,离线,有人找我吗?
huangfanzi
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1106 积分:8977 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助]关于窗口弹出位置  发帖心情 Post By:2018/4/10 19:11:00 [只看该作者]

项目中窗口AfterLoad有以下代码:
Dim p As point
With CurrentTable.Grid
    p = new point(.Cols(.Col).Left,.Rows(.Row).Bottom)
    p = .PointToScreen(p)
End With
e.Form.BaseForm.Location = p
此代码的作用是当双击一条记录中例如“客户”单元格时弹出一个窗口,让用户选择客户,这个窗口会出现在当前双击单格位置的下方,现在有个问题,如果当前操作的记录位于整个屏幕的最下方时,这个弹出的窗口就会显示到屏幕的最下方的可视范围外了,这个窗口又是一个模式窗口,造成用户以为系统死机了,因为不能再操作了
假定窗口的高度是400,如何写代码,可以让代码实现如果当前双击单元格的位置处理屏幕最下方400范围内,则窗口的显示位置的Y坐标就自动调整到 屏幕高度-窗口高度
谢谢老师!

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111402 积分:567080 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/4/10 20:25:00 [只看该作者]

试试
Dim p As point
With CurrentTable.Grid
    p = new point(.Cols(.Col).Left,.Rows(.Row).Bottom)
    p = .PointToScreen(p)
End With
If p.y + e.Form.BaseForm.Height > ScreenHeight Then
    p.y = ScreenHeight  - e.Form.BaseForm.Height - 20
End If
e.Form.BaseForm.Location = p

 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1106 积分:8977 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2018/4/10 21:01:00 [只看该作者]

可以了,稍微调整了下:
Dim p As point
With CurrentTable.Grid
    p = new point(.Cols(.Col).Left,.Rows(.Row).Bottom)
    p = .PointToScreen(p)
End With
If p.y + e.Form.BaseForm.Height + 40 > ScreenHeight Then
    p.y = ScreenHeight  - e.Form.BaseForm.Height - 40
End If
e.Form.BaseForm.Location = p

 回到顶部