| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1402 人关注过本帖, 4 人收藏
标题:VFP9 combox 的BUG,CCB2000在VFP10中已修复。谁有简单的绕过这个BUG的方法 ...
只看楼主 加入收藏
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:780
专家分:3058
注 册:2018-3-13
收藏
得分:0 
以下是引用csyx在2025-4-8 16:13:26的发言:
又多测试了几次,点击表单的方法不太可靠,我把计时器的间隔频率改成 500ms,有时能看到组合框的值停顿了一下才变(鼠标点击起了作用),也有几次没更新(鼠标点击没起作用)
cssnet 33楼给出的方案应该更可靠,就是要处理的情形有点多,不同的 RowSourceType、BoundColumn ... 都要考虑
上面这个 ctls.cbo 类中唯一可用的是 CloseUp 事件,例如:把 cssnet 在表单 Paint 事件中的代码转到这,Paint 的系统开销较大


这家伙很懒,啥也没留下
2025-04-08 18:02
kangss
Rank: 8Rank: 8
等 级:贵宾
威 望:14
帖 子:322
专家分:732
注 册:2014-6-12
收藏
得分:0 
以下是引用csyx在2025-4-8 18:02:55的发言:

鼠标点击有一个副作用,就是list展开时,它下边有其它控件时,鼠标会点击下边的控件

CloseUp 确实不错,不理想的地方是,列表模式下第二次点击编辑框,或第二次点击小三角combo不会折叠

改成:
DECLARE LONG SendMessage IN WIN32API LONG,LONG,LONG,LONG
SendMessage(THISFORM.HWND, 0x0201, 0, 0)
SendMessage(THISFORM.HWND, 0x0202, 0, 0)
向窗口发送点击消息,效果也不理想,同样会出现不灵现象

2025-04-08 19:00
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:780
专家分:3058
注 册:2018-3-13
收藏
得分:0 
以下是引用kangss在2025-4-8 19:00:00的发言:
鼠标点击有一个副作用,就是list展开时,它下边有其它控件时,鼠标会点击下边的控件
这个可以处理的,mouse_event 指定一个没有控件的坐标即可,例如 (0,0)
以下是引用kangss在2025-4-8 19:00:00的发言:
不理想的地方是,列表模式下第二次点击编辑框,或第二次点击小三角combo不会折叠
这个也可以处理,有 DropDown / CloseUp 这两事件对,容易判断要做什么

仅仅是先做个验证,看看点击表单是否总能得到正确值,没完善的地方多了去了,像 Timer 销毁机制等等都是。既然已发现不可靠就没必要做进一步的工作了
到目前为止,我用到的组合框都不需要显示多列,所以一个弹出菜单足以,没需求也就没动力

以前也想过用 listbox,基于前面说到原因直接放弃了,其实放弃还有个更重要的原因,下拉时焦点转到 listbox 会触发 combobox.lostfocus,已完成的很多组合框在 lostfocus 里有相应的代码,这就太特么讨厌了
也想过 DropDown 时弹出一个带 listbox 的窗口来选择,虽然可以不触发 lostfocus 事件,但当前窗口又会 Deactive,单是表单标题变成不活动状态就显得太不专业
另外还试过弹出一个带 listbox 的 Toolbar,Toolbar 中的控件不抢焦点虽然满足了要求,还没到裁剪窗口这步,就发现 listbox 的滚动条定位不对劲,呵呵 ...


这家伙很懒,啥也没留下
2025-04-08 20:50
ccb2000
Rank: 2
等 级:论坛游民
威 望:2
帖 子:18
专家分:40
注 册:2022-2-26
收藏(3)
得分:0 
可以运行以下代码修复VFP 9.0.0.7423 (SP2)中的这个bug:

SET TALK OFF

x1=FILETOSTR("vfp9.exe")
IF SUBS(x1,0x4c7570+1,5)=CHR(0xba)+CHR(0x01)+CHR(0x00)+CHR(0x00)+CHR(0x00)
   x1=STUFF(x1,0x4c7570+1,5,CHR(0xe9)+CHR(0x6f)+CHR(0x00)+CHR(0x00)+CHR(0x00))
   =STRTOFILE(x1,"vfp9.exe")
ENDI

x1=FILETOSTR("vfp9r.dll")
IF SUBS(x1,0x3bdf3e+1,5)=CHR(0xba)+CHR(0x01)+CHR(0x00)+CHR(0x00)+CHR(0x00)
   x1=STUFF(x1,0x3bdf3e+1,5,CHR(0xe9)+CHR(0x6f)+CHR(0x00)+CHR(0x00)+CHR(0x00))
   =STRTOFILE(x1,"vfp9r.dll")
ENDI

x1=FILETOSTR("vfp9t.dll")
IF SUBS(x1,0x2f2e43+1,5)=CHR(0xba)+CHR(0x01)+CHR(0x00)+CHR(0x00)+CHR(0x00)
   x1=STUFF(x1,0x2f2e43+1,5,CHR(0xe9)+CHR(0x6f)+CHR(0x00)+CHR(0x00)+CHR(0x00))
   =STRTOFILE(x1,"vfp9t.dll")
ENDI

