CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  基础类

这样屏蔽掉DW里系统自带的回车键下移一行的功能?

楼主fallstone(天蓝)2002-05-09 08:41:31 在 PowerBuilder / 基础类 提问

客户需要在DW里按回车键就往下移一列,也就是用回车代替TAB的功能。  
  我用的是GRID的DW,先增加好4行或者5行。此时如果不写代码按回车则下移一行,写了用回车代替TAB的代码(send(handle(this),256,9,0))则既下移一行又右移一列  
   
  现在的问题是:怎样把下移一行的系统自带功能去掉??? 问题点数:160、回复次数:18Top

1 楼lmby(鹿门布衣)回复于 2002-05-09 08:57:06 得分 10

没明白。  
  return   1Top

2 楼kaikaihe(开开)回复于 2002-05-09 09:13:46 得分 10

send(handle(this),256,9,0)  
  return   1Top

3 楼kaisa_cheng888(风往北吹--飞翔的心)回复于 2002-05-09 09:23:04 得分 5

同意楼上Top

4 楼dfz_fan(迷惘ing)回复于 2002-05-09 09:36:52 得分 10

自定义一个event   id   为pbm_dwnprocessenter的事件  
  然后在该事件中写上   return   1  
   
  试试Top

5 楼supershb(phenix)回复于 2002-05-09 09:37:35 得分 5

case   KeyEnter!  
      Send(   Handle(m_dw),   256,     9,   keyflags   )  
  CASE   KeyTab!  
      m_dw.Post   Function   ScrollToRow(m_dw.GetRow())  
      if   KeyFlags=1   then  
          m_dw.Post   Function   SetFocus()  
      end   if  
   
  m_dw是数据窗口,   以上脚本放入KeyDown事件中,事件标志:pbm_dwnkey  
  Top

6 楼oceanaut(海阔天空)回复于 2002-05-09 10:17:25 得分 10

1.首先在数据窗口中定义一个用户自定义事件,ue_keydown,Event   ID:pbm_dwnkey  
  脚本为:  
  integer   li_row  
  integer   VK_TAB   =   09  
  integer   VK_SHIFT   =   16  
   
  if   key   =   KeyLeftArrow!   then  
  keybd_event(VK_SHIFT,0,0,0)   //按下shift  
  keybd_event(VK_TAB,0,0,0)   //按下tab    
  keybd_event(VK_TAB,0,2,0)   //释放tab    
  keybd_event(VK_SHIFT,0,2,0)   //释放shift    
  return   1  
  end   if  
   
  if   key   =   KeyRightArrow!   then  
  keybd_event(VK_TAB,0,0,0)   //按下tab    
  keybd_event(VK_TAB,0,2,0)   //释放tab    
  return   1  
  end   if  
  1.定义第二个用户自定义事件,ue_pressenter,Event   ID:pbm_dwnkey  
  脚本为:  
  If   This.Accepttext()<0   then  
    return  
      end   if  
   
      if   This.getcolumn()=Long(This.Describe("Datawindow.Column.count"))   then  
        if   this.getrow()=This.Rowcount()   then  
  This.insertrow(0)  
  This.scrolltorow(This.getrow()+1)  
  This.Setcolumn(1)  
              return  
        end   if  
        end   if  
    send(Handle(this),256,9,long(0,0))  
      This.SetActionCode(1)  
    This.settransobject(sqlca)  
    通过以上这样的方法即可实现您的要求。当然,你也可以创建一个用户对象,将这  
    个事件写在其中,可以在任何需要使用此功能的窗口中都可以实现。Top

7 楼oceanaut(海阔天空)回复于 2002-05-09 10:20:05 得分 5

