sensel 发表于 2009-4-16 20:14:45

如何获取字符串的显示占用长度?

au3内部是基于UTF16的,每个英文字母和中文汉字长度都算1位。例如,StringLen("中文.txt") 的结果是6。
现在的问题是,我创建了一个Label控件,要在指定位置手动换行,但是一个汉字在显示宽度上是两个英文字母的长度。那么,如何才能得到字符串的真正显示长度?
需要:"中文.txt"的显示长度是8,"Eng.txt"的显示长度是7,"中文汉字"的显示长度是8。

[ 本帖最后由 sensel 于 2009-4-16 21:38 编辑 ]

pusofalse 发表于 2009-4-16 20:29:07

Func _StrLen($sString, $iAnsi = True)
        Local $iLength, $sFunction, $sType

        If $iAnsi Then
                $sType = "str"
                $sFunction = "lstrlen"
        Else
                $sType = "wstr"
                $sFunction = "lstrlenW"
        EndIf
        $iLength = DllCall("kernel32.dll", "int", $sFunction, $sType, $sString)
        Return $iLength
EndFunc        ;==>_StrLen()

sensel 发表于 2009-4-16 21:34:49

问题解决,谢谢!pusofalse兄帮我不少啊。
看完代码才想到,我的提问杂七杂八废话一堆,其实需求只是一个:如何获取字符串的ANSI编码长度。
页: [1]
查看完整版本: 如何获取字符串的显示占用长度?