注册 登录
编程论坛 VFP论坛

需要VFP9中显示国际音标如ŋ,但VFP9中读取包含Unicode字符的内容就乱码

shschy 发布于 2025-08-18 09:53, 1072 次点击
‌需要VFP9中显示国际音标如ŋ,但VFP9中读取包含Unicode字符的内容就乱码
搜索帮助,已改进到使用 Microsoft Form Text2.0控件来显示显示,
但是只能在控件上用键盘ctrl+v黏贴可以实现 国际音标(含Unicode字符的字符串),
一旦经vfp9内部操作,如“Microsoft Form Text2.0控件”.text=_cliptext,就乱码。

同时含unicode字符内容保存到dbf表(如insert into dbf 或 replace 某字段 with 某字符串),
也无法实现unicode字符正常保存与读取。

国际音标(IPA)符号的Unicode字符主要包括元音、辅音及特殊符号,
以下是部分常见字符的编码示例:
[ŋ]‌:后鼻音符号(U+014B) ‌
如‌:唱歌,sing‌,[siŋ]


60 回复
#2
iswith2025-08-18 10:18
vfp要使用unicode除了使用net控件其它没有任何办法,一艘船只能装10个人,现在你有100人要上船,除换船就是把原来的船再绑一个大船来装。
#3
shschy2025-08-18 11:39
请问要用哪种net控件
请问net控件的具体名称,在win10+vfp9.0环境下自带,还是需要下载安装?谢谢!
以下是引用iswith在2025-8-18 10:18:06的发言:

vfp要使用unicode除了使用net控件其它没有任何办法,一艘船只能装10个人,现在你有100人要上船,除换船就是把原来的船再绑一个大船来装。

#4
吹水佬2025-08-18 13:46
VFP有unicode字符串的转换处理功能,数据运算和存取应该没问题。
只是输入输出不支持unicode字符,可用windows的控件。
#5
shschy2025-08-18 14:04
请问具体要用哪个windows控件
这里只找到microdsoft form textbox2.0控件可以显示,但也只能做到操作系统黏贴才行。
使用microsoft-form-textbox.text=_cliptext就会出现乱码。
只要vfp处理过含unicode字符的信息,如filetostr()等,出来都是乱码?
只有本站会员才能查看附件,请 登录

以下是引用吹水佬在2025-8-18 13:46:07的发言:

VFP有unicode字符串的转换处理功能,数据运算和存取应该没问题。
只是输入输出不支持unicode字符,可用windows的控件。

#6
shschy2025-08-18 14:22
下面是有关内容附件
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

下面是图片内容文件
只有本站会员才能查看附件,请 登录



#7
shschy2025-08-18 14:30
**参考 https://bbs.bc-cn.net/viewthread.php?tid=509403&highlight=unicode
** 如:\u6d4b\u8bd5\u6587\u5b57
** 先转换成:4b6dd58b8765575b
** ? STRCONV(STRCONV("4b6dd58b8765575b",16), 6)

&& 如:\u0053\u0049\u01F1
&& 先转换成:53004900F101
thisform.Olecontrol3.text=STRCONV(STRCONV("53004900F101",16), 6)
? STRCONV(STRCONV("53004900F101",16), 6)
只有本站会员才能查看附件,请 登录
#8
吹水佬2025-08-18 14:53
转码存取不行吗?试试用二进制字符码。
#9
shschy2025-08-18 15:04
具体编码结果:
's' → 0x73(1字节)
'i' → 0x69(1字节)
'ŋ' → 0xC5 0x8B(2字节)
完整UTF-8编码序列:73 69 C5 8B(共4字节)

字母分解编码:
"S":U+0053 → UTF-8编码为0x53(单字节ASCII兼容)
"I":U+0049 → UTF-8编码为0x49(单字节ASCII兼容)
"ŋ":U+014B → UTF-8编码为0xC5 0x8B(双字节序列)
完整UTF-8编码序列:53 49 C5 8B(共4字节)

