superpangya 发表于 2010-4-16 13:57:24

:face (8):
对,从数据库获取数据, 但上面的代码贴错了(上面的是我改过的),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
               

      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 & "|"

      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#是按照楼上朋友的方法改的,为什么列宽越来越窄了,问题出在哪了?

dtooboss 发表于 2010-4-16 14:54:32

本帖最后由 dtooboss 于 2010-4-16 14:59 编辑

对,从数据库获取数据, 但上面的代码贴错了(上面的是我改过的),你看看源码吧,在15#

还有,26# ...
superpangya 发表于 2010-4-16 13:57 http://www.autoitx.com/images/common/back.gif

你的表单宽度是像素,而字串长度是字串个数,所以需要个数乘以字体大小才是像素宽度。我帮你改了下这个函数,字符大小我取了 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

        GUICtrlDelete($ListView1)
        Dim $k, $s = '', $c
        For $c = 0 To $w - 1
                $y = StringSplit($arr[$c + 1], " ")
                $k = $k & $y & ","
                $s = $s & $y & "|"
        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

superpangya 发表于 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 )
但是用在其它地方也应该不错的..呵呵.

superpangya 发表于 2010-4-16 15:17:35

:face (1): 谢谢楼上各位的热情帮助....就这样吧,封贴了..

pusofalse 发表于 2010-4-16 19:47:34

计算COLUMN中字符的数量,一个半角字符大概占7像素左右。
页: 1 2 [3]
查看完整版本: [已解决]关于ListView控件信息显示长度的问题