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

从数据库获取数据?那就好办了
页: 1 [2] 3
查看完整版本: [已解决]关于ListView控件信息显示长度的问题