Valnurat

Listview search

5 posts in this topic

I have 8 listview on my GUI. I would like to search in the listview for a number. I only want to search in 3 of the 8 listviews. I know number 1 is in $hLV_C1 and not in the others, but when I run this the result is that that I get the message that it is found in all of my 3 listviews I want to search for.

Global $aSearchListview[3] = ["$hLV_C1","$hLV_C3","$hLV_C5"]
    $hLV_C1 = GUICtrlCreateListView('0', 245, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C1, 0, $LVSCW_AUTOSIZE)
    $hLV_C2 = GUICtrlCreateListView('0', 275, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C2, 0, $LVSCW_AUTOSIZE)
    $hLV_C3 = GUICtrlCreateListView('0', 305, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C3, 0, $LVSCW_AUTOSIZE)
    $hLV_C4 = GUICtrlCreateListView('0', 335, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C4, 0, $LVSCW_AUTOSIZE)
    $hLV_C5 = GUICtrlCreateListView('0', 365, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C5, 0, $LVSCW_AUTOSIZE)
    $hLV_C6 = GUICtrlCreateListView('0', 395, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C6, 0, $LVSCW_AUTOSIZE)
    $hLV_C7 = GUICtrlCreateListView('0', 425, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER, $WS_EX_TRANSPARENT)
    _GUICtrlListView_SetColumnWidth($hLV_C7, 0, $LVSCW_AUTOSIZE)

    
    Local $sNumber = '1', $g_bSortSense = false
    GUICtrlCreateListViewItem($sNumber, $hLV_C1)
    _GUICtrlListView_SimpleSort($hLV_C1,$g_bSortSense,0,False)
    For $iColumnIndex = 0 to UBound($aSearchListview) -1
        Local $iIndex = _GUICtrlListView_FindItem($aSearchListview[$iColumnIndex],-1,$sNumber)
        If $iIndex <> -1 Then
            MsgBox(0,'Found',$aSearchListview[$iColumnIndex])
        Else
            MsgBox(0,'Not Found',$aSearchListview[$iColumnIndex])
        EndIf
    Next

Why is that?


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites



Please, make a full runable with populated LV's (reproducer) script showing your issue(s).

Share this post


Link to post
Share on other sites
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

Local $aGUT[0]
Local $aSearchListview[3] = ["$hLV_C1","$hLV_C3","$hLV_C5"]
Local $MainGUIForm = GUICreate("My GUI",455,600)
Local $hHeader, $sNumber, $g_bSortSense = False

    For $i = 0 To 90
        _ArrayAdd($aGUT, $i)
    Next
    GUICtrlCreateTabItem("R/B")
    $hLV_RB = GUICtrlCreateListView('Test', 50, 100, 94, 255, $LVS_NOCOLUMNHEADER)

    ; Now calculate ListView 2 vertical size
    $hHeader = _GUICtrlListView_GetHeader($hLV_RB)
    $aSize = WinGetPos($hHeader)
    $iHeaderHeight = $aSize[3] ; Header height
    $aRect = _GUICtrlListView_GetItemRect($hLV_RB, 0)
    $iItemHeight = $aRect[3] - $aRect[1] ; Item height
    $iTotalHeight = $iHeaderHeight + (20 * ($iItemHeight + .5)) -10 ; Allow for the inter-item gaps
    $hLV_C0 = GUICtrlCreateListView('0', 185, 40, 50, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C0, 0, $LVSCW_AUTOSIZE)
    For $i = 0 To 12
        GUICtrlCreateListViewItem( $i, $hLV_C0)
    Next
    $hLV_C1 = GUICtrlCreateListView('0', 245, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C1, 0, $LVSCW_AUTOSIZE)
    $hLV_C2 = GUICtrlCreateListView('0', 275, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C2, 0, $LVSCW_AUTOSIZE)
    $hLV_C3 = GUICtrlCreateListView('0', 305, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C3, 0, $LVSCW_AUTOSIZE)
    $hLV_C4 = GUICtrlCreateListView('0', 335, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C4, 0, $LVSCW_AUTOSIZE)
    $hLV_C5 = GUICtrlCreateListView('0', 365, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C5, 0, $LVSCW_AUTOSIZE)
    $hLV_C6 = GUICtrlCreateListView('0', 395, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C6, 0, $LVSCW_AUTOSIZE)
    $hLV_C7 = GUICtrlCreateListView('0', 425, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C7, 0, $LVSCW_AUTOSIZE)

Local $id0 = GUICtrlCreatePic("C:\Program Files (x86)\AutoIt3\Examples\GUI\logo4.gif", 0, 0, 169, 68)


GUISetState(@SW_SHOW)