也可以下载VFP Advanced 2022免费版。

收到的鲜花
  • kangss2025-04-09 09:47 送鲜花  1朵  
  • csyx2025-04-09 10:52 送鲜花  1朵  
  • joinwin_ling5 天前 16:25 送鲜花  1朵  
2025-04-09 09:31
kangss
Rank: 8Rank: 8
等 级:贵宾
威 望:14
帖 子:322
专家分:732
注 册:2014-6-12
收藏
得分:0 
以下是引用ccb2000在2025-4-9 09:31:32的发言:

可以运行以下代码修复VFP 9.0.0.7423 (SP2)中的这个bug:

SET TALK OFF

x1=FILETOSTR("vfp9.exe")
IF SUBS(x1,0x4c7570+1,5)=CHR(0xba)+CHR(0x01)+CHR(0x00)+CHR(0x00)+CHR(0x00)
   x1=STUFF(x1,0x4c7570+1,5,CHR(0xe9)+CHR(0x6f)+CHR(0x00)+CHR(0x00)+CHR(0x00))
   =STRTOFILE(x1,"vfp9.exe")
ENDI

x1=FILETOSTR("vfp9r.dll")
IF SUBS(x1,0x3bdf3e+1,5)=CHR(0xba)+CHR(0x01)+CHR(0x00)+CHR(0x00)+CHR(0x00)
   x1=STUFF(x1,0x3bdf3e+1,5,CHR(0xe9)+CHR(0x6f)+CHR(0x00)+CHR(0x00)+CHR(0x00))
   =STRTOFILE(x1,"vfp9r.dll")
ENDI

x1=FILETOSTR("vfp9t.dll")
IF SUBS(x1,0x2f2e43+1,5)=CHR(0xba)+CHR(0x01)+CHR(0x00)+CHR(0x00)+CHR(0x00)
   x1=STUFF(x1,0x2f2e43+1,5,CHR(0xe9)+CHR(0x6f)+CHR(0x00)+CHR(0x00)+CHR(0x00))
   =STRTOFILE(x1,"vfp9t.dll")
ENDI

也可以下载VFP Advanced 2022免费版。
2025-04-09 10:04
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:349
专家分:579
注 册:2019-10-11
收藏
得分:0 
谢谢大佬的分享
2025-04-09 10:09
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:368
专家分:335
注 册:2013-10-4
收藏
得分:0 
弱弱问一下,我硬盘中的VFP是N年前的版本,一直也没动过,请问,你们说的VFP 9.0.0.7423 (SP2)是最新汉化版吗?还是直接从官网下载SP2?能否发个链接我更新一下?
非常感谢帮助!

图片附件: 游客没有浏览图片的权限,请 登录注册


2025-04-09 11:25
kangss
Rank: 8Rank: 8
等 级:贵宾
威 望:14
帖 子:322
专家分:732
注 册:2014-6-12
收藏
得分:0 
感谢CCB2000提供造福vfper的修复办法。这里提醒一下vfper:还得在 combo 的 InteractiveChange 中增加少量代码才能彻底解决 Style = 2 时的BUG:
https://

For the Drop-down list box (ComboBox.Style=2),
recommend to add the following code to the ComboBox.InteractiveChange() event to refresh the selected item:
IF THIS.STYLE=2
    THIS.VALUE=THIS.VALUE
    THIS.REFRESH
ENDIF

2025-04-09 11:50
kangss
Rank: 8Rank: 8
等 级:贵宾
威 望:14
帖 子:322
专家分:732
注 册:2014-6-12
收藏
得分:0 
以下是引用cssnet在2025-4-9 11:25:18的发言:
弱弱问一下,我硬盘中的VFP是N年前的版本,一直也没动过,请问,你们说的VFP 9.0.0.7423 (SP2)是最新汉化版吗?还是直接从官网下载SP2?能否发个链接我更新一下?
非常感谢帮助!


论坛置顶贴,标题尽管写的是 sp1,里面有 sp2 最新版下载链接
2025-04-09 11:52
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:780
专家分:3058
注 册:2018-3-13
收藏
得分:0 
一直用 5815 版,ccb 发的这个修复我用不了。
找了一个 7423,取出修复位置后的特征串在 5815 中共找到 880 处,显然长度不足以定位 5815 中对应位置,然后每次多取一个特征字节,结果发现长度=8时共有39处,增加到9时就一个都找不到了 唉,我是无缘用这个简单的修复了

另:
初步确定 vfp9.exe(5815) 的修改位置是 0x4c7421(0x4c7420+1),只是不知这个 e9 6f 00 的 6f 是否适用于 5815 (简单测试了一下好像没问题)
vfp9r.dll(5815) 修改位置是 0x3bdecf(0x3bdece+1)
9t 一般用不到懒得改了,应该也不会用到吧,9t 不是用于多线程 com 的吗,com 还能有 UI ?

[此贴子已经被作者于2025-4-9 13:56编辑过]


这家伙很懒,啥也没留下
2025-04-09 12:23
快速回复:VFP9 combox 的BUG,CCB2000在VFP10中已修复。谁有简单的绕过这个BUG的 ...
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020090 second(s), 12 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved