Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] _arrayDisplay с определённой ячейки (http://forum.oszone.net/showthread.php?t=135110)

morgan1991 18-03-2009 17:47 1067442

_arrayDisplay с определённой ячейки
 
Скажите пожалуйста можно ли использовать _arrayDisplay так чтобы она выводила массив например с 3 ячейки.

proxy 18-03-2009 18:40 1067497

Цитата:

#Include <Array.au3>
_ArrayDisplay(Const ByRef $avArray[, $sTitle = "Array: ListView Display"[, $iItemLimit = -1[, $iTranspose = 0[, $sSeparator = ""[, $sReplace = "|"]]]]])

Parameters

$avArray Array to display
$sTitle [optional] Title to use for window
$iItemLimit [optional] Maximum number of listview items (rows) to show
$iTranspose [optional] If set differently than default, will transpose the array if 2D
$sSeparator [optional] Change Opt("GUIDataSeparatorChar") on-the-fly
$sReplace [optional] String to replace any occurrence of $sSeparator with in each array element
в справке этого нет, значит нет.
+ можно открыть Array.au3 и глянуть саму функцию.
+ её можно банально скопировать и подправить под себя

к примеру так, тока для 1D:
Код:

Func _ArrayDisplay($avArray, $sTitle = "Array: ListView Display", $iStart = 0, $iItemLimit = -1, $iTranspose = 0, $sSeparator = "", $sReplace = "|")
        If Not IsArray($avArray) Then Return SetError(1, 0, 0)
        If  $iStart >= 0 AND $iStart <= UBound($avArray)-1 Then
                Local        $avReArray[1]
                $j=0
                For $i = $iStart To UBound($avArray)-1
                        ReDim $avReArray[$j+1]
                        $avReArray[$j] = $avArray[$i]
                        $j+=1
                Next
                $avArray = $avReArray
        EndIf
       
        ; Dimension checking
        Local $iDimension = UBound($avArray, 0), $iUBound = UBound($avArray, 1) - 1, $iSubMax = UBound($avArray, 2) - 1
        If $iDimension > 2 Then Return SetError(2, 0, 0)

        ; Separator handling
;~        If $sSeparator = "" Then $sSeparator = Chr(1)
        If $sSeparator = "" Then $sSeparator = Chr(124)

        ; Declare variables
        Local $i, $j, $vTmp, $aItem, $avArrayText, $sHeader = "Row", $iBuffer = 64
        Local $iColLimit = 250, $iLVIAddUDFThreshold = 4000, $iWidth = 640, $iHeight = 480
        Local $iOnEventMode = Opt("GUIOnEventMode", 0), $sDataSeparatorChar = Opt("GUIDataSeparatorChar", $sSeparator)

        ; Swap dimensions if transposing
        If $iSubMax < 0 Then $iSubMax = 0
        If $iTranspose Then
                $vTmp = $iUBound
                $iUBound = $iSubMax
                $iSubMax = $vTmp
        EndIf

        ; Set limits for dimensions
        If $iSubMax > $iColLimit Then $iSubMax = $iColLimit
        If $iItemLimit = 1 Then $iItemLimit = $iLVIAddUDFThreshold
        If $iItemLimit < 1 Then $iItemLimit = $iUBound
        If $iUBound > $iItemLimit Then $iUBound = $iItemLimit
        If $iLVIAddUDFThreshold > $iUBound Then $iLVIAddUDFThreshold = $iUBound

        ; Set header up
        For $i = 0 To $iSubMax
                $sHeader &= $sSeparator & "Col " & $i
        Next

        ; Convert array into text for listview
        Local $avArrayText[$iUBound + 1]
        For $i = 0 To $iUBound
                $avArrayText[$i] = "[" & $i & "]"
                For $j = 0 To $iSubMax
                        ; Get current item
                        If $iDimension = 1 Then
                                If $iTranspose Then
                                        $vTmp = $avArray[$j]
                                Else
                                        $vTmp = $avArray[$i]
                                EndIf
                        Else
                                If $iTranspose Then
                                        $vTmp = $avArray[$j][$i]
                                Else
                                        $vTmp = $avArray[$i][$j]
                                EndIf
                        EndIf

                        ; Add to text array
                        $vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1)
                        $avArrayText[$i] &= $sSeparator & $vTmp

                        ; Set max buffer size
                        $vTmp = StringLen($vTmp)
                        If $vTmp > $iBuffer Then $iBuffer = $vTmp
                Next
        Next
        $iBuffer += 1

        ; GUI Constants
        Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 0x66
        Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 0x40
        Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 0x0200
        Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 0x2
        Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 0x4
        Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
        Local Const $_ARRAYCONSTANT_LVIF_PARAM = 0x4
        Local Const $_ARRAYCONSTANT_LVIF_TEXT = 0x1
        Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (0x1000 + 29)
        Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (0x1000 + 4)
        Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (0x1000 + 44)
        Local Const $_ARRAYCONSTANT_LVM_INSERTITEMA = (0x1000 + 7)
        Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (0x1000 + 54)
        Local Const $_ARRAYCONSTANT_LVM_SETITEMA = (0x1000 + 6)
        Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 0x20
        Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 0x1
        Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 0x8
        Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 0x0200
        Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 0x00010000
        Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 0x00020000
        Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 0x00040000
        Local Const $_ARRAYCONSTANT_tagLVITEM = "int Mask;int Item;int SubItem;int State;int StateMask;ptr Text;int TextMax;int Image;int Param;int Indent;int GroupID;int Columns;ptr pColumns"

        Local $iAddMask = BitOR($_ARRAYCONSTANT_LVIF_TEXT, $_ARRAYCONSTANT_LVIF_PARAM)
        Local $tBuffer = DllStructCreate("char Text[" & $iBuffer & "]"), $pBuffer = DllStructGetPtr($tBuffer)
        Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagLVITEM), $pItem = DllStructGetPtr($tItem)
        DllStructSetData($tItem, "Param", 0)
        DllStructSetData($tItem, "Text", $pBuffer)
        DllStructSetData($tItem, "TextMax", $iBuffer)

        ; Set interface up
        Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
        Local $aiGUISize = WinGetClientSize($hGUI)
        Local $hListView = GUICtrlCreateListView($sHeader, 0, 0, $aiGUISize[0], $aiGUISize[1] - 26, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
        Local $hCopy = GUICtrlCreateButton("Copy Selected", 3, $aiGUISize[1] - 23, $aiGUISize[0] - 6, 20)
        GUICtrlSetResizing($hListView, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
        GUICtrlSetResizing($hCopy, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
        GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
        GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
        GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)

        ; Fill listview
        For $i = 0 To $iLVIAddUDFThreshold
                GUICtrlCreateListViewItem($avArrayText[$i], $hListView)
        Next
        For $i = ($iLVIAddUDFThreshold + 1) To $iUBound
                $aItem = StringSplit($avArrayText[$i], $sSeparator)
                DllStructSetData($tBuffer, "Text", $aItem[1])

                ; Add listview item
                DllStructSetData($tItem, "Item", $i)
                DllStructSetData($tItem, "SubItem", 0)
                DllStructSetData($tItem, "Mask", $iAddMask)
                GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_INSERTITEMA, 0, $pItem)

                ; Set listview subitem text
                DllStructSetData($tItem, "Mask", $_ARRAYCONSTANT_LVIF_TEXT)
                For $j = 2 To $aItem[0]
                        DllStructSetData($tBuffer, "Text", $aItem[$j])
                        DllStructSetData($tItem, "SubItem", $j - 1)
                        GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETITEMA, 0, $pItem)
                Next
        Next

        ; ajust window width
        $iWidth = 0
        For $i = 0 To $iSubMax + 1
                $iWidth += GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $i, 0)
        Next
        If $iWidth < 250 Then $iWidth = 230
        WinMove($hGUI, "", Default, Default, $iWidth + 20)

        ; Show dialog
        GUISetState(@SW_SHOW, $hGUI)

        While 1
                Switch GUIGetMsg()
                        Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
                                ExitLoop

                        Case $hCopy
                                Local $sClip = ""

                                ; Get selected indices [ _GUICtrlListView_GetSelectedIndices($hListView, True) ]
                                Local $aiCurItems[1] = [0]
                                For $i = 0 To GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0)
                                        If GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $i, 0x2) Then
                                                $aiCurItems[0] += 1
                                                ReDim $aiCurItems[$aiCurItems[0] + 1]
                                                $aiCurItems[$aiCurItems[0]] = $i
                                        EndIf
                                Next

                                ; Generate clipboard text
                                If Not $aiCurItems[0] Then
                                        For $sItem In $avArrayText
                                                $sClip &= $sItem & @CRLF
                                        Next
                                Else
                                        For $i = 1 To UBound($aiCurItems) - 1
                                                $sClip &= $avArrayText[$aiCurItems[$i]] & @CRLF
                                        Next
                                EndIf
                                ClipPut($sClip)
                EndSwitch
        WEnd
        GUIDelete($hGUI)

        Opt("GUIOnEventMode", $iOnEventMode)
        Opt("GUIDataSeparatorChar", $sDataSeparatorChar)

        Return 1
EndFunc  ;==>_ArrayDisplay


morgan1991 18-03-2009 19:00 1067527

proxy, дак функцию я уже подправил, просто думал есть команда. А то функция слишком много места в коде занимает.

proxy 18-03-2009 19:08 1067536

Цитата:

А то функция слишком много места в коде занимает.
)))))))))))))))))))))))))))))))))))
можно использовать:

Код:

#region: - блок длинного кода
; тут куча длинного кода
#endregion

либо вынести уту функцию в свою Array.au3
и радоваться ))

morgan1991 18-03-2009 19:59 1067590

Цитата:

Цитата proxy
либо вынести уту функцию в свою Array.au3 »

я имел ввиду вес .exe

proxy 18-03-2009 20:13 1067605

))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

размер скомпилированного (normal) файла с функцией: 288 КБ (294*912 байт)
размер скомпилированного (normal) файла только с одной строчкий MsgBox(0, '', 'd'): 284 КБ (290*816 байт)

размер скомпилированного (normal) файла с #include <Array.au3>: 296 КБ (303*104 байт)

думаю, это не так уж и "весомо" .....

Creat0R 18-03-2009 22:42 1067735

Цитата:

Цитата morgan1991
я имел ввиду вес .exe »

А что, «#include <Array.au3>» вес не прибавит? :)

morgan1991 19-03-2009 15:02 1068345

Цитата:

Цитата Creat0R
А что, «#include <Array.au3>» вес не прибавит? »

Ладно я ступил, ну вообщем ещё вопросик возник:
допустим есть массив я его вывожу с помощью свойе arraydisplay которая встроена в скрипт, дак вот как изменить её так чтобы после нажатия кнопки копировать в буфер та ячейка которая скопирована исчезала из arraydisplay окна. Только если кто знает как напишите пожалуйста не всю изменённую функцию а только что нужно изменить на что. Заранее спасибо.

Creat0R 19-03-2009 15:28 1068380

Цитата:

Цитата morgan1991
чтобы после нажатия кнопки копировать в буфер та ячейка которая скопирована исчезала из arraydisplay окна »

Это не просто, нужно менять многое в функции, т.к просто удалить item нельзя, последующая попытка копирования может закончиться неудачей (в начале функции текст скапливается в массив, и после удаления он уже не будет соответствовать действительности).

Можно попробовать заменить блок с «Case $hCopy» на это:

Код:

Case $hCopy
                Local $sClip = ""

                ; Get selected indices [ _GUICtrlListView_GetSelectedIndices($hListView, True) ]
                Local $aiCurItems[1] = [0]

                For $i = GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0) To 0 Step -1
                    If GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $i, 0x2) Then
                        $aiCurItems[0] += 1
                        ReDim $aiCurItems[$aiCurItems[0] + 1]
                        $aiCurItems[$aiCurItems[0]] = $i

                        GUICtrlSendMsg($hListView, (0x1000 + 8), $i, 0)
                    EndIf
                Next

                ; Generate clipboard text
                If Not $aiCurItems[0] Then
                    For $sItem In $avArrayText
                        $sClip &= $sItem & @CRLF
                    Next
                Else
                    For $i = 1 To UBound($aiCurItems) - 1
                        $sClip &= $avArrayText[$aiCurItems[$i]] & @CRLF
                    Next
                EndIf

                ClipPut($sClip)


morgan1991 19-03-2009 16:42 1068454

Цитата:

Цитата Creat0R
после удаления он уже не будет соответствовать действительности »

нет дак будет, после копирования эта ячейка удаляется из массива, это у меня так сделано. Дак может както можно просто заново считать данные с массива?

