| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 894 人关注过本帖
标题:需要VFP9中显示国际音标如ŋ,但VFP9中读取包含Unicode字符的内容就乱码 ...
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10659
专家分:43278
注 册:2014-5-20
收藏
得分:0 
以下是引用sych在2025-8-21 10:58:22的发言:

SetWindowPos可以实现,建议不要只是照抄代码,尝试着花点时间去理解大佬的代码是怎么实现的
我也是小白,仅当建议

是的,其实全是调用win32API,只是为省时间测试才用C写,只用vfp写应该也可以。
只要有了控件句柄,用windows api可以设置控件的属性。
昨天 11:10
shschy
Rank: 2
等 级:论坛游民
帖 子:132
专家分:45
注 册:2022-3-13
收藏
得分:0 
您好!您发的UEdit_dll.rar已经基本实现功能需求,只是需要将huedit控件对象left、top、width、height可调即可
您好!这个rar包里的scx文件已经满足基本功能,这里可以按需调整huedit控件的显示文件
SetUEditText(of.hUEdit, FILETOSTR("!!音标1.csv")),可以根据英文单词显示指定csv文件。
指定csv文件可以包含50个单词音标,只要根据英文单词找到打开哪个csv文件即可显示。

这里需要将huedit控件对象left、top、width、height可调即可,
可以从 of.hUEdit查看到某个值,估计这个值就是 句柄。
(1)但不会API调句柄,改对象位置和大小。
(2)也无法做到uedit.c文件增加控制huedit对象left、top、width、height参数语句,并编译。
     这个估计还要装C软件,实现编译dll,重新拷贝如电脑
是否以上两个方法之一,就可以实现of.huedit"对象"修改位置、宽高数值?
如果版主能再帮忙uedit.c里加个方法,实现huedit"对象"修改位置、宽高数值,再编译上传就好!
不好意思,再问一下,是只要uedit.c修改重新编译,只拷贝uedit.dll文件覆盖就可以吗?
谢谢!

以下是引用吹水佬在2025-8-21 10:59:41的发言:


整个示例是简单测试用的,没有实用价值。
会用C语言编程可参考看看有无可用之处。

昨天 11:49
iswith
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:731
专家分:734
注 册:2013-5-14
收藏
得分:0 
在vfp9 DBF或 MSSQL存utf8 Base64 格式,然后把Base64用支持的Unicode API转成Unicode 16显示就可以了,即可存也可以看
昨天 14:50
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10659
专家分:43278
注 册:2014-5-20
收藏
得分:0 
回复 42楼 shschy
如果只作显示用,增加设置编辑框的位置和大小、字体的名称和大小颜色、滚动条等。
如果要作编辑数据用,要考虑的问题不少,如焦点问题,鼠标键盘事件等。
昨天 15:57
shschy
Rank: 2
等 级:论坛游民
帖 子:132
专家分:45
注 册:2022-3-13
收藏
得分:0 
只作显示用,增加设置编辑框的位置,大小、字体的名称和大小颜色、滚动条即可。
只作显示用,增加设置编辑框的位置,大小、字体的名称和大小颜色、滚动条即可。
谢谢
以下是引用吹水佬在2025-8-21 15:57:46的发言:

如果只作显示用,增加设置编辑框的位置和大小、字体的名称和大小颜色、滚动条等。
如果要作编辑数据用,要考虑的问题不少,如焦点问题,鼠标键盘事件等。

昨晚 19:59
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10659
专家分:43278
注 册:2014-5-20
收藏
得分:0 
抽空再试试吧,现在要带小孩有点困身。

昨晚 22:18
shschy
Rank: 2
等 级:论坛游民
帖 子:132
专家分:45
注 册:2022-3-13
收藏
得分:0 
感谢支持,只要先初始uedit控件高度为700即可,主窗口界面可以按此高度设置,发生新查询就调用uedit.prg
感谢版主的支持。只要先初始uedit控件高度为700即可,主窗口界面可以与包含uedit控件表单高度设置一样,发生新查询就调用uedit.prg
这里也继续研究winapi。
看到vfp9.0中“SetUEditText(this.hUEdit, FILETOSTR("!!音标.csv"))”
好像含unicode编码文件经 vfp9.0里的FILETOSTR()也能转入,
那关键在于如何实现将FILETOSTR()的句柄《不知是这个术语吗》经非VFP的API再次转向到uedit控件的。


