datawindow 方向键问题-巨难!!!

qdwangzh 2002-04-30 04:53:53
各位大虾:
如何在feeform类型的窗口中使用方向键实现列之间的转换?
如果datawindow中有dropdowndatawindow,上下箭头不在dropdowndatawindow中变化,而直接在datawindow的列之间移动.
...全文
75 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
lypdk 2002-05-11
  • 打赏
  • 举报
回复
发不了消息了 ! 接在这吧。
*/
DataWindowChild ldw_my
String ls_object,ls_temp
Long ll_dddw,ll_event//ll_dddw指明操作的子数据窗口,ll_event指明触发的事件
ll_dddw = Message.LongParm//由LongParm获得操作的子数据窗口
ll_event = Message.WordParm//由WordParm获得触发的事件ID
GetChild( "c_uname", ldw_my )//获得指定列的子数据窗口

if intlow(ll_dddw) = handle(ldw_my) then
if IntHigh(ll_event) = 1281 then//1281为鼠标单击事件ID
ls_object = ldw_my.GetObjectAtPointer()
ls_temp = left(trim(ls_object),3)
Choose case ls_temp
case "b_1" //如果是增按钮
messagebox("提示","添加数据")
case "b_2"
messagebox("提示:","编辑数据")
Case "b_3"
messagebox("提示:","哈哈~~")
End choose
End if
End if

不过你给 50 分太少了 , 因我水平太差 ,有很多问题要问呀。所以需要很多可用分 。
这样还不如帮我答题吧 ,进去后随便说说 。 对错无所谓 ! 谢 !

http://www.csdn.net/expert/topic/704/704324.xml?temp=.1091272
http://www.csdn.net/expert/topic/704/704325.xml?temp=.9520227
http://www.csdn.net/expert/topic/704/704322.xml?temp=.5562708
http://www.csdn.net/expert/topic/704/704321.xml?temp=.5850183

qdwangzh 2002-05-11
  • 打赏
  • 举报
回复
谢谢各位。不过只有lypdk(羚羊) 提到了用pbm_command事件。就目前我的了解,只有这个事件才能捕获到dddw和ddlb中的按键。所以,分数只好给人家了。
vcpb 2002-05-10
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/219/219648.xml?temp=.904751

一、enter实现tab:
1、在DW中:
在数据窗口声明用户事件UE_PROCESSENTER,事件ID:pbm_dwnprocessenter。
脚本例子:
if this.accepttext()=1 then
send(handle(this),256,9,long(0,0))
end if
return 1
2、控件中:
在数据窗口声明用户事件UE_enter,事件ID:pbm_keydown。
脚本例子:
if keydown(keyenter!) then
cb_1.setfocus()
end if
3、窗口中:
窗口的key事件中:
脚本例子:
声明:SUBROUTINE keybd_event(int bVk,int bScan,int dwFlags,int dwExtraInfo) library "user32.dll"
If key = KeyEnter! Or Key = KeyDownArrow! Then
keybd_event ( 9, 0, 0 , 0 ) // 按下tab
keybd_event ( 9, 0, 2, 0 ) // 释放tab
Return 1
End If

二、Arrow键实现tab和shift_tab的功能:
1、在DW中:
在数据窗口声明用户事件UE_arror,事件ID:pbm_dwnkey。
脚本例子:
声明:SUBROUTINE keybd_event(int bVk,int bScan,int dwFlags,int dwExtraInfo) library "user32.dll"
Choose Case key
Case Keyrightarrow! //right key 取代 tab key
if this.position()=len(gettext()) + 1 then
keybd_event(9,0,0,0)
keybd_event(9,0,2,0)
end if
Case Keyleftarrow! //left key 取代 shift_tab
if this.position()=1 then
keybd_event(16,0,0,0)
keybd_event(9,0,0,0)
keybd_event(16,0,2,0)
keybd_event(9,0,2,0)
end if
End Choose
lypdk 2002-05-10
  • 打赏
  • 举报
回复
如此简单 , 也叫巨难 ? 是想“哗众取宠”吧 !以上方法你先试试 , 都不行的话 。 用 CSDN 的短消息找我 !
qdwangzh 2002-05-10
  • 打赏
  • 举报
