怎么得到数据窗口中某个dwo的句柄 或者 改变数窗中一可编辑列的Caret

wu_07 2002-12-30 10:20:30
在单行编辑框我可以用这种方法来改变插入标记(一个插入标记是位于窗口绘图区中的一个闪动的直线、方块或图标。插入标记通常用于指示文本或图形将插入的位置。)
long h,ll_bmp
h =handle(this)
LONG ll_inst
string ss
SetNull(ll_inst)
ss= 'C:\powerbuilder\test.BMP'
//载入
ll_bmp = guo_gdi.LoadImage(ll_inst,ss,0,0,0,16)
CreateCaret(h,ll_bmp , 0,0) //create new caret size
ShowCaret(h) //show the new caret
// SetCaretPos(xpos,ypos)

我现在想做的是想改变数据窗口中一个可编辑列的Caret
问题是将上边一端语句加到数据窗口中,它改变的是数据窗口的Caret,而不是数据窗口中某个具体的dwo,例如可编辑的列.
所以我想得到这个具体列的句柄,从而使其作用到一个列
但是怎么得到,现在没有头绪!?
或者用其他办法曲线救国也行!~??呵呵
...全文
54 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
msf 2002-12-31
  • 打赏
  • 举报
回复
精彩.
wu_07 2002-12-30
  • 打赏
  • 举报
回复
我没有测试hwndchild
只是根据GetObjectAtPointer()来判断是那一列得到了焦点
balloonman2002 2002-12-30
  • 打赏
  • 举报
回复
楼主,有一事不太明白,我搞了两列,然后建了PBM_COMMAND事件,然后在里面:messagebox("hand",string(hwndchild))
运行后分别点击这两列,为什么报出的值都一样啊?这两列的HANDLE都一样吗?那怎么实现楼主的“使其作用到一个列”?
wu_07 2002-12-30
  • 打赏
  • 举报
回复
参考了一下比较早的一个帖子,也是有用的技巧:

如何使用子数据窗口中的按钮控件

假设dddw列列名为,the_test,如下:
1、自定义事件ue_pbmcommand,选择event_id为pbm_command,定义一instance变量
string is_object
2、编写脚本DataWindowChild ldwc_Child
GetChild( "the_test", ldwc_Child )
IF hwndchild = Handle( ldwc_Child ) THEN
CHOOSE CASE notificationcode
CASE 2048 // RowFocusChanged on DDDW
CASE 1281 // Clicked
IF is_object = 按钮名称 THEN
//按钮单击处理
END IF
CASE 2314 // Right Mouse Button Clicked
CASE 2311 // MouseMove
is_object = ldwc_Child.GetObjectAtPointer()
END CHOOSE
END IF
3、原理:
在PB6.0(^)中,pbm_command带3个参数,其中hwndchild(long)与notificationcode(unsignedinteger)即DDDW的Handle和Event ID。

⒉DDDW 的Event ID 列表:
Event Event ID
-------------------------------
Clicked 1281
RowFocusChanged 2048
RightMouseButtonDown 2314
Left Button Up 2313
Retreive End 769
MouseMove 2311
...
wu_07 2002-12-30
  • 打赏
  • 举报
回复
谢谢大家,终于找到了

constructior:
string ls_path
LONG ll_inst
SetNull(ll_inst)
ls_path = 'C:\powerbuilder\test.BMP'
//载入
il_bmp = LoadImage(ll_inst,ss,0,0,0,16)

数据窗口pbm_command事件
long h
string is_object
CHOOSE CASE notificationcode
CASE 256 //数据窗口子项得到焦点,lostfocus是512
is_object = this.GetObjectAtPointer()
if Pos(Lower(is_object),"salary")>0 then //是不是salary列
h =hwndchild
post CreateCaret(h,il_bmp, 0,0) //create new caret size
post ShowCaret(h) //show the new caret
end if
END CHOOSE

destructor:
deleteobject(il_bmp)
dotnba 2002-12-30
  • 打赏
  • 举报
回复
同意 balloonman2002
balloonman2002 2002-12-30
  • 打赏
  • 举报
回复
继续帮你UP,:),,,
xiaozg118 2002-12-30
  • 打赏
  • 举报
回复
能做的就是帮你推! :(
zhyx21century 2002-12-30
  • 打赏
  • 举报
回复
what is the caret?
balloonman2002 2002-12-30
  • 打赏
  • 举报
回复
楼主搞定了别忘给大家发一份喔,:)
wu_07 2002-12-30
  • 打赏
  • 举报
回复
好象把图片做了一下反色处理,黑色变成了透明,白色变成了黑色
balloonman2002 2002-12-30
  • 打赏
  • 举报
回复
而且好象还是四方型,我的图片可不是四方型,:)
balloonman2002 2002-12-30
  • 打赏
  • 举报
回复
忘了ShowCaret(h)了,,,,,,不过感觉图片好象没搞进去,一团黑,,,
可否彩色?
wu_07 2002-12-30
  • 打赏
  • 举报
回复
对了,得写到SLE的getfocus事件中

CreateCaret(handle,1, 8, 24) //create new caret size
ShowCaret(h) //show the new caret
balloonman2002 2002-12-30
  • 打赏
  • 举报
回复
楼主,我怎么实验不成功啊,:),CreateCaret函数也返回 1 了,怎么就连文本框都不成功,:),我没用DW试,直接用的SLE都不行,:)
里面的光标不变成指定的图片,:)
wu_07 2002-12-30
  • 打赏
  • 举报
回复
改是改过来了,可是这个Caret的位置又比较头痛
balloonman2002 2002-12-30
  • 打赏
  • 举报
回复
嘿嘿,,,,,,
wu_07 2002-12-30
  • 打赏
  • 举报
回复
可能是pb数据窗口中可编辑文本框只创建一个,也就是得到焦点的那一个单元才使用.
涉及到dw的底层,当你再次点这个单元时候,pb自己又处理成默认的方式,所以必须再次改.
balloonman2002 2002-12-30
  • 打赏
  • 举报
回复
但最终改变光标符号得靠下面两句:
h =hwndchild
post CreateCaret(h,il_bmp, 0,0)
这样不同列的hwndchild的都一样的话,到底改的是哪一列呢?

604

社区成员

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

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