| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1490 人关注过本帖
标题:容器控件拦截容器内控件的方法
只看楼主 加入收藏
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:347
专家分:326
注 册:2013-10-4
收藏
得分:0 
以下是引用sam_jiang在2022-11-17 11:44:12的发言:
应该可以做成类,设置2个参数,分别为2个相邻的object! 并不一定是由form来处理,看使用者需求,也可以由某个container控件来统一处理。


你可能低估了Container控件跟表单的区别。
Container控件是做不到表单一模一样效果的。
至于深层原因,我觉得可能在于:
表单有句柄(oForm.hWnd),而Container控件无句柄。
Form是正经的、标准的Windows窗口,而Container只是VFP“随手”画出来的,或许也可以大略地理解为一个可视图片而已。
而OLE控件,跟Form处在同一级别,都是司令长官;
它们跟Container控件在官阶方面皆不对等,后者大致相当于副官或者上士一等兵。
副官或者上士一等兵,是没有足够的权利与资格,去管司令长官很多事件的。
2022-11-17 12:01
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:746
专家分:1114
注 册:2021-10-13
收藏
得分:0 
事实上,mousemove事件经常有会有小状况,不按套路走,我发上来的另一个目的是希望大家试用,看看有没有什么bug,以便反馈给我。

我今天发现偶尔会失灵,明明没有按下鼠标左键,系统会认为我按下了左键(不知道是不是我的鼠标问题),也就是,没有按下鼠标左键,居然有时候可以调整控件的大小。
2022-11-17 12:25
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:347
专家分:326
注 册:2013-10-4
收藏
得分:0 
以下是引用sam_jiang在2022-11-17 12:25:52的发言:
事实上,mousemove事件经常有会有小状况,不按套路走,我发上来的另一个目的是希望大家试用,看看有没有什么bug,以便反馈给我。
我今天发现偶尔会失灵,明明没有按下鼠标左键,系统会认为我按下了左键(不知道是不是我的鼠标问题),也就是,没有按下鼠标左键,居然有时候可以调整控件的大小。


这是小问题。你给表单添个属性StartDrag,平时是.f.,需要调大小时赋值.t.不就结了。
2022-11-17 12:32
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:746
专家分:1114
注 册:2021-10-13
收藏
得分:0 
回复 11楼 cssnet
其实每个控件都有句柄,只是控件的句柄被隐藏了。我的意思让container控件来处理,意思是,可能不需要上升到form的程度。比如grid控件,我们把cell,header,column的mousemove事件传递给grid,这样就可以使用grid的gridhittest方法了,这里就没有需求将mousemove事件冒泡到form上。
2022-11-17 12:35
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:347
专家分:326
注 册:2013-10-4
收藏
得分:0 
以下是引用sam_jiang在2022-11-17 12:35:38的发言:

其实每个控件都有句柄,只是控件的句柄被隐藏了。我的意思让container控件来处理,意思是,可能不需要上升到form的程度。比如grid控件,我们把cell,header,column的mousemove事件传递给grid,这样就可以使用grid的gridhittest方法了,这里就没有需求将mousemove事件冒泡到form上。


上次之所以我建议一位狐友,用Form.Label去粗暴压住下边Form的OLE控件,就是因为,普通的VFP内部控件——包括container控件——都不能够如人所愿地显示到OLE控件上方,无论你如何调object.ZOrder(0),都会被OLE控件压住,这会导致一些奇怪的、出人意料的后果。
2022-11-17 12:44
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:746
专家分:1114
注 册:2021-10-13
收藏
得分:0 
回复 10楼 吹水佬
我这样理解对不对,假设给form添加一个respond方法,参数为evalue,oobject,然后给控件的某个事件中写入以下代码:

thisform.respond(evalue,this)

这好像也是个好办法!
2022-11-17 12:45
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:746
专家分:1114
注 册:2021-10-13
收藏
得分:0 
回复 15楼 cssnet
就是那个K歌软件的字幕压制吗?成功了?
2022-11-17 12:50
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:746
专家分:1114
注 册:2021-10-13
收藏
得分:0 
回复 13楼 cssnet
呵呵,也是个好办法

刚试了以下,不行。因为我们要在鼠标左键按下的情况下,移动鼠标,才开始调节控件位置。没有按下鼠标的左键,移动鼠标,则不产生任何操作。按理我们松开鼠标,nbutton应该就会返回0,可事实上它的值居然还是1。。。所以系统误认为我们还在调整控件位置。

[此贴子已经被作者于2022-11-17 13:18编辑过]

2022-11-17 12:52
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:347
专家分:326
注 册:2013-10-4
收藏
得分:0 
以下是引用sam_jiang在2022-11-17 12:50:36的发言:

就是那个K歌软件的字幕压制吗?成功了?


后来他具体怎么做法我不清楚,不过他似乎自己采用其他手段做到了吧?
2022-11-17 12:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:0 
回复 16楼 sam_jiang
微软的VC类库事件就是这样用消息反弹实现
2022-11-17 13:06
快速回复:容器控件拦截容器内控件的方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016510 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved