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像素左右。