找回密码
 加入
搜索
楼主: superpangya

[AU3基础] [已解决]关于ListView控件信息显示长度的问题

 火.. [复制链接]
 楼主| 发表于 2010-4-16 13:57:24 | 显示全部楼层

对,从数据库获取数据, 但上面的代码贴错了(上面的是我改过的),
Func du1($tabname)

        $addfld = ObjCreate("ADODB.Connection")

        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)

        $RS = ObjCreate("ADODB.Recordset")

        $RS.ActiveConnection = $addfld

        $RS.Open("Select " & $T & " From " & $tabmain & " where name = '" & $tabname & "'")

        $temp = StringStripWS($RS.Fields(2).value, 2) ;删去字符串中的所有"空白符" 1 char,2 char,3 int,4 char
                

        $arr = StringSplit($temp, ",") ;以指定分隔符把字符串拆分成若干子串

        $w = $arr[0]
                

        GUICtrlSendMsg($ListView1, $LVM_DELETEALLITEMS,0, 0)
                

        $addfld = ObjCreate("ADODB.Connection")

        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)

        $RS = ObjCreate("ADODB.Recordset")

        $RS.ActiveConnection = $addfld

        $RS.Open("Select " & $T & " From " & $tabname)

        Dim $n
                

        While Not $RS.eof And Not $RS.bof

                If @error = 1 Then ExitLoop

                For $i = 0 To $w

                        ;MsgBox(0,"",StringStripWS($RS.Fields ($i).value,2))

                        $n = $n & StringStripWS($RS.Fields($i).value, 2) & "|"

                Next

                ;MsgBox(0,"",StringTrimRight ($n, 1))
                                
                                

                GUICtrlCreateListViewItem(StringTrimRight($n, 1), $ListView1)

                $RS.movenext

                $n = ""

        WEnd

        $RS.close

        $addfld.Close

        Dim $strs = "ID|"

        For $x = 1 To $w

                $y = StringSplit($arr[$x], " ")

                $strs = $strs & $y[1] & "|"

        Next
                
                ;_GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES,$LVS_SHOWSELALWAYS))

        GUICtrlSetData($ListView1, "  |     |     |     |     |     |     |     |     |     |")

        GUICtrlSetData($ListView1, $strs)
                

EndFunc   ;==>du
你看看源码吧,在15#

还有,26#是按照楼上朋友的方法改的,为什么列宽越来越窄了,问题出在哪了?
发表于 2010-4-16 14:54:32 | 显示全部楼层
本帖最后由 dtooboss 于 2010-4-16 14:59 编辑
对,从数据库获取数据, 但上面的代码贴错了(上面的是我改过的),你看看源码吧,在15#

还有,26# ...
superpangya 发表于 2010-4-16 13:57


你的表单宽度是像素,而字串长度是字串个数,所以需要个数乘以字体大小才是像素宽度。我帮你改了下这个函数,字符大小我取了 9 。
Func du($tabname)
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
        $RS = ObjCreate("ADODB.Recordset")
        $RS.ActiveConnection = $addfld
        $RS.Open("Select " & $T & " From " & $tabmain & " where name = '" & $tabname & "'")
        $temp = StringStripWS($RS.Fields(2).value, 2) ;删去字符串中的所有"空白符" 1 char,2 char,3 int,4 char
        $arr = StringSplit($temp, ",") ;以指定分隔符把字符串拆分成若干子串
        $w = $arr[0]

        GUICtrlDelete($ListView1)
        Dim $k, $s = '', $c
        For $c = 0 To $w - 1
                $y = StringSplit($arr[$c + 1], " ")
                $k = $k & $y[1] & ","
                $s = $s & $y[1] & "|"
        Next
        $ListView1 = GUICtrlCreateListView("id|" & $s & "", 155, 15, 635, 300)
        $s = ""
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
        $RS = ObjCreate("ADODB.Recordset")
        $RS.ActiveConnection = $addfld
        $RS.Open("Select " & $T & " From " & $tabname)


        Dim $n

        While Not $RS.eof And Not $RS.bof
                If @error = 1 Then ExitLoop
                For $i = 0 To $w
                        $numlen = StringLen(StringStripWS($RS.Fields($i).value, 2));得到目前的字串数
                        If $numlen * 9 > _GUICtrlListView_GetColumnWidth($ListView1, $i) Then ; 如果字串数乘以字体大小的宽度大于目前的宽度则
                                _GUICtrlListView_SetColumnWidth($ListView1, $i, $numlen * 9) ; 设置目前的宽度为适合字串的宽度
                        EndIf;结束判断
                        $n = $n & StringStripWS($RS.Fields($i).value, 2) & "|"
                Next

                GUICtrlCreateListViewItem(StringTrimRight($n, 1), $ListView1)
                $RS.movenext
                $n = ""
        WEnd

        $RS.close
        $addfld.Close
EndFunc   ;==>du

评分

参与人数 1金钱 +20 收起 理由
superpangya + 20

查看全部评分

 楼主| 发表于 2010-4-16 15:13:44 | 显示全部楼层
回复 32# dtooboss


    谢谢啊,终于知道26#的问题出在哪了..

ps:
$numlen = StringLen(StringStripWS($RS.Fields($i).value, 2));得到目前的字串数

                        If $numlen * 9 > _GUICtrlListView_GetColumnWidth($ListView1, $i) Then ; 如果字串数乘以字体大小的宽度大于目前的宽度则

                                _GUICtrlListView_SetColumnWidth($ListView1, $i, $numlen * 9) ; 设置目前的宽度为适合字串的宽度

                        EndIf;结束判断
这段代码用在这没有效果,我想是因为已经有了下面这句吧
$ListView1 = GUICtrlCreateListView("id|"&$s&"", 155, 15, 635, 300 )
但是用在其它地方也应该不错的..呵呵.
 楼主| 发表于 2010-4-16 15:17:35 | 显示全部楼层
谢谢楼上各位的热情帮助....就这样吧,封贴了..
发表于 2010-4-16 19:47:34 | 显示全部楼层
计算COLUMN中字符的数量,一个半角字符大概占7像素左右。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-13 00:09 , Processed in 0.082033 second(s), 16 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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