Автор Тема: [Баг] Некорректная работа _GUICtrlListView_FindText со стилем LVS_SORTASCENDING  (Прочитано 1937 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7814
  • Репутация: 2282
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Пример:

Код: AutoIt [Выделить]
#include <GUIConstantsEx.au3>
#include <GUIListView.au3>

$hGUI = GUICreate('')

$iListView = GUICtrlCreateListView('Col', 20, 20, 260, 250, BitOR($GUI_SS_DEFAULT_LISTVIEW, $LVS_SORTASCENDING))

GUICtrlCreateListViewItem('Item 1', $iListView)
GUICtrlCreateListViewItem('Item 2', $iListView)

GUISetState(@SW_SHOW, $hGUI)

_GUICtrlListView_SetItemText($iListView, 1, 'Item 1')
_GUICtrlListView_SetItemText($iListView, 0, 'Item 2')

$iIndex = _GUICtrlListView_FindText($iListView, 'Item 1', -1, False) ;, True)
;~ $iIndex = _GUICtrlListView_FindInText($iListView, 'Item 1')

MsgBox(64, 'Title', $iIndex)

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd


Всё дело в стиле $LVS_SORTASCENDING, если его не использовать, то проблем нет.
В коде выше, текст пунктов меняется местами, после чего начинаются проблемы...

Если вместо True поставить False в вызове _GUICtrlListView_FindText (частичный поиск), то возвращает правильный индекс, также если использовать строку с _GUICtrlListView_FindInText, то нет проблем.

Мне нужен поиск строго по указанному названию, и строго в первой колонке.

Ищу как решение проблеме, так и объяснение, почему так происходит и баг ли это вообще?


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Русское сообщество AutoIt


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7814

  • Автор темы
  • Репутация: 2282
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Вот вроде решение проблемы:

Код: AutoIt [Выделить]
#include <GUIConstantsEx.au3>
#include <GUIListView.au3>

$hGUI = GUICreate('')

$iListView = GUICtrlCreateListView('Col', 20, 20, 260, 250, BitOR($GUI_SS_DEFAULT_LISTVIEW, $LVS_SORTASCENDING))

GUICtrlCreateListViewItem('Item 1', $iListView)
GUICtrlCreateListViewItem('Item 2', $iListView)

GUISetState(@SW_SHOW, $hGUI)

_GUICtrlListView_SetItemText($iListView, 1, 'Item 1')
_GUICtrlListView_SetItemText($iListView, 0, 'Item 2')

$iIndex = _GUICtrlListView_FindTextEx($iListView, 'Item 1', -1, False, True, 0, 0)

MsgBox(64, 'Title', $iIndex)

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _GUICtrlListView_FindTextEx($hLV, $sText, $iStart = -1, $fPartialOK = True, $fWrapOK = True, $iCaseSense = 0, $iSubItem = 0)
    Local $i_Count = _GUICtrlListView_GetItemCount($hLV)
    Local $i_Start = 0, $s_Text, $i_TxtLen = StringLen($sText)
   
    If $iStart > -1 Then
        $i_Start = $iStart
    EndIf
   
    While 1
        For $i = $i_Start To $i_Count - 1
            $s_Text = _GUICtrlListView_GetItemText($hLV, $i, $iSubItem)
           
            If ($fPartialOK And StringCompare(StringLeft($s_Text, $i_TxtLen), $sText, $iCaseSense) = 0) Or (Not $fPartialOK And StringCompare($s_Text, $sText, $iCaseSense) = 0) Then
                Return $i
            EndIf
        Next
       
        If Not $fWrapOK Or $i_Start = 0 Then
            ExitLoop
        EndIf
       
        $i_Start = 0
    WEnd
   
    Return -1
EndFunc


Русское сообщество AutoIt

Re: [Баг] Некорректная работа _GUICtrlListView_FindText со стилем LVS_SORTASCENDING
« Ответ #1 Отправлен: Октябрь 09, 2013, 16:21:27 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
8 Ответов
4679 Просмотров
Последний ответ Август 08, 2010, 14:32:43
от SyDr
9 Ответов
5119 Просмотров
Последний ответ Сентябрь 18, 2010, 06:11:05
от Yashied
0 Ответов
2405 Просмотров
Последний ответ Сентябрь 18, 2010, 06:16:51
от Yashied
8 Ответов
2954 Просмотров
Последний ответ Март 17, 2012, 18:45:05
от AZJIO
9 Ответов
3689 Просмотров
Последний ответ Июль 12, 2012, 22:20:04
от CreatoR
6 Ответов
3683 Просмотров
Последний ответ Июль 21, 2012, 11:27:54
от joiner
1 Ответов
1265 Просмотров
Последний ответ Ноябрь 30, 2013, 23:30:08
от beliy
0 Ответов
816 Просмотров
Последний ответ Октябрь 10, 2014, 14:57:44
от firex
1 Ответов
976 Просмотров
Последний ответ Март 21, 2015, 08:01:48
от alex33
1 Ответов
706 Просмотров
Последний ответ Март 09, 2016, 19:32:50
от xishnik