Creat0R 19-03-2009 18:37 1068562

Цитата:

Цитата morgan1991
может както можно просто заново считать данные с массива? »

Всё можно, нужно покапаться в функции. У меня пока особо на это времени нет, сорри.

amel27 20-03-2009 07:41 1069028

Цитата:

Цитата morgan1991
может както можно просто заново считать данные с массива »

я не особо силен в ГУИ, но думаю, что примерно так:
Код:

#include <array.au3>

Dim $a[3][10]=[[1,2,3,4,5,6,7,8,9,0],[1,2,3,4,5,6,7,8,9,0]]
_ArrayDisplayCut($a)

Func _ArrayDisplayCut(ByRef $avArray, $sTitle = "Array: ListView Display", $iItemLimit = -1, $sSeparator = "", $sReplace = "|")
    If Not IsArray($avArray) Then Return SetError(1, 0, 0)
    ; Dimension checking
    Local $iDimension = UBound($avArray, 0), $iSubMax = UBound($avArray, 2) - 1
    If $iDimension > 2 Then Return SetError(2, 0, 0)
    If $iSubMax < 0 Then $iSubMax = 0
    ; Separator handling
;~  If $sSeparator = "" Then $sSeparator = Chr(1)

    If $sSeparator = "" Then $sSeparator = Chr(124)
    ; Declare variables
    Local $i, $j, $vTmp, $aItem, $avArrayText, $iBuffer = 64
    Local $iColLimit = 250, $iLVIAddUDFThreshold = 4000, $iWidth = 640, $iHeight = 480
    Local $iOnEventMode = Opt("GUIOnEventMode", 0), $sDataSeparatorChar = Opt("GUIDataSeparatorChar", $sSeparator)

    ; GUI Constants
    Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 0x66
    Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 0x40
    Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 0x0200
    Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 0x2
    Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 0x4
    Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
    Local Const $_ARRAYCONSTANT_LVIF_PARAM = 0x4
    Local Const $_ARRAYCONSTANT_LVIF_TEXT = 0x1
    Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (0x1000 + 29)
    Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (0x1000 + 4)
    Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (0x1000 + 44)
    Local Const $_ARRAYCONSTANT_LVM_INSERTITEMA = (0x1000 + 7)
    Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (0x1000 + 54)
    Local Const $_ARRAYCONSTANT_LVM_SETITEMA = (0x1000 + 6)
    Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 0x20
    Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 0x1
    Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 0x8
    Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 0x0200
    Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 0x00010000
    Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 0x00020000
    Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 0x00040000
    Local Const $_ARRAYCONSTANT_tagLVITEM = "int Mask;int Item;int SubItem;int State;int StateMask;ptr Text;int TextMax;int Image;int Param;int Indent;int GroupID;int Columns;ptr pColumns"

    Local $iAddMask = BitOR($_ARRAYCONSTANT_LVIF_TEXT, $_ARRAYCONSTANT_LVIF_PARAM)
    Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagLVITEM), $pItem = DllStructGetPtr($tItem)
    DllStructSetData($tItem, "Param", 0)

    ; Set header up
    Local $sHeader = "Row"
    For $i = 0 To $iSubMax
        $sHeader
