右键菜单的弹出位置

Changefish 2003-06-02 03:31:17
我要在一个dw control 中弹出右键菜单,PopMenu(posx,posy)中的posx跟posy怎么设置,dw control在一个子窗口上的tab上。试了很久都不行,帮一下忙。
如果直接调用win api来取得鼠标的位置,有该怎么样做,最好有实例,谢谢!!
...全文
141 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Changefish 2003-06-12
  • 打赏
  • 举报
回复
谢谢大家!
fibbery 2003-06-12
  • 打赏
  • 举报
回复
tuliplangel(酷儿)的pfc感觉不错,不如做个函数来用。
joss 2003-06-04
  • 打赏
  • 举报
回复
楼主要区别不同用法的最好方法是实践!王小石的两种方法楼主均可以测试一下,这样体会会比较清楚 !
百闻不如一见嘛
sdav 2003-06-04
  • 打赏
  • 举报
回复
直接使用窗口PointerX() 和PointerY() 函数,可能更简单
//
这样是可以,但是总是不准确,你需要根据具体情况让它加或者减几个数字;
zxjnew 2003-06-03
  • 打赏
  • 举报
回复
直接使用窗口PointerX() 和PointerY() 函数,可能更简单。
tulip2108 2003-06-02
  • 打赏
  • 举报
回复
我平时用的是PFC,位置不对是因为取的是上层的dragobject 的相对位置,以下代码是根据PFC代码改写的应该可以,你再试一下
window lw_parent
powerobject lpo_parent
lpo_parent = this.GetParent()
// Loop getting the parent of the object until it is of type window!
do while IsValid (lpo_parent)
if lpo_parent.TypeOf() <> window! then
lpo_parent = lpo_parent.GetParent()
else
exit
end if
loop

if IsNull(lpo_parent) or not IsValid (lpo_parent) then
lm_rbutton.m_rbutton.PopMenu(PointerX(),PointerY())
return
end if

lw_parent = lpo_parent
lm_rbutton.m_rbutton.PopMenu(lw_parent.PointerX() + 5 ,lw_parent.PointerY() + 10)
tulip2108 2003-06-02
  • 打赏
  • 举报
回复
if isvlid(this.GetParent()) then
lm_rbutton.m_rbutton.PopMenu(this.GetParent().x + PointerX(),this.GetParent().y + PointerY())
else
lm_rbutton.m_rbutton.PopMenu(PointerX(),PointerY())
end if
devil_heart 2003-06-02
  • 打赏
  • 举报
回复
powerobject lpo_parent
lpo_parent = this.GetParent()CHOOSE CASE lpo_parent.TypeOf()
CASE Window!
lw_parent = lpo_parent
lm_rbutton.m_rbutton.PopMenu(lw_parent.x + PointerX(),lw_parent.y + PointerY())
CASE UserObject!
luo_parent = lpo_parent
lm_rbutton.m_rbutton.PopMenu(luo_parent.x + PointerX() + 900,luo_parent.y + PointerY() + 300)
CASE Tab!
ltab_parent = lpo_parent
lm_rbutton.m_rbutton.PopMenu(ltab_parent.x + PointerX(),ltab_parent.y + PointerY())
case else
lm_rbutton.m_rbutton.PopMenu(PointerX(),PointerY())
END CHOOSE
waterstony 2003-06-02
  • 打赏
  • 举报
回复
this.x,this.y是指数据窗口控件在窗口中的起始位置,pointerx,pointery是指鼠标距离该数据窗口左上角的相对位置。我的右键弹出窗口用于打印导出,全都是用得这段代码,很管用。如果你的数据窗口是在tab控件上,还需要进行一点点转换。
waterstony 2003-06-02
  • 打赏
  • 举报
回复
用PopMenu (this.x + PointerX( ),this.Y + PointerY( ))
cnliutian 2003-06-02
  • 打赏
  • 举报
回复
UP
Changefish 2003-06-02
  • 打赏
  • 举报
回复
谢谢tuliplangel(酷儿),但弹出位置还是不好,而且maximized跟normal时,效果都不同。
我想问一下PointerX 跟 objectname.X 有什么区别吗?
tulip2108 2003-06-02
  • 打赏
  • 举报
回复
有点错误,改一下
dragobject ldo_object
ldo_object=this.GetParent()
if isvlid(ldo_object) then
lm_rbutton.m_rbutton.PopMenu(ldo_object.x + PointerX(),ldo_object.y + PointerY())
else
lm_rbutton.m_rbutton.PopMenu(PointerX(),PointerY())
end if
tulip2108 2003-06-02
  • 打赏
  • 举报
回复
有点错误,改一下
dragobject ldo_object
ldo_object=this.GetParent()
if isvlid(ldo_object) then
lm_rbutton.m_rbutton.PopMenu(ldo_object.x + PointerX(),ldo_objecty + PointerY())
else
lm_rbutton.m_rbutton.PopMenu(PointerX(),PointerY())
end if

Changefish 2003-06-02
  • 打赏
  • 举报
回复
to tuliplangel(酷儿) :PopMenu(this.GetParent().x + PointerX(),this.GetParent().y + PointerY()) 这里提示出错,incompatible property x for type powerobject,怎么回事呢 ?谢谢
Changefish 2003-06-02
  • 打赏
  • 举报
回复
to waterstony(王小石) :谢谢你又来捧场,我以前用的就是你那行代码(也是你贴出来的),好象不管用。
还有我想问一下PointerX 跟 objectname.X 有什么区别吗?谢谢

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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