$bProceed = False
Do
    $idMsg = GUIGetMsg()
    Switch $idMsg
        Case $id0
            $sNumber = '1'
            $bProceed = True
    EndSwitch
    If $bProceed Then
        $iIndex = _ArraySearch($aGUT, $sNumber)
        If $iIndex <> - 1 Then
            ; Delete it
            _ArrayDelete($aGUT, $iIndex)
            ; Now clear ListViews 0
            _GUICtrlListView_BeginUpdate($hLV_C0)
            _GUICtrlListView_DeleteAllItems($hLV_C0)
            ; And reload with all / the top 20 elements in the main array
            For $i = 0 To UBound($aGUT) - 1
                If $i < 13 Then
                    GUICtrlCreateListViewItem($aGUT[$i], $hLV_C0)
                EndIf
            Next
            _GUICtrlListView_EndUpdate($hLV_C0)
            GUICtrlCreateListViewItem($sNumber, $hLV_C1)
            _GUICtrlListView_SimpleSort($hLV_C1,$g_bSortSense,0,False)
        Else
            For $iColumnIndex = 0 to UBound($aSearchListview) -1
                Local $iIndex = _GUICtrlListView_FindItem($aSearchListview[$iColumnIndex],-1,$sNumber)
                If $iIndex <> -1 Then
                    MsgBox(0,'Found',$aSearchListview[$iColumnIndex])
                Else
                    MsgBox(0,'Not Found',$aSearchListview[$iColumnIndex])
                EndIf
            Next
        EndIf
        $bProceed = False
        $sNumber = ''
    EndIf
Until $idMsg = $GUI_EVENT_CLOSE

This will produce the error. I'm searching in listview ["$hLV_C1","$hLV_C3","$hLV_C5"], but I know that my number is only in $hLV_C1 2nd time I press the AutoIT logo.

 

Press AutoIT logo and you will see number 2 is moved from one LV0 to LV1.


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites
  1. your array $aSearchListview holds strings, it must be the ControlID's
  2. _GUICtrlListView_FindItem is not the func you need use _GUICtrlListView_FindText
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

Local $aGUT[0]
Local $aSearchListview[3] = ["$hLV_C1","$hLV_C3","$hLV_C5"]
Local $MainGUIForm = GUICreate("My GUI",455,600)
Local $hHeader, $sNumber, $g_bSortSense = False

    For $i = 0 To 90
        _ArrayAdd($aGUT, $i)
    Next
    GUICtrlCreateTabItem("R/B")
    $hLV_RB = GUICtrlCreateListView('Test', 50, 100, 94, 255, $LVS_NOCOLUMNHEADER)

    ; Now calculate ListView 2 vertical size
    $hHeader = _GUICtrlListView_GetHeader($hLV_RB)
    $aSize = WinGetPos($hHeader)
    $iHeaderHeight = $aSize[3] ; Header height
    $aRect = _GUICtrlListView_GetItemRect($hLV_RB, 0)
    $iItemHeight = $aRect[3] - $aRect[1] ; Item height
    $iTotalHeight = $iHeaderHeight + (20 * ($iItemHeight + .5)) -10 ; Allow for the inter-item gaps
    $hLV_C0 = GUICtrlCreateListView('0', 185, 40, 50, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C0, 0, $LVSCW_AUTOSIZE)
    For $i = 0 To 12
        GUICtrlCreateListViewItem( $i, $hLV_C0)
    Next
    $hLV_C1 = GUICtrlCreateListView('0', 245, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C1, 0, $LVSCW_AUTOSIZE)
    $hLV_C2 = GUICtrlCreateListView('0', 275, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C2, 0, $LVSCW_AUTOSIZE)
    $hLV_C3 = GUICtrlCreateListView('0', 305, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C3, 0, $LVSCW_AUTOSIZE)
    $hLV_C4 = GUICtrlCreateListView('0', 335, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C4, 0, $LVSCW_AUTOSIZE)
    $hLV_C5 = GUICtrlCreateListView('0', 365, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C5, 0, $LVSCW_AUTOSIZE)
    $hLV_C6 = GUICtrlCreateListView('0', 395, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C6, 0, $LVSCW_AUTOSIZE)
    $hLV_C7 = GUICtrlCreateListView('0', 425, 40, 25, $iTotalHeight, $LVS_NOCOLUMNHEADER)
    _GUICtrlListView_SetColumnWidth($hLV_C7, 0, $LVSCW_AUTOSIZE)

Local $id0 = GUICtrlCreatePic("C:\Program Files (x86)\AutoIt3\Examples\GUI\logo4.gif", 0, 0, 169, 68)
$aSearchListview[0]=$hLV_C1
$aSearchListview[1]=$hLV_C3
$aSearchListview[2]=$hLV_C5

GUISetState(@SW_SHOW)

