heavenm 发表于 2014-4-28 11:24:57

假死问题,麻烦测试下,是脚本问题还是,版本问题,_ArrayDisplay无法显示

本帖最后由 heavenm 于 2014-4-28 11:28 编辑

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiToolbar.au3>
#include <ImageListConstants.au3>
#include <ListViewConstants.au3>
#include <ToolbarConstants.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=f:\软件管家\软件管家.kxf
$Form1_1 = GUICreate("Form1", 816, 573, 191, 112)

$ListView1 = GUICtrlCreateListView("软件名称|版本|备注", 200, 40, 609, 465, -1, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT))
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 270)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 70)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, -2)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")

$ListView2 = GUICtrlCreateListView("全部软件", 0, 40, 194, 465)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, -2)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("批量安装", 688, 512, 115, 33, -1, $WS_EX_CLIENTEDGE)

;-----------------------------------------------------------------------
#include <GuiListView.au3>
#include <array.au3>
_GUICtrlListView_JustifyColumn($ListView2, 0, 2)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

;-----------------------------------------------------------------------
GUISetState(@SW_SHOW)




$SoftType = IniReadSectionNames(@ScriptDir & "\soft.ini")
Dim $SoftTypeIndex[$SoftType - 1], $TEMP_SOFTTYPE_ARRAY
For $i = 1 To $SoftType
        GUICtrlCreateListViewItem($SoftType[$i], $ListView2)
        $SoftVar = IniReadSection(@ScriptDir & "\soft.ini", $SoftType[$i])
        If @error Then ContinueLoop
        ReDim $TEMP_SOFTTYPE_ARRAY[$SoftVar]
        For $ii = 1 To $SoftVar
                GUICtrlCreateListViewItem($SoftVar[$ii], $ListView1)
                $TEMP_SOFTTYPE_ARRAY[$ii - 1] = $SoftVar[$ii]
        Next
        $SoftTypeIndex[$i - 1] = $TEMP_SOFTTYPE_ARRAY
Next


#endregion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

EndSwitch
WEnd




Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
      $tNMTV = DllStructCreate($tagNMTVDISPINFO, $ilParam)
      $iCode = DllStructGetData($tNMTV, "Code")
      $iIndex = _GUICtrlListView_GetSelectedIndices($ListView2)
      Switch $iCode
                Case $NM_CLICK
                        If ($iIndex) Then
                                                                _ArrayDisplay($SoftTypeIndex)
                                                               MsgBox(0, $iIndex, IsArray($SoftTypeIndex[$iIndex]))
                        EndIf
      EndSwitch
      $tNMTV = 0
EndFunc   ;==>WM_NOTIFY

heavenm 发表于 2014-4-28 11:25:29

[办公软件]
OFFICE=abc.exe
[影音工具]
[聊天软件]
QQ=qq.exe
[杀毒软件]soft.ini

seniors 发表于 2014-4-28 12:19:19

$SoftTypeIndex[$i - 1] = $TEMP_SOFTTYPE_ARRAY
?可以这样吗?

heavenm 发表于 2014-4-28 17:23:50

任意数组都无法显示 显示就假死 不知道是为什么

水木子 发表于 2014-4-29 09:15:02

之前我也遇到过这样的问题,我发现是 $WM_NOTIFY 的问题,不知道这样说是否准确。

LZ可以试试,在 WM_NOTIFY 函数中即便是添加 MsgBox 同意会假死。

如果是为了输出结果做测试用,可以用 ConsoleWrite 试试!

heavenm 发表于 2014-4-29 10:40:56

= =#原来这个是BUG么!
好吧!谢谢水木子

水木子 发表于 2014-4-29 11:54:44

回复 6# heavenm

我觉得这应该不属于BUG吧!

flysoar 发表于 2014-5-4 10:15:05

谢谢分享 收藏了

pcbar 发表于 2014-5-4 15:52:19

请参考_ArrayDisplay帮助文档
_ArrayDisplay(这里是数组的名称), 而$SoftTypeIndex并非数组

bakefish 发表于 2014-5-4 22:55:56

之前我也遇到过这样的问题,我发现是 $WM_NOTIFY 的问题,不知道这样说是否准确。

LZ可以试试,在 WM_NO ...
水木子 发表于 2014-4-29 09:15 http://www.autoitx.com/images/common/back.gif


    同意,不过msgbox是可以使用的

athland5013 发表于 2014-5-6 02:47:10

本帖最后由 athland5013 于 2014-5-6 03:00 编辑

感觉跟WM_NOTIFY是有关的,以前的版本没有这个问题,不知道什么时候更新了就出现这个情况

我的解决办法

1,修改_ArrayDisplay()                        Case $cExit_Script
                                ; Clear up
                                GUIDelete($hGUI)
                                Exit
                EndSwitch
                Sleep(10)       ;###############添加这句,问题解决       
        WEnd

        ; Clear up
        GUIDelete($hGUI)
        Opt("GUIOnEventMode", $iOnEventMode) ; Reset original GUI mode
        Opt("GUIDataSeparatorChar", $sCurr_Separator) ; Reset original separator

        Return 1

EndFunc   ;==>_ArrayDisplay2,不修改_ArrayDisplay(),注册一个 Adlib 函数,延迟显示数组

121044246 发表于 2020-12-4 14:29:46

今天刚好遇到,Sleep(10)         ;###############添加这句,问题解决完美解决
页: [1]
查看完整版本: 假死问题,麻烦测试下,是脚本问题还是,版本问题,_ArrayDisplay无法显示