? STRCONV(STRCONV("53004900F101",16), 6)  &&大写  SIŋ
? STRCONV(STRCONV("730069008BC5",16), 6)  &&小写  siŋ
在vfp中都无法显示
#10
shschy2025-08-18 15:09
如果要将文件unicode.txt中的内容“siŋ”,正常显示在microsoft-form-textbox类控件中
如果要将文件unicode.txt中的内容“siŋ”,正常显示在microsoft-form-textbox类控件中
应该如何实现?
a=filetostr("d:\unicode.txt")
b=STRCONV(a.......)
.
.
.
microsoft-form-textbox.text=b
以下是引用吹水佬在2025-8-18 14:53:24的发言:

转码存取不行吗?试试用二进制字符码。

#11
吹水佬2025-08-18 22:23
保存和读取好像也没问题
STRTOFILE(0hC58B,"tmp.txt")        && 保存后用记事本打开 ŋ
?STRCONV(FILETOSTR("tmp.txt"),15)  && 读取显示编码正常

#12
吹水佬2025-08-18 22:43
不要用vfp字符串来处理输入输出。
可以用内存编码再通过内存地址传送。
或者用转义字符码,如用web控件时html的&#x....,ŋ的码是014b(两字节)。
#13
shschy7 天前 17:13
请教用内存编码再通过内存地址传送,有具体的可执行代码吗?以下是搜到的,但调试不成功。
以下代码执行下来无效果。
    * 读取剪贴板Unicode文本(修复内存复制问题)
    LOCAL hClip, pData, nSize, cBuffer, cUnicode
    cUnicode = ""
   
    DECLARE INTEGER OpenClipboard IN user32 INTEGER hWnd
    DECLARE INTEGER CloseClipboard IN user32
    DECLARE INTEGER GetClipboardData IN user32 INTEGER uFormat
    DECLARE INTEGER GlobalLock IN kernel32 INTEGER hMem
    DECLARE INTEGER GlobalUnlock IN kernel32 INTEGER hMem
    DECLARE INTEGER GlobalSize IN kernel32 INTEGER hMem
    DECLARE INTEGER RtlMoveMemory IN kernel32;
        STRING @lpvDest, INTEGER lpvSource, INTEGER cbCopy
   
    IF OpenClipboard(0) = 0
        MESSAGEBOX("剪贴板被占用,请关闭占用程序后重试", 16)
        RETURN ""
    ENDIF
   
    * 读取CF_UNICODETEXT格式(13)
    hClip = GetClipboardData(13)
    IF hClip > 0
        pData = GlobalLock(hClip)
        IF pData > 0
            nSize = GlobalSize(hClip)
            IF nSize > 0 AND nSize % 2 = 0  && 确保UTF-16格式(偶数字节)
                cBuffer = REPLICATE(CHR(0), nSize)
                RtlMoveMemory(@cBuffer, pData, nSize)  && 稳定复制内存
                cUnicode = STRTRAN(cBuffer, CHR(0)+CHR(0), "", 1, 1)  && 移除结尾空字符
            ENDIF
            GlobalUnlock(hClip)
        ENDIF
    ENDIF
    CloseClipboard()
    &&RETURN cUnicode
    &&cUnicode
   
        * 将UTF-16字符串转为UTF-8(用于文件输出)
    LOCAL nLen, nBufSize, cUTF8, nResult
    nLen = LEN(cUnicode)
    IF nLen = 0
       RETURN ""
    ENDIF
   
    DECLARE INTEGER WideCharToMultiByte IN kernel32;
        INTEGER CodePage, INTEGER dwFlags,;
        STRING cWideCharStr, INTEGER cchWideChar,;
        STRING @cMultiByteStr, INTEGER cchMultiByte,;
        STRING cDefaultChar, INTEGER @lpUsedDefaultChar
   
    * 获取所需缓冲区大小
    nBufSize = WideCharToMultiByte(65001, 0, cUnicode, nLen/2, "", 0, "", 0)
    IF nBufSize = 0
       RETURN ""
    ENDIF
   
    * 转换为UTF-8
    cUTF8 = REPLICATE(CHR(0), nBufSize)
    nResult = WideCharToMultiByte(65001, 0, cUnicode, nLen/2, @cUTF8, nBufSize, "", 0)
   
    thisform.olecontrol4.font.Name = "微软雅黑"
    thisform.olecontrol1.text=nResult
    thisform.olecontrol2.text=nLen
    thisform.olecontrol3.text=nBufSize
    thisform.olecontrol4.text=FILETOSTR("test.txt") &&cUTF8
