Jump to content

listview items randomly disappear


Dana
 Share

Recommended Posts

I'm not sure if this is a Win7 thing or a graphics driver thing or an Autoit thing, but...

Got a listview. Two columns, nothing unusual:

<lots of stuff removed so this standalone snippet won't run>

$gui2 = GUICreate("Files to be deleted", 780, 600, -1, -1, $WS_OVERLAPPEDWINDOW)

$listid = GUICtrlCreateListView("Size|File Name", 20, 20, 740, 500, BitOR($LVS_SINGLESEL, $LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER), BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
_GUICtrlListView_SetColumnWidth($listid, 0, 100)
_GUICtrlListView_SetColumnWidth($listid, 1, 2000)

For $l = 1 To $matches
    GUICtrlCreateListViewItem(FileGetSize($dellist[$l]) & "|" & $dellist[$l], $listid)
Next
$okbutton = GUICtrlCreateButton("OK", 30, 550, 60)
$cancelbutton = GUICtrlCreateButton("Cancel", 690, 550, 60)
$helpbutton = GUICtrlCreateButton("Help", 470, 550, 60)
$rembutton = GUICtrlCreateButton("Remove", 250, 550, 60)
$removed = 0
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState(@SW_SHOW)

While 1
    $guimsg = GUIGetMsg()
    Switch $guimsg

        Case 0 ; handled by WM_NOTIFY, GUIGetMsg() = 0
            If $doubleclick = 1 Then
                $doubleclick = 0
                ContinueCase
            EndIf
        Case $rembutton
            $editline = _GUICtrlListView_GetSelectionMark($listid) ; zero based so one less than the data line number
            If $editline = -1 Then
                MsgBox(4096, "Error", "No item selected")
            EndIf
            _GUICtrlListView_SetItemText($listid, $editline, "|<removed from list>", -1)
            $dellist[$editline + 1] = ""
            $removed = $removed + 1

        Case $okbutton
            $delyn = MsgBox(1 + 48 + 256 + 0 + 262144, "Delete Files", $matches - $removed & " files will be deleted!" & @CRLF & @CRLF & "Are you sure?")
            If $delyn = 1 Then
                ; delete files here
                _ArrayDisplay($dellist) ; for debug
                exit
            Else
            EndIf

        Case $cancelbutton
            Exit
        Case $GUI_EVENT_CLOSE
            Exit
        Case $helpbutton
            MsgBox(0, "Help", "no help yet")
        Case Else
            ;Sleep(100)
    EndSwitch
WEnd


Exit

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) ; subroutine to detect doubleclicks
    Local $hWndListView = GUICtrlGetHandle($listid)
    Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    Local $iCode = DllStructGetData($tNMHDR, "Code")
    If (($hWndFrom == $hWndListView) And ($iCode == $NM_DBLCLK)) Then
        $doubleclick = 1
    EndIf
EndFunc   ;==>WM_NOTIFY

The problem is that at times, the entire listview control simply disappears. I think it only happens when I first select a listview item and then move the mouse out of the gui, but it's very random. Once the listview disappears, if I click on it, the line I click on reappears... or I can move the scroll bar to scroll it out of view and back, and everything reappears. Regardless, the program itself works.

This is a new computer. I haven't seen this issue on my other (also Win7) computer. It's a new autoit script, largely copied (this morning) from another old program. I never saw the problem with the old program, but I tried the old program today on the new computer and it does it, too.

This happens if I run the script from SciTE or if it's compiled.

Link to comment
Share on other sites

No, it doesn't. There is something buggy about your environment, and I doubt it has anything to do with AutoIt.

Try this, since you couldn't come up with a running demo to talk about:

#include <Array.au3>

Global $aTest[16][8]
For $r = 0 To UBound($aTest) - 1
    For $c = 0 To UBound($aTest, 2) - 1
        $aTest[$r][$c] = $r & "-" & $c
    Next
Next
_ArrayDisplay($aTest, "$aTest")

:)

Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law
Link to comment
Share on other sites

Psalty, sorry, that's what I meant. Because _ArrayDisplay (including your example using it) does it too, on my machine, it's not something in my code. I've also confirmed now that it doesn't do it on my laptop, so it's definitely something peculiar to this specific computer or graphics driver (Win7 64 bit, NVIDIA Quadro 200 graphics).

But I haven't seen it in any other (non AutoIT) programs.

Link to comment
Share on other sites

  • 3 weeks later...
  • 1 year later...

@Dana, did you ever figure out the reason behind this problem?

I am having the same annoyance with my system.

At last, after two thousand years of research, the illudium Q-36 explosive space modulator.Well, back to the old drawing board.

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...