1.首先在数据窗口中定义一个用户自定义事件,ue_keydown,Event   ID:pbm_dwnkey  
  脚本为:  
  integer   li_row  
  integer   VK_TAB   =   09  
  integer   VK_SHIFT   =   16  
   
  if   key   =   KeyLeftArrow!   then  
  keybd_event(VK_SHIFT,0,0,0)   //按下shift  
  keybd_event(VK_TAB,0,0,0)   //按下tab    
  keybd_event(VK_TAB,0,2,0)   //释放tab    
  keybd_event(VK_SHIFT,0,2,0)   //释放shift    
  return   1  
  end   if  
   
  if   key   =   KeyRightArrow!   then  
  keybd_event(VK_TAB,0,0,0)   //按下tab    
  keybd_event(VK_TAB,0,2,0)   //释放tab    
  return   1  
  end   if  
  2.定义第二个用户自定义事件,ue_pressenter,Event   ID:pbm_dwnkey  
  脚本为:  
  If   This.Accepttext()<0   then  
    return  
      end   if  
   
      if   This.getcolumn()=Long(This.Describe("Datawindow.Column.count"))   then  
        if   this.getrow()=This.Rowcount()   then  
  This.insertrow(0)  
  This.scrolltorow(This.getrow()+1)  
  This.Setcolumn(1)  
              return  
        end   if  
        end   if  
    send(Handle(this),256,9,long(0,0))  
      This.SetActionCode(1)  
    This.settransobject(sqlca)  
    通过以上这样的方法即可实现您的要求。当然,你也可以创建一个用户对象,将这  
    个事件写在其中,可以在任何需要使用此功能的窗口中都可以实现。  
    如果您对以上回答有什么意见,请留言给我或者mail给我哦!Top

8 楼liuyxit(初学Oracle)回复于 2002-05-09 10:44:53 得分 10