以下是引用吹水佬在2025-8-18 22:43:38的发言:

不要用vfp字符串来处理输入输出。
可以用内存编码再通过内存地址传送。
或者用转义字符码,如用web控件时html的&#x....,ŋ的码是014b(两字节)。

#14
shschy7 天前 17:44
请问应该用何种语言描述,去求索得到完全音标的对应关系表信息(比如C58b 对应 ŋ)?
参考以上代码 使用 STRTOFILE(0h0073+0h0069+0hC58B,"oldtmp.txt") 实现“ s iŋ”存入oldtmp.txt
请问应该用何种语言描述,去求索得到完全音标的对应关系表信息(比如C58b  对应 ŋ)?
请问可以通过内存调用,实现将上述oldtmp.txt内容直接经过内存,到microsoft form textbox中显示?
还是只能编个html文件,到浏览器中显示?谢谢!

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

保存和读取好像也没问题
STRTOFILE(0hC58B,"tmp.txt")        && 保存后用记事本打开 ŋ
?STRCONV(FILETOSTR("tmp.txt"),15)  && 读取显示编码正常

#15
shschy7 天前 18:28
上网按照“请按表格方式提供每个国际音标对应的编码”搜到如下信息,
但 为   014B,好像与前次搜到的 “"ŋ":U+014B → UTF-8编码为0xC5 0x8B(双字节序列)”不一致
只有本站会员才能查看附件,请 登录



#16
shschy7 天前 18:29
只有本站会员才能查看附件,请 登录
#17
吹水佬7 天前 23:36
Windows带W的API和控件(EDITW)是支持Unicode,通常用STRCONV(UTF-8,12)就可以,但好像不支持这个C58B的UTF-8字符,不知是否与代码页有关。
用WEB控件试试
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2025-8-19 23:39编辑过]

#18
sych6 天前 08:37
这样修改即可
SYS(3101,65001)
thisform.Olecontrol1.text=STRCONV(filetostr("d:\unicode.text"),10)
SYS(3101,0)
#19
吹水佬6 天前 08:41
测试了一下,用windows api也可以用EDIT控件
有兴趣可以参考测试代码
只有本站会员才能查看附件,请 登录

程序代码:

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
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
    ShowWindow = 2
    hUEdit     = 0
    PROCEDURE Activate
        this.hUEdit = CreateUEdit(this.hWnd)
        SetFont(this.hUEdit, 24, "Arial")
        SetFocus(this.hUEdit)
        SetUEditText(this.hUEdit, STRCONV(0h7369C58B00,12))
    ENDPROC
    PROCEDURE Destroy
        DestroyUEdit(this.hUEdit)
        CLEAR EVENTS
    ENDPROC
ENDDEFINE


为测试方便用C写UEdit.dll给vfp调用
程序代码:

#define DLLIMPORT __declspec(dllexport)

#include <windows.h>

HINSTANCE hInstance = NULL;

DLLIMPORT void SetUEditText(HWND hWndUEdit, LPCWSTR pWSTR)
{
    SetWindowTextW(hWndUEdit, pWSTR);
}

DLLIMPORT void SetFont(HWND hWndUEdit, int cHeight, LPCSTR pFontName)
{
    HFONT hFont = CreateFont(cHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
                              OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
                              DEFAULT_PITCH, pFontName);
    SendMessage(hWndUEdit, WM_SETFONT, (WPARAM)hFont, TRUE);
}

DLLIMPORT void DestroyUEdit(HWND hWndUEdit)
{
    DestroyWindow(hWndUEdit);
}

DLLIMPORT HWND CreateUEdit(HWND hWndParent)
{
    return CreateWindowExW(
        0,                                                  // 无扩展样式
        L"EDIT",                                            // 预定义EDIT类名
        L"",                                                // 初始文本为空
        WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE,   // 样式
        10, 10, 100, 100,                                    // 位置和尺寸
        hWndParent,                                         // 父窗口句柄
        0,                                                  // 控件ID
        hInstance,                                          // 程序实例句柄
        NULL                                                // 无附加参数
        );

}

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
    switch(fdwReason)
    {
        case DLL_PROCESS_ATTACH:
        {
            hInstance = hinstDLL;
            break;
        }
    }
    return TRUE;
}