DEFINE CLASS formUEdit as Form
    width      = 500
    height     = 500   
    ShowWindow = 2
    hUEdit     = 0
    PROCEDURE Activate
        this.hUEdit = CreateUEdit(this.hWnd) &&在formedit表单对象里创建一个huedit文本框对象
        SetFont(this.hUEdit, 24, "Arial")
        SetFocus(this.hUEdit)
       SetUEditText(this.hUEdit, FILETOSTR("!!音标.csv"))
    ENDPROC
    PROCEDURE Destroy
        DestroyUEdit(this.hUEdit)
        CLEAR EVENTS
    ENDPROC
ENDDEFINE

以下是引用吹水佬在2025-8-21 22:18:56的发言:

抽空再试试吧,现在要带小孩有点困身。

收到的鲜花
  • trial035 小时前 送鲜花  1朵  
昨晚 23:07
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10659
专家分:43278
注 册:2014-5-20
收藏
得分:0 
以下是引用shschy在2025-8-21 23:07:46的发言:

只要先初始uedit控件高度为700即可

38楼提到的用SetWindowPos()就可以设置。
先增加控件的参数 Left、Top、Width、Height 试试
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
CLEAR
CLEAR ALL

PUBLIC cDefPath
cDefPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefPath)

DECLARE Long SetFocus     IN user32 long
DECLARE Long CreateUEdit  IN UEdit long,long,long,long,long
DECLARE Long DestroyUEdit IN UEdit long
DECLARE Long SetUEditText IN UEdit long,string
DECLARE Long SetFont      IN UEdit long,long,string

of = CREATEOBJECT("formUEdit")
of.show()
READ EVENTS

 
CLOSE TABLES ALL 
CLEAR ALL
RETURN

DEFINE CLASS formUEdit as Form 
    width      = 800
    height     = 700    
    ShowWindow = 2
    hUEdit     = 0
    PROCEDURE Activate
        this.hUEdit = CreateUEdit(0,0,700,700,this.hWnd) 
        SetFont(this.hUEdit, 24, "Arial")
        SetFocus(this.hUEdit)
        SetUEditText(this.hUEdit, FILETOSTR("C:\_temp\!!音标.csv"))
    ENDPROC
    PROCEDURE Destroy
        DestroyUEdit(this.hUEdit)
        CLEAR EVENTS 
    ENDPROC 
ENDDEFINE

_UEdit_dll.rar (31.3 KB)


[此贴子已经被作者于2025-8-22 07:02编辑过]

7 小时前
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10659
专家分:43278
注 册:2014-5-20
收藏
得分:0 
以下是引用shschy在2025-8-21 23:07:46的发言:

看到vfp9.0中“SetUEditText(this.hUEdit, FILETOSTR("!!音标.csv"))”
好像含unicode编码文件经 vfp9.0里的FILETOSTR()也能转入,
那关键在于如何实现将FILETOSTR()的句柄《不知是这个术语吗》经非VFP的API再次转向到uedit控件的。

文件存取通常是按字节来处理,看到从文件取出来的字符乱码,有可能那只是“看到”的而并不是“取到”的字符本身,也就是说通过输出的设备不能真实还原字符,如从文件取出来的“ŋ”显示输出时变“?”了。
FILETOSTR()是较高级的文件处理函数,无需理会文件句柄,他是直接将整个文件完整载入到内存。
7 小时前
shschy
Rank: 2
等 级:论坛游民
帖 子:132
专家分:45
注 册:2022-3-13
收藏
得分:0 
新rar下载测试,可使用。感谢一早解答
新rar下载测试,可使用。感谢一早解答
以下是引用吹水佬在2025-8-22 07:15:48的发言:


文件存取通常是按字节来处理,看到从文件取出来的字符乱码,有可能那只是“看到”的而并不是“取到”的字符本身,也就是说通过输出的设备不能真实还原字符,如从文件取出来的“”显示输出时变“?”了。
FILETOSTR()是较高级的文件处理函数,无需理会文件句柄,他是直接将整个文件完整载入到内存。

6 小时前
快速回复:需要VFP9中显示国际音标如ŋ,但VFP9中读取包含Unicode字符的内容 ...
数据加载中...
 
   



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

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