&= $sSeparator & "Col " & $i
    Next

    ; Set interface up
    Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
    Local $aiGUISize = WinGetClientSize($hGUI)
    Local $hListView = 0
    Local $hCut = GUICtrlCreateButton("Cut Selected", 3, $aiGUISize[1] - 23, $aiGUISize[0] - 6, 20)
    GUICtrlSetResizing($hCut, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)

    Local $iRefresh = 1
    While 1
        If $iRefresh Then
            $iRefresh = 0
            GUISetState(@SW_LOCK, $hGUI)
            ; Create listview
            If $hListView Then GUICtrlDelete($hListView)
            $hListView = GUICtrlCreateListView($sHeader, 0, 0, $aiGUISize[0], $aiGUISize[1] - 26, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
            GUICtrlSetResizing($hListView, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
            GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
            GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
            GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)
            Local $iUBound = UBound($avArray, 1) - 1
            If $iUBound >=0 Then
                ; Set limits for dimensions
                If $iSubMax > $iColLimit Then $iSubMax = $iColLimit
                If $iItemLimit = 1 Then $iItemLimit = $iLVIAddUDFThreshold
                If $iItemLimit < 1 Then $iItemLimit = $iUBound
                If $iUBound > $iItemLimit Then $iUBound = $iItemLimit
                If $iLVIAddUDFThreshold > $iUBound Then $iLVIAddUDFThreshold = $iUBound
                ; Convert array into text for listview
                Local $avArrayText[$iUBound + 1]
                For $i = 0 To $iUBound
                    $avArrayText
[$i] = "[" & $i & "]"
                    For $j = 0 To $iSubMax
                        ; Get current item
                        If $iDimension = 1 Then
                            $vTmp = $avArray[$i]
                        Else
                            $vTmp = $avArray[$i][$j]
                        EndIf
                        ; Add to text array
                        $vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1)
                        $avArrayText[$i] &= $sSeparator & $vTmp

                        ; Set max buffer size
                        $vTmp = StringLen($vTmp)
                        If $vTmp > $iBuffer Then $iBuffer = $vTmp
                    Next
                Next
                $iBuffer += 1
                Local $tBuffer = DllStructCreate("char Text[" & $iBuffer & "]"), $pBuffer = DllStructGetPtr($tBuffer)
                DllStructSetData($tItem, "Text", $pBuffer)
                DllStructSetData($tItem, "TextMax", $iBuffer)
                ; Fill listview
                For $i = 0 To $iLVIAddUDFThreshold
                    GUICtrlCreateListViewItem($avArrayText[$i], $hListView)
                Next
                For $i = ($iLVIAddUDFThreshold + 1) To $iUBound
                    $aItem = StringSplit($avArrayText[$i], $sSeparator)
                    DllStructSetData($tBuffer, "Text", $aItem[1])

                    ; Add listview item
                    DllStructSetData($tItem, "Item", $i)
                    DllStructSetData($tItem, "SubItem", 0)
                    DllStructSetData($tItem, "Mask", $iAddMask)
                    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_INSERTITEMA, 0, $pItem)

                    ; Set listview subitem text
                    DllStructSetData($tItem, "Mask", $_ARRAYCONSTANT_LVIF_TEXT)
                    For $j = 2 To $aItem[0]
                        DllStructSetData($tBuffer, "Text", $aItem[$j])
                        DllStructSetData($tItem, "SubItem", $j - 1)
                        GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETITEMA, 0, $pItem)
                    Next
                Next
                ; ajust window width
                $iWidth = 0
                For $i = 0 To $iSubMax + 1
                    $iWidth += GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $i, 0)
                Next
                If $iWidth < 250 Then $iWidth = 230
                WinMove($hGUI, "", Default, Default, $iWidth + 20)
                ; Show dialog
            EndIf
            GUISetState(@SW_UNLOCK, $hGUI)
        EndIf
        GUISetState(@SW_SHOW, $hGUI)

        While 1
            Switch GUIGetMsg()
                Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
                ExitLoop 2

                Case $hCut
                    ; Get selected indices [ _GUICtrlListView_GetSelectedIndices($hListView, True) ]
                    Local $aiCurItems[1] = [0]
                    For $i = 0 To GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0)
                        If GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $i, 0x2) Then
                            $aiCurItems[0] += 1
                            ReDim $aiCurItems[$aiCurItems[0] + 1]
                            $aiCurItems[$aiCurItems[0]] = $i
                        EndIf
                    Next
                    ; Generate clipboard text
                    If $aiCurItems[0] Then
                        Local $sClip = ""
                        For $i = UBound($aiCurItems) - 1 To 1 Step -1
                            $sClip = $avArrayText[$aiCurItems[$i]] & @CRLF & $sClip
                            _ArrayDelete($avArray, $aiCurItems[$i])
                        Next
                        $iRefresh=1
                        ClipPut($sClip)
                        ExitLoop 1
                    EndIf
            EndSwitch
        WEnd
    WEnd
    GUIDelete($hGUI)

    Opt("GUIOnEventMode", $iOnEventMode)
    Opt("GUIDataSeparatorChar", $sDataSeparatorChar)

    Return 1
EndFunc


morgan1991 20-03-2009 08:35 1069043

спасибо


Время: 03:13.

Время: 03:13.
© OSzone.net 2001-