#20
shschy6 天前 08:46
请问这个editw控件在vfp9中工具-选项下设置吗?win10+vfp9上没发现。谢谢!
只有本站会员才能查看附件,请 登录
以下是引用吹水佬在2025-8-19 23:36:19的发言:

Windows带W的API和控件(EDITW)是支持Unicode,通常用STRCONV(UTF-8,12)就可以,但好像不支持这个C58B的UTF-8字符,不知是否与代码页有关。
用WEB控件试试

#21
shschy6 天前 08:53
这段代码尝试过,microsoft form textbox控件里还是乱码
STRTOFILE(0h0073+0h0069+0hC58B,"oldtmp.txt") &&存 sing的音标到 oldtmp.txt文档
SYS(3101,65001)
thisform.Olecontrol1.text=STRCONV(filetostr("oldtmp.txt"),10)
SYS(3101,0)

以下是引用sych在2025-8-20 08:37:08的发言:

这样修改即可
SYS(3101,65001)
thisform.Olecontrol1.text=STRCONV(filetostr("d:\unicode.text"),10)
SYS(3101,0)

#22
shschy6 天前 09:05
uedit.dll文件可以放在vfp9的default目录下吗?还需要做什么
只有本站会员才能查看附件,请 登录


以下是引用吹水佬在2025-8-20 08:41:48的发言:

测试了一下,用windows api也可以用EDIT控件
有兴趣可以参考测试代码


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
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
    ShowWindow = 2
    hUEdit     = 0
    PROCEDURE Activate
        this.hUEdit = CreateUEdit(this.hWnd)
        SetFont(this.hUEdit, 24, "Arial")
        SetFocus(this.hUEdit)
        SetUEditText(this.hUEdit, STRCONV(0h7369C58B00,12))
    ENDPROC
    PROCEDURE Destroy
        DestroyUEdit(this.hUEdit)
        CLEAR EVENTS
    ENDPROC
ENDDEFINE


为测试方便用C写UEdit.dll给vfp调用

#define DLLIMPORT __declspec(dllexport)

#include <windows.h>

HINSTANCE hInstance = NULL;

DLLIMPORT void SetUEditText(HWND hWndUEdit, LPCWSTR pWSTR)
{
    SetWindowTextW(hWndUEdit, pWSTR);
}

DLLIMPORT void SetFont(HWND hWndUEdit, int cHeight, LPCSTR pFontName)
{
    HFONT hFont = CreateFont(cHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
                              OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
                              DEFAULT_PITCH, pFontName);
    SendMessage(hWndUEdit, WM_SETFONT, (WPARAM)hFont, TRUE);
}

DLLIMPORT void DestroyUEdit(HWND hWndUEdit)
{
    DestroyWindow(hWndUEdit);
}

DLLIMPORT HWND CreateUEdit(HWND hWndParent)
{
    return CreateWindowExW(
        0,                                                  // 无扩展样式
        L"EDIT",                                            // 预定义EDIT类名
        L"",                                                // 初始文本为空
        WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE,   // 样式
        10, 10, 100, 100,                                    // 位置和尺寸
        hWndParent,                                         // 父窗口句柄
        0,                                                  // 控件ID
        hInstance,                                          // 程序实例句柄
        NULL                                                // 无附加参数
        );

}

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
    switch(fdwReason)
    {
        case DLL_PROCESS_ATTACH:
        {
            hInstance = hinstDLL;
            break;
        }
    }
    return TRUE;
}

#23
shschy6 天前 09:08
已将uedit.dll文件存放在vfp9的default目录下
只有本站会员才能查看附件,请 登录
#24
sych6 天前 10:17
回复 21楼 shschy
只需稍加修改即可
STRTOFILE(0h73+0h69+0hC58B,"oldtmp.txt") &&存 sing的音标到 oldtmp.txt文档
SYS(3101,65001)
thisform.Olecontrol1.text=filetostr("oldtmp.txt")
SYS(3101,0)

