找回密码
 加入
搜索
查看: 8461|回复: 19

[AU3基础] [已解决]请大家帮忙看看这个字符串结构应如何修改,谢谢!!!

 火.. [复制链接]
发表于 2012-4-18 19:00:38 | 显示全部楼层 |阅读模式
本帖最后由 131738 于 2012-4-23 20:47 编辑

由于没看懂原脚本,现在看来这个属于无意义提问!关贴!!!具体原因看 20 楼


包含文件定义一个文本字符串结构:
; Name...........: $tagSETTEXTEX
; Description ...: 设置文本使用指定代码页, 文本是否会取代所有的文字,在控制或只是选择, 以及是否要保存撤消状态
; Fields ........: flags    - 选项标志.可以是下列标志.
;                  |  $ST_DEFAULT   - 删除 Undo 堆栈,丢弃 RTF 格式,替换所有的文字. (好像是新文本覆盖旧文本行 )
;                  |  $ST_KEEPUNDO  - 保持撤消堆栈.
;                  |  $ST_SELECTION - 替代的选择保持富文本格式.
;                  codepage - 翻译中使用的代码页. $CP_ACP 为 ANSI 代码页,  1200 为 Unicode.
; Author ........: Gary Frost (gafrost)
; Remarks .......:
; ==========================================================
Global Const $tagSETTEXTEX = "dword flags;uint codepage"
脚本这样使用这个结构向富文本编辑控件写入字符串:
Func _GUICtrlRichEdit_AppendTextUTF8($hWnd, $sText)
        If Not IsHWnd($hWnd) Then Return SetError(101, 0, False)
        _GUICtrlRichEdit_SetSel($hWnd, -1, -1) ; 设置选择字符位置 -> 到文件尾
        Local $tSetText = DllStructCreate($tagSETTEXTEX)  ; 创建结构
        DllStructSetData($tSetText, 1, $ST_SELECTION)      ; 设置结构成员 1 的值
        DllStructSetData($tSetText, 2, 65001)                     ; 设置结构成员 2 的值
        Local $iRet = _SendMessage($hWnd, $EM_SETTEXTEX, DllStructGetPtr($tSetText), BinaryToString(StringToBinary($sText, 4), 1), 0, "ptr", "STR")
        If Not $iRet Then Return SetError(700, 0, False)
        Return True
EndFunc   ;==>_GUICtrlRichEdit_AppendTextUTF8
问题:现在富文本编辑控件显示中英混合字符串时,出现乱码:
下图中下面部分英文的显示效果,上半部分为英文替换为中文的显示效果

先谢谢高手大家!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-4-18 19:29:32 | 显示全部楼层
本帖最后由 netegg 于 2012-4-18 19:32 编辑

DllStructSetData($tSetText, 2, 65001)改成
DllStructSetData($tSetText, 2, 1200)行不行?
也不好说,暂且先用unicode试试吧
 楼主| 发表于 2012-4-18 20:18:40 | 显示全部楼层
DllStructSetData($tSetText, 2, 65001)改成
DllStructSetData($tSetText, 2, 1200)行不行?
也不好说,暂 ...
netegg 发表于 2012-4-18 19:29


谢谢 1200 试过了的,还乱的很写。。。。
 楼主| 发表于 2012-4-19 22:29:40 | 显示全部楼层
再顶起求教
 楼主| 发表于 2012-4-22 19:58:28 | 显示全部楼层
再顶起求教
发表于 2012-4-22 21:26:25 | 显示全部楼层
回复 5# 131738
不懂,帮顶,等高手出现。
发表于 2012-4-22 21:42:16 | 显示全部楼层
回复 6# xms77

老实说, 我安装 3.3.9.? 中文版后,
用 ConSoleWrite 调试时, 如果是输出中文字符, 就发现,
十次中有二到三次, 它会输出乱码, 甚至同时输出一些无意义的关键字!

还发现 ToolTip 函数,  它会吃掉半个中文? 必须在中文前加几个空格, 才能输出完整的中文字符!
我都怀疑是新版本AU3汉化后存在的BUG, 现在比较少用新版本.
发表于 2012-4-22 21:59:20 | 显示全部楼层
回复 7# user3000
一直在用3.3.7.15,用着挺稳定,懒得更新了,也不知道新版本加了多少新功能,好像不多,也用不到!
发表于 2012-4-22 22:06:01 | 显示全部楼层
回复 7# user3000


    不单这个版本。我用过很多个版本,输出中文都会夹带一些乱码。。
发表于 2012-4-23 06:38:57 | 显示全部楼层
包含文件定义一个文本字符串结构:脚本这样使用这个结构向富文本编辑控件写入字符串:问题:现在富文本编辑 ...
131738 发表于 2012-4-18 19:00



    不如给个他人也可以直接运行的代码,并在这代码中显示出你的问题来
这样大家找问题也快。
 楼主| 发表于 2012-4-23 14:03:54 | 显示全部楼层
不如给个他人也可以直接运行的代码,并在这代码中显示出你的问题来
这样大家找问题也快。
happytc 发表于 2012-4-23 06:38


谢谢!
老外的一个大型脚本,较复杂,水平有限,抠不出与此有关的完整代码.....
发表于 2012-4-23 14:20:44 | 显示全部楼层
谢谢!
老外的一个大型脚本,较复杂,水平有限,抠不出与此有关的完整代码.....
131738 发表于 2012-4-23 14:03


关键别人不能重现你说的呀
既然是老外的脚本,估计不用保密吧,那就直接把这个脚本全发上来不就可以了?然后说说你的操作让问题重现
如下面代码,我这里运行,看起来都非常正常

#include <GuiRichEdit.au3>


$hGui = GUICreate("Test", 300, 300)
$hRichEdit = _GUICtrlRichEdit_Create($hGui, "Test", 10, 10, 200, 200)
_GUICtrlRichEdit_AppendTextUTF8($hRichEdit, "我的My测试Test")
GUISetState()

While True
        If GUIGetMsg() = -3 Then Exit
WEnd


Func _GUICtrlRichEdit_AppendTextUTF8($hWnd, $sText)
        If Not IsHWnd($hWnd) Then Return SetError(101, 0, False)
        _GUICtrlRichEdit_SetSel($hWnd, -1, -1) ; 设置选择字符位置 -> 到文件尾
        Local $tSetText = DllStructCreate($tagSETTEXTEX)  ; 创建结构
        DllStructSetData($tSetText, 1, $ST_SELECTION)      ; 设置结构成员 1 的值
        DllStructSetData($tSetText, 2, 65001)                     ; 设置结构成员 2 的值
        Local $iRet = _SendMessage($hWnd, $EM_SETTEXTEX, DllStructGetPtr($tSetText), BinaryToString(StringToBinary($sText, 4), 1), 0, "ptr", "STR")
        If Not $iRet Then Return SetError(700, 0, False)
        Return True
EndFunc   ;==>_GUICtrlRichEdit_AppendTextUTF8
发表于 2012-4-23 14:45:38 | 显示全部楼层
回复 12# happytc


    你这代码不行。 还是出错的。   我用这个字符串就出错。  “我的My测8.123alkasdlf123我leak解放路卡的说法试Test”
发表于 2012-4-23 15:02:45 | 显示全部楼层
本帖最后由 lanfengc 于 2012-4-23 15:05 编辑

回复 1# 131738


    修改这两句完成测试。

        DllStructSetData($tSetText, 2, $CP_ACP)                     ; 设置结构成员 2 的值
        Local $iRet = _SendMessage($hWnd, $EM_SETTEXTEX, DllStructGetPtr($tSetText),BinaryToString(StringToBinary($sText, 4), 4), 0, "ptr", "STR")


你开头的文件说的很清楚了。 用ANSI是 $CP_ACP 这个变量
 楼主| 发表于 2012-4-23 18:04:13 | 显示全部楼层
关键别人不能重现你说的呀
既然是老外的脚本,估计不用保密吧,那就直接把这个脚本全发上来不就可以了 ...
happytc 发表于 2012-4-23 14:20

代码就是这贴的链接地址,
http://www.autoitx.com/forum.php ... 518&fromuid=161
源码有德,英混合字串,以完成汉化!但就是这个汉英混合文字信息
输出到富文本框乱码!
源文件结构有 42 个 au3 文件,这个问题相关的代码不在一个 au3 中,所以贴上来有点麻烦!
谢谢你的代码!我看看。。。

评分

参与人数 1金钱 +10 贡献 +5 收起 理由
user3000 + 10 + 5 前辈又在弄造福大伙的大事了!辛苦了!

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-30 13:17 , Processed in 0.086219 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表