回复
oceanaut,真的吗?可是当焦点落在dddw上时,pbm_dwnkey捕捉不到按键啊!
海洋‘s 2002-05-10
  • 打赏
  • 举报
回复
vcpb(yeah) 的方法可行,因为我以前也使用这样的方法解决了和你同样的问题
qdwangzh 2002-05-10
  • 打赏
  • 举报
回复
我已经说过多次了,你们的这些办法对dddw列无效!其他的早已不是问题。另外,楼上的rightarrow,对于日期类型(带format)也不合适.这些小弟早已解决。只是列为dddw和dropdownlist时,不行!急!!!!!!!!!!!
qdwangzh 2002-05-08
  • 打赏
  • 举报
回复
哥哥,我现在的问题是如果在dddw上捕获不到按键!!!
myclife 2002-05-08
  • 打赏
  • 举报
回复
好象是用了PFC
lionkings 2002-05-08
  • 打赏
  • 举报
回复
樓上guf.keybd_event()是什么函數﹐代碼編譯不通過.
kaikaihe 2002-05-08
  • 打赏
  • 举报
回复
给你一个别人的帖子:

PB中按钮控制
数据窗口中自定义用户事件,ID为pbm_dwnkey。
脚本为:

Choose Case Key
Case Keyenter!
send(handle(this),256,9,long(0))
Return -1
Case Keyrightarrow!
send(handle(this),256,9,long(0))
Case Keyleftarrow!
guf.Keybd_event(16,0,0,0)
guf.Keybd_event(9,0,0,0)
guf.Keybd_event(16,0,2,0)
guf.Keybd_event(9,0,2,0)
Case Keydownarrow!
guf.keybd_event(9,0,0,0)
guf.keybd_event(9,0,2,0)
Return -1
Case Keyuparrow!
guf.keybd_event(16,0,0,0)
guf.keybd_event(9,0,0,0)
guf.keybd_event(16,0,2,0)
guf.keybd_event(9,0,2,0)
Return -1
Case Keypagedown!
Return -1
Case Keypageup!
Return -1
End Choose
taomegry 2002-05-08
  • 打赏
  • 举报
回复
以前有这方面的贴子。找找
spark1 2002-05-08
  • 打赏
  • 举报
回复
keybd_event()是API函数
定义如下:
subroutine keybd_event(uint bVk,uint bScan,long dwFlags,long dwExtraInfo ) library 'user32.dll'
水煮蛙 2002-05-07
  • 打赏
  • 举报
回复
跳到下一列后,用setfocus指向当前列应该可以实现吧!
qdwangzh 2002-05-07
  • 打赏
  • 举报
回复
如果dw有dddw列,而焦点正好在该列上,pbm_keydown将捕获不到键值。不知您老试过没有?
xiaoxuw 2002-05-07
  • 打赏
  • 举报
回复
pbm_keydown,给合setfoucs函数!一定可以!
qdwangzh 2002-05-06
  • 打赏
  • 举报
回复
谢谢各位的答复
但现在客户的要求就是用下箭头键就可以跳出dddw,而且在freeform中,还应该跳到下一行的相应列。我所说得下一行指界面上的呈现,非下一纪录。
我现在的问题就是dddw的处理。
killerdanny 2002-05-01
  • 打赏
  • 举报
回复
你去精华区看看!
chinalht 2002-05-01
  • 打赏
  • 举报
回复
如果非要实现这种功能,可以考虑使用API写dll,动态替换datawindow的事件处理函数,用自己的替代,在其中先判断是否是上下左右键,如果是,就发送给数据窗口一个自定义事件,参数表明是上下左右,然后在数据窗口的other事件中进行判断,如果是自定义事件,则根据参数来修改当前列和行。
仅供参考,未经验证。
smallarms 2002-04-30
  • 打赏
  • 举报
回复
不好意思搞定了,可以合并!:)
不过,在自定义enter事件时,我没用send(..........)
而是用getcolumn()和setfocus()一个一个跳转的,是不是太笨了!:)
加载更多回复(7)

611

社区成员

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

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