nmgwddj
发表于 2010-4-14 21:45:59
回复 15# superpangya
12楼的并不是设置宽度的问题 我是回答你11楼的问题 。。拓展样式你自己找找吧。。
superpangya
发表于 2010-4-15 07:50:41
回复 16# nmgwddj
$LVS_SHOWSELALWAYS 配合
_GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)) 一样没有效果,不知道是不是我写的不对, 反正现在已经用别的方法替代了(这方法只在我的代码中可行吧),我再好好看看帮助吧..
nmgwddj
发表于 2010-4-15 10:12:20
$ListView1 = GUICtrlCreateListView("部件名称|部件型号|序列号 |保质限期 |保修备注 ", 1, 35, 377, 185)
_GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))上边这个是设置空间的拓展样式。(有网格)
对于你说的列表头动态适应大小。我还不太清楚
建议用GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 215)设置固定宽度。
superpangya
发表于 2010-4-15 12:40:30
因为后期一定还会加入很多其它的表,所以固定宽度会有影响(加一个表设定一次宽度)
我的源代码在#15, 我现在用:GUICtrlCreateListView("a | b | c | d |", 100, 100, 100, 100,$LVS_SHOWSELALWAYS) 取得同样的效果, 但和我最初的想法差太多......
netegg
发表于 2010-4-16 03:18:06
auto也不行?
dtooboss
发表于 2010-4-16 04:02:19
本帖最后由 dtooboss 于 2010-4-16 05:18 编辑
_GUICtrlListView_SetColumn($ListView1, 0, "表名",$numlen, 1)
_GUICtrlListView_SetColumnWidth($ListView1, $x, $numlen)
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
Opt('MustDeclareVars', 1)
$Debug_LV = False
_Main()
Func _Main()
Local $hListView, $numlen
GUICreate("ListView Set Column Width", 900, 300)
$hListView = GUICtrlCreateListView("Column 1|Column 2|Column 3|Column 4", 2, 2, 900, 268)
GUISetState()
; Change column 1 width
MsgBox(4160, "Information", "Column 1 Width: " & _GUICtrlListView_GetColumnWidth($hListView, 0))
$numlen = StringLen("abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz")
For $n = 0 To 3 Step 1
_GUICtrlListView_SetColumnWidth($hListView, $n, $numlen)
MsgBox(4160, "Information", "Column " & $n + 1 & " Width: " & _GUICtrlListView_GetColumnWidth($hListView, 0))
Next
; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main
superpangya
发表于 2010-4-16 08:06:52
回复 20# netegg
auto是参数吗?帮助里找不到,怎么用啊?
superpangya
发表于 2010-4-16 08:17:21
回复 21# dtooboss
运行代码,在第15行显示"解析函数call错误",没成功,但是我懂你的意思了,只是,$numlen = StringLen("abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz" & _
"abcdefghigklmnopqrstuvwxyz")后面的 "abcdefghigklmnopqrstuvwxyz" & _ 是什么意思?
帮助里 StringLen ( "字符串" ) ,我写应该是StringLen ( "字段名" )......
netegg
发表于 2010-4-16 08:18:54
你想达到的效果是什么样,数据事先给定,还是随输入扩大
netegg
发表于 2010-4-16 08:28:01
回复 23# superpangya
& _ 是连接字,表示下面一行和本行是同一行
superpangya
发表于 2010-4-16 08:33:34
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
Opt('MustDeclareVars', 1)
$Debug_LV = False
_Main()
Func _Main()
Local $hListView, $numlen
GUICreate("ListView Set Column Width", 900, 300)
$hListView = GUICtrlCreateListView(" | | | ", 2, 2, 900, 268)
GUICtrlSetData($hListView,"Column 1|Column 2|Column 3|Column 4|")
GUISetState()
; Change column 1 width
MsgBox(4160, "Information", "Column 1 Width: " & _GUICtrlListView_GetColumnWidth($hListView, 0))
$numlen = StringLen("Column 1")
MsgBox(4160, "Information",$numlen)
For $n = 0 To 3 Step 1
_GUICtrlListView_SetColumnWidth($hListView, $n, $numlen)
MsgBox(4160, "Information", "Column " & $n + 1 & " Width: " & _GUICtrlListView_GetColumnWidth($hListView, $n))
Next
; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main一开始为36,计算字段$numlen = StringLen("Column 1") 为8,列表头会变小,这个是对的,但是为什么会这样?
按预先的想法应该是计算字段名长度后更改列表头宽度正好适应呀?
superpangya
发表于 2010-4-16 10:08:59
你想达到的效果是什么样,数据事先给定,还是随输入扩大
netegg 发表于 2010-4-16 08:18 http://www.autoitx.com/images/common/back.gif
应该是后者,如图所示,点左边列表的表名,右边显示相应的内容..
我的源码的数据库在15#
我最初的想法是给listview加个扩展样式,让它实现列宽自动适应,现在看来,不可能了,那有什么最简单的办法实现相同的效果呢?
21# 也能达到相同的效果,但为什么和预想来不一样,列宽越弄越窄?
netegg
发表于 2010-4-16 10:35:47
本帖最后由 netegg 于 2010-4-16 10:43 编辑
输入结束的时候需要什么操作确认
superpangya
发表于 2010-4-16 11:51:53
回复 28# netegg
输入结束?
点击左列表,右边显示相应内容,这个通过下面的函数实现:Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Case 左击
du($tabname)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=""
GUICtrlSendMsg($ListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
$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
;GUICtrlSetData($Label7, "共找到" & $i & "个和 " & GUICtrlRead($Input1) & " 相关的记录,点击车次可查看详细信息,双击查看该车次过站情况")
EndFunc其中$s是字段a|b|c|d|....................
netegg
发表于 2010-4-16 12:54:30
从数据库获取数据?那就好办了