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

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

 火.. [复制链接]
发表于 2010-4-14 21:45:59 | 显示全部楼层
回复 15# superpangya


    12楼的并不是设置宽度的问题 我是回答你11楼的问题 。。拓展样式你自己找找吧。。
 楼主| 发表于 2010-4-15 07:50:41 | 显示全部楼层
回复 16# nmgwddj

$LVS_SHOWSELALWAYS   配合
    _GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)) 一样没有效果,不知道是不是我写的不对, 反正现在已经用别的方法替代了(这方法只在我的代码中可行吧),我再好好看看帮助吧..
发表于 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)
设置固定宽度。

评分

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

查看全部评分

 楼主| 发表于 2010-4-15 12:40:30 | 显示全部楼层
因为后期一定还会加入很多其它的表,所以固定宽度会有影响(加一个表设定一次宽度)
我的源代码在#15, 我现在用:GUICtrlCreateListView("a | b | c | d |", 100, 100, 100, 100,$LVS_SHOWSELALWAYS) 取得同样的效果, 但和我最初的想法差太多......
发表于 2010-4-16 03:18:06 | 显示全部楼层
auto也不行?
发表于 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
 楼主| 发表于 2010-4-16 08:06:52 | 显示全部楼层
回复 20# netegg


    auto是参数吗?帮助里找不到,怎么用啊?
 楼主| 发表于 2010-4-16 08:17:21 | 显示全部楼层
回复 21# dtooboss


    运行代码,在第15行显示"解析函数call错误",没成功,但是我懂你的意思了,只是,
$numlen = StringLen("abcdefghigklmnopqrstuvwxyz" & _

                        "abcdefghigklmnopqrstuvwxyz" & _

                        "abcdefghigklmnopqrstuvwxyz" & _

                        "abcdefghigklmnopqrstuvwxyz" & _

                        "abcdefghigklmnopqrstuvwxyz" & _

                        "abcdefghigklmnopqrstuvwxyz" & _

                        "abcdefghigklmnopqrstuvwxyz" & _

                        "abcdefghigklmnopqrstuvwxyz")
后面的 "abcdefghigklmnopqrstuvwxyz" & _ 是什么意思?
   帮助里 StringLen ( "字符串" ) ,我写应该是StringLen ( "字段名" )......
发表于 2010-4-16 08:18:54 | 显示全部楼层
你想达到的效果是什么样,数据事先给定,还是随输入扩大
发表于 2010-4-16 08:28:01 | 显示全部楼层
回复 23# superpangya

& _ 是连接字,表示下面一行和本行是同一行

评分

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

查看全部评分

 楼主| 发表于 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,列表头会变小,这个是对的,但是为什么会这样?
按预先的想法应该是计算字段名长度后更改列表头宽度正好适应呀?
 楼主| 发表于 2010-4-16 10:08:59 | 显示全部楼层
你想达到的效果是什么样,数据事先给定,还是随输入扩大
netegg 发表于 2010-4-16 08:18



   
应该是后者,如图所示,点左边列表的表名,右边显示相应的内容..
我的源码的数据库在15#
我最初的想法是给listview加个扩展样式,让它实现列宽自动适应,现在看来,不可能了,那有什么最简单的办法实现相同的效果呢?


21# 也能达到相同的效果,但为什么和预想来不一样,列宽越弄越窄?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-4-16 10:35:47 | 显示全部楼层
本帖最后由 netegg 于 2010-4-16 10:43 编辑

输入结束的时候需要什么操作确认
 楼主| 发表于 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[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=""
                        
                        
                        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|....................
发表于 2010-4-16 12:54:30 | 显示全部楼层
从数据库获取数据?那就好办了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-2 12:01 , Processed in 0.086934 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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