joint 发表于 2017-6-24 17:37:27

_ArrayDisplay的帮助文档感觉太混乱了。 已解决

本帖最后由 joint 于 2017-6-28 14:36 编辑

_ArrayDisplay
在列表视图中显示 1D 或 2D 数组.


#include <Array.au3>
_ArrayDisplay ( Const ByRef $aArray [, $sTitle = "ArrayDisplay" [, $sArrayRange = "" [, $iFlags = 0 [, $vUser_Separator = Default [, $sHeader = Default [, $iMax_ColWidth = Default [, $iAlt_Color = Default [, $hUser_Function = ""]]]]]]]] )


参 数
$aArray 目标数组
$sTitle [可选] 对话框标题. 默认 = "显示数组"(译注: 在包含文件已汉化时).
$sArrayRange [可选] 显示的行/列范围. 默认值 = 整个数组 (详细信息见下文).
$iFlags [可选] 确定 UDF 选项. 将所需的值相加 - 默认值 = 0.
1 - 交换数组
列文本对齐方式: 2 (右对齐) 或 4 (居中对齐) (默认 = 左对齐)
8 - verbose = 大型数组处理过程中发生错误时显示 MsgBox 提示错误并闪屏
16 - 仅显示 '复制' 按钮
32 - 不显示按钮
64 - No 'Row' column displayed
$vUser_Separator [可选] 设置复制数据到剪贴板的列选项.
    字符 = 列之间的分隔符.
    数字 = 设置列宽 - 较长的项目将被截断.
    Default(默认值) = 当前的分隔符字符 (通常为 "|").
$sHeader [可选] 列标题 (标题由当前分隔符 - 通常为 "|" 分隔). 关键字 Default(默认值) 见备注.
$iMax_Colwidth [可选] 列表视图的列最大宽度. 关键字 Default(默认值) = 350 像素.
$iAlt_Color [可选] 列表视图交替行的背景颜色. 关键字 Default(默认值) = 所有行同一颜色.
$hUser_Function [可选] 用户定义的运行函数. 默认值 = "" 无运行函数. 见备注.

返 回 值
成功: 返回 1
失败: 返回 0, @error 设置为下列值:
@error: 1 - $aArray 不是数组
2 - $aArray 为多维数组 (仅适用 1D 与 2D 数组)

备 注
如果函数传递超过 2 个维度的非数组变量或数组, 函数返回一个错误, 并且脚本将继续执行.
如果已设置 $iFlags 参数为 "8 - verbose", 则在返回错误之前, MsgBox 将提示立即退出脚本, 或返回正常错误并继续脚本.

只能显示 65525 行的数组 - 这是受 AutoIt GUI 中控件显示总数的限制 - 列数也被限制为 250 列.
如果用户尝试显示的数组大于这些限制, "*" 将被添加到截断的维度值, 并将显示为红色文本.
注意: 使用 $iArrayRange 允许设置显示的元素可以大于显示限制, 即将数组分为若干个显示部分.

$sArrayRange 参数的语法如下所示:

    "7" - 显示 0-7 行的所有列
    "7:" - 显示 7 到结束行的所有列
    "|7" - 显示 0-7 列的所有行
    "|7:" - 显示 7-结束列的所有行
    "7|7" - 显示 0-7 行和 0-7 列
    "5:7" - 显示 5-7 行的所有列
    "|5:7" - 显示 5-7 列的所有行
    "7|5:7" - 显示 0-7 行和 5-7 列
    "5:7|7" - 显示 5-7 行和 0-7 列
    "5:7|5:7" - 显示 5-7 行和 5-7 列

对于 1D 数组将忽略任何列的值.

$sHeader 列标题 (以当前分隔符分隔) 将用于多列标题.
如果未设置, 或设置的标题不足, 则默认使用一维数组标题为 "Row|Col0"; 二维数组标题为 "Row|Col0|Col1|...|Col n".

对话框的底部有 4 个按钮: (译注 - 按钮文本设定为包含文件已汉化)

- 复制数据与列标题 - 将数组或选定行复制到剪贴板, 并添加完整的标题和行标识.

- 仅复制数据 - 将数组或选定行复制到剪贴板, 没有标题或行标识.

- 运行用户函数 - 运行 $sUser_Function 定义的用户函数.
    此函数是完全独立的 UDF, 并且必须由用户创建, 和编码接受 2 个参数:
    完整数组和一维数组选定行索引, 为元素计数.
    如果没有指定函数则该按钮被禁用.

- 退出脚本 - 立即退出脚本.

The $iFlags 参数隐藏部分或所有按钮

如果显示所有按钮, 则数组维数会显示在左下角.
如出现以下情况则显示红色文本: 行/列截断, 数组换位, 或只显示一个范围的元素 - 工具提示显示发生的特定项

当显示的数组超过 10000 个元素, 并且 $iFlags 设置为 "8 - verbose", 初始处理过程将显示启动对话框.
当显示超过 10000 个元素的数组时使用"复制数据"按钮, 也将显示一个类似的对话框. 这种情况下应考虑使用 "用户函数" 存储供以后处理的数组.


函 数 示 例

复制到剪贴板 #include <Array.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()

    ; 创建一维数组并显示.
    Local $aArray_1D = ["项目 0", "项目 1", "这个项目 2 的文本较长, 将扩展显示列宽度", "项目 3", "项目 4"]

    _ArrayDisplay($aArray_1D, "1D 显示")
    _ArrayDisplay($aArray_1D, "1D 显示调换 - 仅有 <复制> 按钮", Default, 1 + 16) ; 仅显示 <复制> 按钮

    ; 创建二维数组并显示.
    Local $aArray_2D
    For $i = 0 To UBound($aArray_2D) - 1
      For $j = 0 To UBound($aArray_2D, 2) - 1
            $aArray_2D[$i][$j] = "项目 " & StringFormat("%02i", $i) & StringFormat("%02i", $j)
      Next
    Next

    _ArrayDisplay($aArray_2D, "2D 显示") ; 注意列被截断
    _ArrayDisplay($aArray_2D, "2D 显示换位", Default, 1) ; 注意显示了所有数组元素

    ReDim $aArray_2D
    $aArray_2D = "这里设置一段较长的文本, 以便查看项目自动扩展显示列的效果"
    _ArrayDisplay($aArray_2D, "扩展列 - 自定义标题 - 交替行的颜色 - 无按钮或 'Row' 列", Default, 32 + 64, Default, "AA|BB|CC|DD|EE|FF|GG|HH|II|JJ", Default, 0xDDFFDD)

    ; 将用户函数赋给一个变量作为参数进行传递
    Local $hUserFunction = _UserFunc

    $aArray_2D = "设置列为右对齐"
    _ArrayDisplay($aArray_2D, "设置范围 - 右对齐 - 复制列宽 - 用户函数", "3:7|4:9", 2, 15, "AA|BB|CC|DD|EE|FF", Default, Default, $hUserFunction)
    _ArrayDisplay($aArray_2D, "设置范围 - 右对齐 - 复制列宽 - 换位", "3:7|4:9", 3, 15, "AA|BB|CC|DD|EE|FF") ; 注意到没有列名称换位

    ; 创建非数组变量强制出现错误 - MsgBox 将按 $iFlags 设置显示
    Local $vVar = 0
    _ArrayDisplay($vVar, "MsgBox 提示错误", Default, 8)

EndFunc   ;==>Example

; 注意用户函数必须有两个参数, 即使你不打算使用它们
Func _UserFunc($aArray_2D, $aSelected)

    ; 如果不使用参数, 则会引起 Au3Check 语法检查警告
    #forceref $aArray_2D

    _ArrayDisplay($aSelected, "选定列")

EndFunc   ;==>_UserFunc

joint 发表于 2017-6-24 17:43:06

本帖最后由 joint 于 2017-6-24 17:44 编辑

前面的函数说明和后面的列子好像很难对得上啊。

想要下面这样的效果设置半天都出不来。

joint 发表于 2017-6-24 19:49:48

各位高手帮看看,12列,1000行,要得到下面的样式_ArrayDisplay的参数应该怎么设置?
谢谢。

yamakawa 发表于 2017-6-24 20:26:04

arraydisplay函数总共就9个参数。。。。我数了下。。你的代码中,,,有13个?

joint 发表于 2017-6-24 20:52:15

arraydisplay函数总共就9个参数。。。。我数了下。。你的代码中,,,有13个?
yamakawa 发表于 2017-6-24 20:26 http://www.autoitx.com/images/common/back.gif

12列,因为参数总是加不对,上面的是没加参数,只是设置了对应的列。应该是12列,但是报错,后来考虑是不是索引列也要占位,就又加了一列,但还是报错。

yamakawa 发表于 2017-6-24 21:47:42

你那是13个参数,不是12列

yamakawa 发表于 2017-6-24 21:59:35

回复 5# joint


#include <Array.au3>

Local $array
For $i = 0 To 999
        For $j = 0 To 11
                $array[$i][$j] = "Item " & StringFormat("%02i", $i) & StringFormat("%02i", $j)
        Next
Next

$array = "A longer item to show column expansion"

_ArrayDisplay($array,"Title for ArrayDisplay",Default,64,Default,"AA|BB|CC|DD|EE|FF|GG|HH|II|JJ|KK|LL")

joint 发表于 2017-6-24 22:48:35

回复joint
yamakawa 发表于 2017-6-24 21:59 http://www.autoitx.com/images/common/back.gif

但是,完全一样的代码,把列减为5列就完全正常:

yamakawa 发表于 2017-6-25 17:10:19

回复 8# joint


    第六个参数是列标题!!!
   什么乱七八糟的列减为5列。。。。
_arraydisplay(第一参数,第二参数,第三参数,第四参数,第五参数,第六参数,第七参数,第八参数,第九参数)
这里 列标题是第六个参数,,,所以你改的这个代码可以运行

joint 发表于 2017-6-25 18:26:52

回复 9# yamakawa

谢谢,昨天问题一解决了,是文档中下面两段的对应关系看的比较乱造成的:

_ArrayDisplay ( Const ByRef $aArray [, $sTitle = "ArrayDisplay" [, $sArrayRange = "" [, $iFlags = 0 [, $vUser_Separator = Default [, $sHeader = Default [, $iMax_ColWidth = Default [, $iAlt_Color = Default [, $hUser_Function = ""]]]]]]]] )

$aArray_2D = "这里设置一段较长的文本, 以便查看项目自动扩展显示列的效果"
    _ArrayDisplay($aArray_2D, "扩展列 - 自定义标题 - 交替行的颜色 - 无按钮或 'Row' 列", Default, 32 + 64, Default, "AA|BB|CC|DD|EE|FF|GG|HH|II|JJ", Default, 0xDDFFDD)

herowu1987 发表于 2017-6-27 16:33:50

感谢楼主分享,学习一下。
页: [1]
查看完整版本: _ArrayDisplay的帮助文档感觉太混乱了。 已解决