[此贴子已经被作者于2025-8-20 10:34编辑过]

#25
shschy6 天前 11:19
这段代码测试后无效,发现只要经过vfp函数等任何操作,音标的unicode码都是乱码,或者无显示
这段代码测试后无效,发现只要经过vfp函数等任何操作,音标的unicode码都是乱码,或者无显示

以下是引用sych在2025-8-20 10:17:49的发言:

只需稍加修改即可
STRTOFILE(0h73+0h69+0hC58B,"oldtmp.txt") &&存 sing的音标到 oldtmp.txt文档
SYS(3101,65001)
thisform.Olecontrol1.text=filetostr("oldtmp.txt")
SYS(3101,0)

#26
cssnet6 天前 14:29
https://www.
唉,每当看到有人讨论Unicode for VFP,我就会热心地贴这个帖子。
都快成月经帖啦。


#27
shschy6 天前 22:06
西风帖子已经看过了,只是没能学到解决方法。希望在平台上能解决。只是希望根据单词找到音标显示
您好!西风帖子已经看过了,只是没能学到解决方法。希望在平台上能解决。只是希望根据单词找到音标显示。原来的数据整理到类似如下csv文件中
只有本站会员才能查看附件,请 登录

以下是引用cssnet在2025-8-20 14:29:37的发言:

https://www.
唉,每当看到有人讨论Unicode for VFP,我就会热心地贴这个帖子。
都快成月经帖啦。

#28
吹水佬6 天前 23:00
只有本站会员才能查看附件,请 登录
#29
shschy6 天前 23:22
上层版主,能提供uedit.dll文件吗,帖子里的拷贝到写字板,另存为uedit.dll,但regsv 32 报错
上层版主,能提供uedit.dll和form1.scx文件吗,帖子里的拷贝到写字板,另存为uedit.dll,但regsv 32 报错
以下是引用吹水佬在2025-8-20 23:00:25的发言:

#30
吹水佬5 天前 07:25
以下是引用shschy在2025-8-20 23:22:52的发言:

上层版主,能提供uedit.dll和form1.scx文件吗,帖子里的拷贝到写字板,另存为uedit.dll,但regsv 32 报错

uedit.dll是api动态扩展库,不用注册,好像调用win32 api 一样用。
只是一个可行性测试,调用 windows api 来实现vfp对Unicode的有限支持,离实际应用还有很多细节的地方要考虑。
个人认为能用windwos api实现的就尽量不用第三方和东西,这样对以后的扩展和兼容性有保障。
只有本站会员才能查看附件,请 登录




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

#31
吹水佬5 天前 08:14
以下是引用cssnet在2025-8-20 14:29:37的发言:

https://www.
唉,每当看到有人讨论Unicode for VFP,我就会热心地贴这个帖子。
都快成月经帖啦。

月经是生命力的象征,月经不绝,新生不止。
#32
hsfisher5 天前 08:21
学习了
#33
吹水佬5 天前 08:22
搜了一下,讨论Unicode的主题贴不多,讨论得也不深入,真要vfp完美支持Unicode怕没那么简单或不可能完美。
只有本站会员才能查看附件,请 登录


#34
sych5 天前 08:53
能实现需求就可以了,显示、编辑,保存这个贴子里都实现了,应该需求最大的就是显示了
#35
shschy5 天前 09:43
谢谢!测试可以实现音标正常显示,只是这个uedit对象的尺寸、位置可以控制吗
of = CREATEOBJECT("formUEdit")
of.show()
SetUEditText(of.hUEdit, FILETOSTR("!!音标1.csv"))
&&以上可以改变显示内容

(1)但  UEdit.c  里没有发现 可改变 hUEdit宽高尺寸的地方


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


uedit.dll是api动态扩展库,不用注册,好像调用win32 api 一样用。
只是一个可行性测试,调用 windows api 来实现vfp对Unicode的有限支持,离实际应用还有很多细节的地方要考虑。
个人认为能用windwos api实现的就尽量不用第三方和东西,这样对以后的扩展和兼容性有保障。

