以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关于窗口弹出位置  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=117330)

--  作者:huangfanzi
--  发布时间: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坐标就自动调整到 屏幕高度-窗口高度
谢谢老师!

--  作者:有点蓝
--  发布时间: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
--  发布时间: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