根据你的意思可變為如下代碼(已在用0:  
   
  //在rowfocuschanged事件中加:  
  if     getrow()=rowcount()   then   insertrow(0)  
   
  //在dw自定义一个event   id   为pbm_dwnprocessenter的事件  
  send(handle(this),256,9,0)  
  return   1  
  //這樣可以在光標到達最后一行時就增加一新行﹐回車只到下一列﹐且焦點到最后一列還能回到第一列。  
   
  Top

9 楼tiger201(你是风儿我是沙,编程不如种地瓜。)回复于 2002-05-09 11:14:06 得分 5

pbm_dwnprocessenter   中:  
   
  return   1Top

10 楼zmq223(尖刀土狼)回复于 2002-05-09 13:33:15 得分 5

同意楼上的,其余的有副作用。Top

11 楼anrong(anrong)回复于 2002-05-09 13:55:50 得分 5

具体情况具体来确定以上方法!Top

12 楼fallstone(天蓝)回复于 2002-05-09 20:53:08 得分 0

testTop

13 楼nasy(!!!###东方不败###!!!)回复于 2002-05-09 21:00:12 得分 5

过来问我啊,呵呵~~Top

14 楼fallstone(天蓝)回复于 2002-05-09 21:05:26 得分 0

问你了啊,你不跟我   说:)  
   
  问题加了RETURN就正确了,但是为什么这样还不明白,有关SEND的机理不懂,有人帮我解释下么?  
   
  以上帮助的人分数会给的,如果有人解释的好,我再加分。Top

15 楼swjtu95(老狼)回复于 2002-05-09 21:14:47 得分 70

Send   (   handle,   message#,   lowword,   long   )向窗口发送一个消息。  
      handle:你想要发送窗口的句柄,可用handle()函数获得句柄。  
      message#:无符号的整型变量。是你想发送消息的系统信息号,实现的功能,须查询sdk。  
      lowword:long类型,指定与消息一起发送的word类参数值。如果messageno参数指定的消息不使用该参数,那么将这个参数的值设置为0  
      long:长整型变量,你想发送消息的值。  
  Send()功能向窗口发送指定的消息并立即执行相应的事件处理程序。语法Send(   handle,   messageno,   word,   long   )参数handle:long类型,指定窗口的系统句柄,将向该窗口发送消息messageno:UnsignedInteger类型,指定要发送的消息号word:long类型,指定与消息一起发送的word类参数值。如果messageno参数指定的消息不使用该参数,那么将这个参数的值设置为0long:long类型或string,指定与消息一起发送的long型参数值或字符串返回值Long。函数执行成功时返回Windows系统调用SendMessage()的返回值,发生错误时返回-1。如果任何参数的值为NULL,Send()函数返回NULL。用法Send()函数用于向窗口发送非PowerBuilder预定义事件的消息,这个窗口可以是PowerBuilder应用的窗口,也可以是其它应用的窗口。Send()函数直接触发指定窗口相应的事件,执行事件处理程序后返回到调用应用中,这一点与Post()函数不同,Post()函数把发送的消息放置在指定窗口消息队列的尾部,然后返回到应用程序中,它并不等待相应事件事件处理程序的执行。因此,我们说Post()函数采用的是异步方式,Send()函数采用的是同步方式。Send()函数的参数handle指定接收消息的窗口句柄,对PowerBuilder窗口来说,使用Handle()函数可以得到该句柄。对其它应用程序的窗口来说,可以调用系统API函数查找窗口并得到相应窗口的句柄。实际上,Send()函数把它的各个参数直接传送给Windows的系统调用SendMessage()。在各种C++开发工具的WINDOWS.H文件中可以查到各消息编号。如果应用程序要发送PowerBuilder定义事件(包括预定义事件和用户定义事件),那么使用TriggerEvent()函数既简单有方便。当应用程序在long参数位置指定一个字符串时,Send()函数复制一个该字符串的副本,然后将副本的地址传送给指定窗口。示例1.   下面的代码向窗口w_date发送一个向下滚动一页的消息(消息号为277):Send(Handle(w_date),   277,   3,   0)示例2.   下面的两条语句均触发命令按钮cb_OK的Clicked事件:  
  Send(Handle(Parent),   273,   0,   Handle(cb_OK))cb_OK.TriggerEvent(Clicked!)  
  Send(Handle(w_emp),   277,   2,   0):窗口w_wmp向上滚动一页  
  Send(Handle(dw_whatever),   274,   61472,   0):数据窗口最小化  
  Send(Handle(dw_whatever),   274,   61488,   0):数据窗口最大化  
  Send(Handle(dw_whatever),   274,   61728,   0):数据窗口复原  
   
  Top

16 楼liuyxit(初学Oracle)回复于 2002-05-13 09:10:43 得分 0

學習﹗Top

17 楼msf(飞黄腾达)回复于 2002-05-13 09:18:55 得分 5

赞成海阔天空所说的。Top

18 楼bobi1314(博比)回复于 2002-05-14 10:11:02 得分 0

下面这种方法应该可以的,我一直是用这种办法的。但是你在使用的时候要进行考虑有没有跟其他的事件有没有什么冲突才行。  
  你自定义一个event   id   为pbm_dwnprocessenter的事件  
  然后在该事件中写以下代码:  
  send(handle(this),256,9,0)  
  return   1  
   
  Top

相关问题

  • 怎么屏蔽回车键
  • 如何编程屏蔽回车键
  • 请问如何屏蔽掉对话框的回车键?
  • 怎样在网页中屏蔽回车键?
  • 请问对话框程序中如何屏蔽“回车”键和“ESC”键
  • 请高手们赐教:怎么屏蔽掉对话框上得回车键!
  • 如何屏蔽CPropertySheet派生类中的OK键,使其不响应回车键
  • 请教——在对话框应用程序中如何屏蔽回车键?
  • 在DW中为什么按回车键后不能换行?
  • 如何屏蔽掉在TMemo中按回车键就换行这个功能?按回车键我不希望它换行?

关键词

  • 脚本
  • 下移一行
  • dw
  • dwnkey
  • vk
  • tab
  • 自定义
  • 回车
  • pbm
  • 事件

得分解答快速导航

  • 帖主:fallstone
  • lmby
  • kaikaihe
  • kaisa_cheng888
  • dfz_fan
  • supershb
  • oceanaut
  • oceanaut
  • liuyxit
  • tiger201
  • zmq223
  • anrong
  • nasy
  • swjtu95
  • msf

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo