如何正确获取鼠标点击的列

xiyahui 2002-04-29 12:07:17
我要实现点击列标题从而实现该列数据的排序,同时修改列标题的凹凸效果。现在自己定义了两个用户事件,lbuttondown和lbuttonup,用来相应鼠标左键的按下和放开,同时对数据进行排序。在lbuttondown里要如何判断用户所点击的列对象是什么呢??在click事件里可以通过传递参数dwo,但lbuttondown没有。一开始我判断鼠标点击的x坐标,来判断点击的列,如果没有水平滚动条没有问题,但是如果有水平滚动条的话就不可以了,因为x坐标返回的是相对于数据窗口左上角的坐标。请问有什么好的方法可以在lbuttondown里正确的返回所点击的列对象。
...全文
69 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mars884813 2002-04-29
  • 打赏
  • 举报
回复
学习
fuli_90121 2002-04-29
  • 打赏
  • 举报
回复
可使用controlname.GetObjectAtPointer()获取
xiyahui 2002-04-29
  • 打赏
  • 举报
回复
呵呵谢谢大家的帮助。我的email:xiyahui@263.net
在click事件里写程序无法完成当鼠标按下的时候改为凹而鼠标松开改为凸。
在lbuttondown里如果用getclickcolumn不能返回当前点击的列,因为lbuttondown事件发生的时候列的焦点还没有改变,所以返回的是上一列的名称。所以现在我需要在lbuttondown里能够正确返回点击的列。大家有什么好的例子吗?
xingsha 2002-04-29
  • 打赏
  • 举报
回复
学习
lmby 2002-04-29
  • 打赏
  • 举报
回复
定义一个实例变量il_sort = 0

在click事件中写代码:
string ls_sort

if row = 0 then
if right( dwo.name, 2 ) <> '_t' then return

ls_sort = left( dwo.name, len( string( dwo.name ) ) - 2 )

if il_sort = 1 then
ls_sort += ' A'
il_sort = 0
object.dwo_name.border = '3d raised'
else
ls_sort += ' D'
il_sort = 1
object.dwo_name.border = '3d lowered'
end if

setsort( ls_sort )
sort()
end if

PS:设置凹凸的值我不记得了,你自己试试吧~
zhangnanonnet 2002-04-29
  • 打赏
  • 举报
回复
GetClickedColumn,
你想实现的东西我有现成的,给我你的MAIL,给你一份
wu_07 2002-04-29
  • 打赏
  • 举报
回复
由dw_1.GetClickedColumn ( )可以得到列号
xiongxiao 2002-04-29
  • 打赏
  • 举报
回复
你为什么不直接在CLICKED事件里完成这功能.
banalman 2002-04-29
  • 打赏
  • 举报
回复
//messagebox("",GetCurrentDirectory ( ))
//===================局部变量说明====================
string ls_AddPict, ls_CurObj, ls_Picture, ls_CurCol
integer li_PictPos,li_width,li_lenth //#####

string ls_path
if not isvalid(gnv_app) then return - 1
ls_path=gnv_app.Currentdirectory+"\"
ls_CurObj = String(dwo.Name)
//============判定点击的位置为列的标题===================
If Row = 0 AND This.Describe(ls_CurObj + ".Text") <> "!" AND This.Describe(ls_CurObj + ".Band") = "header" Then // Valid header object?
//==============获取列名===================
ls_CurCol = Left(ls_CurObj,Len(ls_CurObj) - 2)
//==============判定是否为第2次点击===================
If is_OrderCol <> ls_CurCol Then // 两次点击对象不同
//===========删除标志位图并且恢复前一列状态=================
This.Modify("DESTROY p_" + is_OrderCol)
This.Modify(is_OrderCol+"_t"+".text='"+is_coltext+"'") //#####
//==============获取新列名及其文本===================
is_OrderCol = Left(ls_CurObj,Len(ls_CurObj) - 2)
is_coltext= This.describe(ls_CurObj +".text")
//messagebox("",is_coltext) //#####存储文本2001 10 13 张
//==============设置位图的具体参数并建立===================
ls_Picture=ls_path+ "ORDERUP.BMP"
is_SortType = "A" // Ascending sort
li_PictPos = Integer(This.Describe(ls_CurObj + ".X"))+ (Integer(This.Describe(ls_CurObj + ".Width")) - 60)//位图的x坐标
ls_AddPict ='create bitmap(band=foreground filename="' + ls_Picture + '" ' + &
' x="' + String(li_PictPos) + "~tInteger(describe('" + is_OrderCol + &
".X')) + (Integer(describe('" + is_OrderCol + ".Width'))" + ' - 50)" y="24" ' + &
' height="33" width="50" border="0" name=p_' + is_OrderCol + ' visible="1")'
This.Modify(ls_AddPict)
//==============设置列的文本显示以防止位图和文本的重叠===================
li_width=Integer(describe( ls_CurObj + ".Width")) - 50 //#####
if li_width < 32*len(is_coltext) then //#####
li_lenth= li_width/32
This.Modify(is_OrderCol+"_t"+".text='"+Left(is_coltext,li_lenth - 1)+"..."+"'") //添加延续字符
end if
This.SetSort(is_OrderCol + " " + is_SortType)
This.Sort()
//==============前后列名相同变换图标=======================
Else
If is_SortType = "A" Then
ls_Picture =ls_path+ "ORDERDW.BMP"
is_SortType = "D"
Else
ls_Picture = ls_path+"ORDERUP.BMP"
is_SortType = "A"
End If
This.Modify('p_' + is_OrderCol + '.filename = "' + ls_Picture + '"')
This.SetSort(is_OrderCol + " " + is_SortType)
This.Sort()
End If
End If
///////
if right(dwo.name,2)='_t' then return 1

xiyahui 2002-04-29
  • 打赏
  • 举报
回复
555,问题是要求这么做
pbsql 2002-04-29
  • 打赏
  • 举报
回复
按视觉效果来说,我觉得还是根据那一列排序哪一列就凹下去比较好,因为比较直观,没有必要松开后又凸出来
xiyahui 2002-04-29
  • 打赏
  • 举报
回复
我希望的是跟资源管理器一样,鼠标左键按下的时候该列凹下去,松开的时候恢复凸的形状,所以只能在lbuttondown和lbuttonup里写程序了。
pbsql 2002-04-29
  • 打赏
  • 举报
回复
要改变凹凸效果你得自己写程序,即点击哪一列就把哪一列的标题头的BORDER属性改成lowered(5),其他列则为raised(6)
xiyahui 2002-04-29
  • 打赏
  • 举报
回复
谢谢pbsql的例子,我已经收到,但是在单击的时候还是不能改变凸凹的效果。
pbsql 2002-04-29
  • 打赏
  • 举报
回复
您的信件已经成功发送到 xiyahui@263.net

给你发了个例子,注意查收
powerbu 2002-04-29
  • 打赏
  • 举报
回复
我这有个点击列头排序的例程!

你的EMAIL?

至于列标题的凹凸效果,可以通过修改DW中TXT对象的BORDER属性实现。

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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