$bProceed = False
Do
    $idMsg = GUIGetMsg()
    Switch $idMsg
        Case $id0
            $sNumber = '1'
            $bProceed = True
    EndSwitch
    If $bProceed Then
        $iIndex = _ArraySearch($aGUT, $sNumber)
        If $iIndex <> - 1 Then
            ; Delete it
            _ArrayDelete($aGUT, $iIndex)
            ; Now clear ListViews 0
            _GUICtrlListView_BeginUpdate($hLV_C0)
            _GUICtrlListView_DeleteAllItems($hLV_C0)
            ; And reload with all / the top 20 elements in the main array
            For $i = 0 To UBound($aGUT) - 1
                If $i < 13 Then
                    GUICtrlCreateListViewItem($aGUT[$i], $hLV_C0)
                EndIf
            Next
            _GUICtrlListView_EndUpdate($hLV_C0)
            GUICtrlCreateListViewItem($sNumber, $hLV_C1)
            _GUICtrlListView_SimpleSort($hLV_C1,$g_bSortSense,0,False)
        Else
            For $iColumnIndex = 0 to UBound($aSearchListview) -1
                Local $iIndex = _GUICtrlListView_FindText($aSearchListview[$iColumnIndex],$sNumber,-1,False)
                If $iIndex <> -1 Then
                    MsgBox(0,'Found',$aSearchListview[$iColumnIndex])
                Else
                    MsgBox(0,'Not Found',$aSearchListview[$iColumnIndex])
                EndIf
            Next
        EndIf
        $bProceed = False
        $sNumber = ''
    EndIf
Until $idMsg = $GUI_EVENT_CLOSE

your Piccontrol can cause troubles: if the path to pic is incorect a endless searching is done.

Share this post


Link to post
Share on other sites

Aha, of course. Doh.

 

Thank you.


Yours sincerely

Kenneth.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • fosil
      By fosil
      Hi everyone.

      I'm currently working a program that constantly prints out log files through "consolewrite" and the "#AutoIt3Wrapper_Change2CUI=y" wrapper.

      Part of this program requires me to run a batch script.

      My issue is the batch script launches from the same window as consolewrite. I need the batch file to be launched through a different window as currently this causes an issue with the logs (which need to be very precise) but also causes the batch file to produce some funny behavior...

      Does anyone know how I can force the file to run on a second DOS window?

      Thanks in advance!!!
       
      Edit: Im using the "run" command if that helps. I tried "shellexecute" but that seemed to not launch the batch scripts at all.
    • nacerbaaziz
      By nacerbaaziz
      Hello guys
      I have an inquiry regarding bass.dll
      I wanted to record an audio file and did not know the way
      As well as I want to save the file after applying the effects
      can you help me?
      am sorry for my english
      With my greetings and best wishes
    • kenny4896
      By kenny4896
      Hi All,
      I tried my best to looking a solution from this forum or others, but I have no luck. The imagesearch dll working fine in my 64 bits machine, whenever I move the scripts to Win 7 (32 bits), it crashes. ImageSearchDLL.dll, ImageSearch.au3 and my simple scripts are in the same working directory. For win 7 (32 bits) machine, I'm using 32 bits ImageSearchdll.dll, the simple scripts as below:
      #include <ImageSearch.au3>
      Global $y = 0, $x = 0
      Local $search = _ImageSearch("C:\Program Files\AutoIt3\Examples\Images\mypc.PNG", 0, $x, $y, 0)
      if $search = 1 then
         MsgBox(0,"Found","Found my target here..." & $x & "," & $y)
         MouseMove($x, $y, 10)
      Else
         msgbox(0, "Not found","")
      Endif
      However, I received error message below when running the script. Anyone here got clue? 
      Problem Event Name:    APPCRASH
        Application Name:    AutoIt3.exe
        Application Version:    3.3.14.2
        Application Timestamp:    55fc1979
        Fault Module Name:    AutoIt3.exe
        Fault Module Version:    3.3.14.2
        Fault Module Timestamp:    55fc1979
        Exception Code:    c0000005
        Exception Offset:    00020e42
        OS Version:    6.1.7601.2.1.0.256.4
        Locale ID:    17417
        Additional Information 1:    0a9e
        Additional Information 2:    0a9e372d3b4ad19135b953a78882e789
        Additional Information 3:    0a9e
        Additional Information 4:    0a9e372d3b4ad19135b953a78882e789
    • Hanukka
      By Hanukka
      Hello there,
      https://stackoverflow.com/questions/901712/how-to-check-whether-a-checkbox-is-checked-in-jquery
      I want to check the checkbox in the frame which pops up after choosing "run code snippet" option. ( Internet Explorer one would be prefered )
      Can you please please send the right code or some snippet here.. 
    • Fhelipe
      By Fhelipe
      Nothing More