vcomp71
Осваивающий
- Сообщения
- 431
- Репутация
- 25
Что-то никак не пойму в чем дело.
Есть стандартная функция
Есть ее код в соответствующей udf
Решил ее несколько модифицировать, чтобы сделать диалог выбора из массива элементов.
На диалоге в стандартной функции присутствует кнопка
Вот код ее обработки
Меняем на вот такой код
То есть вместо строковой переменной формируем массив. Ну так вот.. В исходном тексте он отмечает элементы корректно, в получившимся, берет упорно три элемента, то есть как я полагаю некорректно работает вот эта конструкция
А точнее:
При проверке на выделенный элемент, условие срабатывает на все элементы.
В чем трабл? Код функции брал полностью из стандартной udf, там вроде все переменные корректно определены.
Есть стандартная функция
Код:
_ArrayDisplay
Есть ее код в соответствующей udf
Решил ее несколько модифицировать, чтобы сделать диалог выбора из массива элементов.
На диалоге в стандартной функции присутствует кнопка
Код:
Local $hCopy = GUICtrlCreateButton("Copy Selected", 3, $aiGUISize[1] - 23, $aiGUISize[0] - 6, 20)
Вот код ее обработки
Код:
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)
Меняем на вот такой код
Код:
; 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
; Сохраняем выбор
If Not $aiCurItems[0] Then
MsgBox(4096, "Нет выбранных элементов","Нет выбранных элементов")
$vibor = ""
Else
if $iSubMax=0 Then
MsgBox(4096, "Процедура выбора","Одномерный массив")
dim $vibor[UBound($aiCurItems)+1]
for $i=1 to UBound($aiCurItems)
$vibor[$i] =$avArray[$i]
Next
Else
dim $vibor[$iSubMax][UBound($aiCurItems)+1]
MsgBox(4096, "Процедура выбора","Двумерный массив")
For $i = 1 To UBound($aiCurItems) - 1
for $jj=1 to $iSubMax
$vibor[$jj][$i] =$avArray[$i][$jj]
Next
Next
EndIf
EndIf
MsgBox(4096, "Процедура выбора",UBound($vibor))
ExitLoop
То есть вместо строковой переменной формируем массив. Ну так вот.. В исходном тексте он отмечает элементы корректно, в получившимся, берет упорно три элемента, то есть как я полагаю некорректно работает вот эта конструкция
Код:
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
А точнее:
Код:
If GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $i, 0x2) Then
$aiCurItems[0] += 1
ReDim $aiCurItems[$aiCurItems[0] + 1]
$aiCurItems[$aiCurItems[0]] = $i
EndIf
При проверке на выделенный элемент, условие срабатывает на все элементы.
В чем трабл? Код функции брал полностью из стандартной udf, там вроде все переменные корректно определены.