#36
shschy5 天前 09:48
UEdit.c中 的 CreateUEdit 创建EDIT控件,修改尺寸为(400,850)保存后无变化?
DLLIMPORT HWND CreateUEdit(HWND hWndParent)
{
    return CreateWindowExW(
        0,                                                  // 无扩展样式
        L"EDIT",                                            // 预定义EDIT类名
        L"",                                                // 初始文本为空
        WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE,   // 样式
        10, 10, 400, 850,                                    // 位置和尺寸
        hWndParent,                                         // 父窗口句柄
        0,                                                  // 控件ID
        hInstance,                                          // 程序实例句柄
        NULL                                                // 无附加参数
        );

}
#37
吹水佬5 天前 10:54
回复 36楼 shschy
这是C源码,要用C编译器编译生成DLL。
#38
sych5 天前 10:58
SetWindowPos可以实现,建议不要只是照抄代码,尝试着花点时间去理解大佬的代码是怎么实现的
我也是小白,仅当建议
#39
吹水佬5 天前 10:59
以下是引用shschy在2025-8-21 09:43:52的发言

(1)但  UEdit.c  里没有发现 可改变 hUEdit宽高尺寸的地方

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

#40
sych5 天前 11:03
Microsoft有Forms.TextBox、Forms.Label,哪个是Forms.EditBox控件?
#41
吹水佬5 天前 11:10
以下是引用sych在2025-8-21 10:58:22的发言:

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

是的,其实全是调用win32API,只是为省时间测试才用C写,只用vfp写应该也可以。
只要有了控件句柄,用windows api可以设置控件的属性。
#42
shschy5 天前 11:49
您好!您发的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语言编程可参考看看有无可用之处。

#43
iswith5 天前 14:50
在vfp9 DBF或 MSSQL存utf8 Base64 格式,然后把Base64用支持的Unicode API转成Unicode 16显示就可以了,即可存也可以看
#44
吹水佬5 天前 15:57
回复 42楼 shschy
如果只作显示用,增加设置编辑框的位置和大小、字体的名称和大小颜色、滚动条等。
如果要作编辑数据用,要考虑的问题不少,如焦点问题,鼠标键盘事件等。
#45
shschy5 天前 19:59
只作显示用,增加设置编辑框的位置,大小、字体的名称和大小颜色、滚动条即可。
只作显示用,增加设置编辑框的位置,大小、字体的名称和大小颜色、滚动条即可。
谢谢
以下是引用吹水佬在2025-8-21 15:57:46的发言:

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

#46
吹水佬5 天前 22:18
抽空再试试吧,现在要带小孩有点困身。

#47
shschy5 天前 23:07
感谢支持,只要先初始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的发言:

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

#48
吹水佬4 天前 06:59
以下是引用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

只有本站会员才能查看附件,请 登录


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

#49
吹水佬4 天前 07:15
以下是引用shschy在2025-8-21 23:07:46的发言:

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

文件存取通常是按字节来处理,看到从文件取出来的字符乱码,有可能那只是“看到”的而并不是“取到”的字符本身,也就是说通过输出的设备不能真实还原字符,如从文件取出来的“ŋ”显示输出时变“?”了。
FILETOSTR()是较高级的文件处理函数,无需理会文件句柄,他是直接将整个文件完整载入到内存。
#50
shschy4 天前 07:51
新rar下载测试,可使用。感谢一早解答
新rar下载测试,可使用。感谢一早解答
以下是引用吹水佬在2025-8-22 07:15:48的发言:


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

#51
shschy4 天前 08:45
请问在设计scx中加rich text控件,还可已采取类似SetUEditText(this.hUEdit, FILETOSTR(""))修
方法一:采用prg创建form对象后,可以容易获取创建对象(如hwnd,this.hUEdit),调用SetUEditText()
方法二:如果采取表单设计器,添加Actives类rich text控件 并保存,以后do form xxx 后,还可以获取
        form_xxx里rich text对象,调用类似SetUEditText()来改变现实内容吗?
不知方法二可以实现吗,还是只能从方法一入手?就是想知道类似SetUEditText()可以实现 方法二中通用吗
谢谢!

只有本站会员才能查看附件,请 登录

以下是引用吹水佬在2025-8-22 07:15:48的发言:


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

12