Sign in to follow this  
Followers 0
Gyzmok

Listview - UP - DOWN key -

14 posts in this topic

Hi,

I have a program that has a Listview in it.

I use the UP and DOWN key to scroll through the values in the Listview.

The data in the selected cel is displayed on the screen.

Problem : since autoit v3.2.3.12(beta) I notice that when pressing the UP or DOWN key

FAST enough, the data displayed above the Listview sometimes is not synchronized with the

data in the Listview. ( _IsPressed is not detected fast enough ? )

This is a simplified version to simulate the problem :

;Autoit beta version v3.2.3.12(beta)
#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <Misc.au3>

$GUI =  GuiCreate("Listview",270,400,-1,-1)
$mylist =   GUICtrlCreateListView("Val1|Val2|Val3", 45, 50, 200, 310, _
            BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT), _
            BitOR($LVS_EX_FULLROWSELECT,$LVS_EX_CHECKBOXES, $LVS_EX_FLATSB ))
$label1 = GUICtrlCreateLabel("",70,10,50,20)
$label2 = GUICtrlCreateLabel("",110,10,50,20)
$label3 = GUICtrlCreateLabel("",150,10,50,20)
for $i = 1 to 50
    _GUICtrlListViewInsertItem($mylist,$i-1,$i&"|"&$i&"|"&$i)
next
            
GUISetState(@SW_SHOW,$gui)

While 1
        $msg = GuiGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case Else
    EndSelect
    If _IsPressed("26")and BitAnd(WinGetState("Listview", ""), 8) Then; UP key
        _getinfo()
    EndIf
    If _IsPressed("28")and BitAnd(WinGetState("Listview", ""), 8) Then; DOWN key
        _getinfo()
    EndIf
WEnd

Func _getinfo()
    $data = _GUICtrlListViewGetItemTextArray($mylist,-1)
    _setdata($label1,$data[1])  
    _setdata($label2,$data[2])  
    _setdata($label3,$data[3])  
EndFunc ;==>_getinfo()
;
Func _setdata($label,$field)
    GUICtrlSetData($label,$field)
EndFunc ;==>_setdata($field,$label)

The problem only occurs when pressing the UP or DOWN key FAST enough !

and is very noticeable in Autoit v3.2.3.12(beta)

Is there a better (possibly WM_Notify_Event ?) way to make sure the UP and DOWN keypress

and the data displayed above the Listview stay synchronized ?


D2charkeeper = No more 'expired characters' in D2.File Date Changer = Change the file date(s), attributes and the filename case of multiple files @ once.Updater_full = Copy/Update your autoitscripts, pictures, .mp3, .avi etc ... subdirs from your PC to your memory stick or to your external harddisk. Now with scheduling and logging.Questmapper

Share this post


Link to post
Share on other sites



This isn't what youasked for but it would fix it. The problem is caused because the key press is too fast for every one to be detected by GuiGetMsg(). If processing the key takes longer than the key repeat period then you're fighting a loosing battle, so I expect that this approach might be the easiest way out.

;Autoit beta version v3.2.3.12(beta)
#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <Misc.au3>

$GUI =  GuiCreate("Listview",270,400,-1,-1)
$mylist =   GUICtrlCreateListView("Val1|Val2|Val3", 45, 50, 200, 310, _
            BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT), _
            BitOR($LVS_EX_FULLROWSELECT,$LVS_EX_CHECKBOXES, $LVS_EX_FLATSB ))
$label1 = GUICtrlCreateLabel("",70,10,50,20)
$label2 = GUICtrlCreateLabel("",110,10,50,20)
$label3 = GUICtrlCreateLabel("",150,10,50,20)
$pend = 0
for $i = 1 to 50
    _GUICtrlListViewInsertItem($mylist,$i-1,$i&"|"&$i&"|"&$i)
next
           
GUISetState(@SW_SHOW,$gui)

$pend = TimerInit();[color="#FF0000"];<---------------added[/color]

While 1
#region of extra code

    If TimerDiff($pend) > 300  Then
        _getinfo()
        $pend = TimerInit()
    EndIf

#endregion of extra code

        $msg = GuiGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case Else
    EndSelect
    If _IsPressed("26")and BitAnd(WinGetState("Listview", ""), 8) Then; UP key
        _getinfo()
        ;$pend = 1
    EndIf
    If _IsPressed("28")and BitAnd(WinGetState("Listview", ""), 8) Then; DOWN key
        _getinfo()
        ;$oend = 1
    EndIf
WEnd

Func _getinfo()
    $data = _GUICtrlListViewGetItemTextArray($mylist,-1)
    If Not IsArray($data) Then Return;[color="#FF0000"]<------need to add this[/color]
    _setdata($label1,$data[1]) 
    _setdata($label2,$data[2]) 
    _setdata($label3,$data[3]) 
EndFunc ;==>_getinfo()
;
Func _setdata($label,$field)
    GUICtrlSetData($label,$field)
EndFunc ;==>_setdata($field,$label)

Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script.

Share this post


Link to post
Share on other sites

This,

If _IsPressed("26")and BitAnd(WinGetState("Listview", ""), 8) Then
oÝ÷ Ø(ºW^ƶ+&¢·Æ§²+Þ¶§jëh×6
If _IsPressed("26")and WinActive ($GUI) Then

Paul

Maybe it's less expensive but I don't think it will work. You need to check that the listview has focus when the Up or Down key is pressed otherwise you change the list when you don't mean to.

Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script.

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

Thanks for the reply.

The program was originally compiled with version V.3.2.1.14(beta) and there was no problem in that version, even when hitting UP and DOWN fast ...

Altough the _ispressed() code in the Misc.au3 did not change in the V.3.2.3.12(beta), there is a significant difference...

So, there must be something else that is causing this slower behaviour. :D

Anyway, Martin :) I like your creative solution to the problem and have changed my code into :

(simplified for simulation)

;Autoit beta version v3.2.3.12(beta)
#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <Misc.au3>

$GUI =  GuiCreate("Listview",270,400,-1,-1)
$mylist =   GUICtrlCreateListView("Val1|Val2|Val3", 45, 50, 200, 310, _
            BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT), _
            BitOR($LVS_EX_FULLROWSELECT,$LVS_EX_CHECKBOXES, $LVS_EX_FLATSB ))
$label1 = GUICtrlCreateLabel("",70,10,50,20)
$label2 = GUICtrlCreateLabel("",110,10,50,20)
$label3 = GUICtrlCreateLabel("",150,10,50,20)
$pend = 0
$index_sel = -1;;<---------------added
for $i = 1 to 50
    _GUICtrlListViewInsertItem($mylist,$i-1,$i&"|"&$i&"|"&$i)
next
           
GUISetState(@SW_SHOW,$gui)

$pend = TimerInit()

While 1
    ; do _getinfo only when window is active and timer has expired
    If TimerDiff($pend) > 300 and BitAnd(WinGetState("Listview", ""), 8)  Then
        _getinfo()
        $pend = TimerInit()
    EndIf


        $msg = GuiGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        ;Case ...
        ;Case ...
        ;...
        Case Else
    EndSelect
    ;no need for these anymore ... lose them
;~     If _IsPressed("26")and BitAnd(WinGetState("Listview", ""), 8) Then; UP key
;~         _getinfo()
;~         ;$pend = 1
;~     EndIf
;~     If _IsPressed("28")and BitAnd(WinGetState("Listview", ""), 8) Then; DOWN key
;~         _getinfo()
;~         ;$oend = 1
;~     EndIf
WEnd

Func _getinfo()
    ;refresh the data only when the index in the Listview changed
    $new_index = _GUICtrlListViewGetSelectedIndices($mylist)
    if  $new_index <> $index_sel then
        $data = _GUICtrlListViewGetItemTextArray($mylist,-1)
        If Not IsArray($data) Then Return
        _setdata($label1,$data[1]) 
        _setdata($label2,$data[2]) 
        _setdata($label3,$data[3]) 
        ;...
        ;...
        $index_sel = $new_index
    EndIf
EndFunc ;==>_getinfo()
;
Func _setdata($label,$field)
    GUICtrlSetData($label,$field)
EndFunc ;==>_setdata($field,$label)
Edited by Gyzmok

D2charkeeper = No more 'expired characters' in D2.File Date Changer = Change the file date(s), attributes and the filename case of multiple files @ once.Updater_full = Copy/Update your autoitscripts, pictures, .mp3, .avi etc ... subdirs from your PC to your memory stick or to your external harddisk. Now with scheduling and logging.Questmapper

Share this post


Link to post
Share on other sites

Instead of using _IsPress might look at using Events, I.E. GuiRegisterMsg I believe is what is needed, not at home at the moment or I would bring up a scrap that probably has what you need, I think the event is call SelChange.

I believe I posted it before on the forum.


SciTE for AutoItDirections for Submitting Standard UDFs

 

Don't argue with an idiot; people watching may not be able to tell the difference.

 

Share this post


Link to post
Share on other sites

Ok Gary,

Indeed the best way is to use events ...

I found the Selchange in one of your posts here

I tried to use it into my example, but I don't get it to work :)

Has it something to do with the use of a Listview instead of a List ?

Is one of the Listview Style options the cause ?

Help would be appreciated...

;Autoit beta version v3.2.3.12(beta)
#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <Misc.au3>

Global Const $DebugIt = 1
Global Const $WM_COMMAND = 0x0111

$GUI =  GuiCreate("Listview",270,400,-1,-1)
$mylist =   GUICtrlCreateListView("Val1|Val2|Val3", 45, 50, 200, 310, _
            BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT), _
            BitOR($LVS_EX_FULLROWSELECT,$LVS_EX_CHECKBOXES, $LVS_EX_FLATSB ))
$label1 = GUICtrlCreateLabel("",70,10,50,20)
$label2 = GUICtrlCreateLabel("",110,10,50,20)
$label3 = GUICtrlCreateLabel("",150,10,50,20)
for $i = 1 to 50
    _GUICtrlListViewInsertItem($mylist,$i-1,$i&"|"&$i&"|"&$i)
next
            
GUISetState(@SW_SHOW,$gui)
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

While 1
    $msg = GuiGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case Else
    EndSelect
    ;If _IsPressed("26")and BitAnd(WinGetState("Listview", ""), 8) Then; UP key
    ;   _getinfo()
    ;EndIf
    ;If _IsPressed("28")and BitAnd(WinGetState("Listview", ""), 8) Then; DOWN key
    ;   _getinfo()
    ;EndIf
WEnd
;
Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $nNotifyCode = _HiWord($wParam)
    Local $nID = _LoWord($wParam)
    Local $hCtrl = $lParam
    Local Const $LBN_ERRSPACE = (-2);
    Local Const $LBN_SELCHANGE = 1;
    Local Const $LBN_DBLCLK = 2;
    Local Const $LBN_SELCANCEL = 3;
    Local Const $LBN_SETFOCUS = 4;
    Local Const $LBN_KILLFOCUS = 5;
    Switch $nID
        Case $mylist
            Switch $nNotifyCode
                ;Case $LBN_ERRSPACE
                ;    _DebugPrint ("$LBN_ERRSPACE")
                Case $LBN_SELCHANGE
                    _getinfo()
                    ;_DebugPrint ("$LBN_SELCHANGE")
                ;Case $LBN_SELCANCEL
                ;    _DebugPrint ("$LBN_SELCANCEL")
                ;Case $LBN_SETFOCUS
                ;    _DebugPrint ("$LBN_SETFOCUS")
                ;Case $LBN_KILLFOCUS
                ;    _DebugPrint ("$LBN_KILLFOCUS")
                ;Case $LBN_DBLCLK
                ;    List_DoubleClick()
            EndSwitch
    EndSwitch
    ; Proceed the default Autoit3 internal message commands.
    ; You also can complete let the line out.
    ; !!! But only 'Return' (without any value) will not proceed
    ; the default Autoit3-message in the future !!!
    Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_COMMAND
;
Func _HiWord($x)
    Return BitShift($x, 16)
EndFunc   ;==>_HiWord
;
Func _LoWord($x)
    Return BitAND($x, 0xFFFF)
EndFunc   ;==>_LoWord
;
Func _getinfo()
    $data = _GUICtrlListViewGetItemTextArray($mylist,-1)
    If Not IsArray($data) Then Return
    _setdata($label1,$data[1])  
    _setdata($label2,$data[2])  
    _setdata($label3,$data[3])  
EndFunc ;==>_getinfo()
;
Func _setdata($label,$field)
    GUICtrlSetData($label,$field)
EndFunc ;==>_setdata($field,$label)

D2charkeeper = No more 'expired characters' in D2.File Date Changer = Change the file date(s), attributes and the filename case of multiple files @ once.Updater_full = Copy/Update your autoitscripts, pictures, .mp3, .avi etc ... subdirs from your PC to your memory stick or to your external harddisk. Now with scheduling and logging.Questmapper

Share this post


Link to post
Share on other sites

Can't help you at this time, not at my home pc. But you need to use the events from Listview not ListBox.

Take a look at http://msdn.microsoft.com/library/default....iew/reflist.asp

go to List-View Control Reference, then notifications.


SciTE for AutoItDirections for Submitting Standard UDFs

 

Don't argue with an idiot; people watching may not be able to tell the difference.

 

Share this post


Link to post
Share on other sites

Ok, thanks Gary.

You are right, I had to use the $WM_NOTIFY for Listview instead of the $WM_COMMAND ...

I think the $LVN_ITEMCHANGED notification will do the job.

The solution was in another post from you in this topic : Here

I changed the simplified example code into this : :)

;Autoit beta version v3.2.3.12(beta)
#include <GUIConstants.au3>
#include <GuiListView.au3>
;#include <Misc.au3>

;Global $ListView
Global Const $WM_NOTIFY = 0x004E
;Global Const $DebugIt = 1

;ListView Events
Global Const $NM_FIRST = 0
Global Const $NM_LAST = (-99)
Global Const $NM_OUTOFMEMORY = ($NM_FIRST - 1)
Global Const $NM_CLICK = ($NM_FIRST - 2)
Global Const $NM_DBLCLK = ($NM_FIRST - 3)
Global Const $LVN_FIRST = -100;
Global Const $LVN_ITEMCHANGED = ($LVN_FIRST-1);


$GUI =  GuiCreate("Listview",270,400,-1,-1)
$mylist =   GUICtrlCreateListView("Val1|Val2|Val3", 45, 50, 200, 310, _
            BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT), _
            BitOR($LVS_EX_FULLROWSELECT,$LVS_EX_CHECKBOXES, $LVS_EX_FLATSB ))
$label1 = GUICtrlCreateLabel("",70,10,50,20)
$label2 = GUICtrlCreateLabel("",110,10,50,20)
$label3 = GUICtrlCreateLabel("",150,10,50,20)
for $i = 1 to 50
    _GUICtrlListViewInsertItem($mylist,$i-1,$i&"|"&$i&"|"&$i)
next
            
GUISetState(@SW_SHOW,$gui)
;Register WM_NOTIFY  events
GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events")

While 1
    $msg = GuiGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case Else
    EndSelect
    ;If _IsPressed("26")and BitAnd(WinGetState("Listview", ""), 8) Then; UP key
    ;   _getinfo()
    ;EndIf
    ;If _IsPressed("28")and BitAnd(WinGetState("Listview", ""), 8) Then; DOWN key
    ;   _getinfo()
    ;EndIf
WEnd
;
; WM_NOTIFY event handler
Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam) ;NMHDR (hwndFrom, idFrom, code)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    Select
    Case $wParam = $mylist
        Select
            ;Case $event = $NM_CLICK
            ;    ListView_Click ()
            ;Case $event = $NM_DBLCLK
            ;    ListView_DoubleClick ()
            Case $event = $LVN_ITEMCHANGED
                _getinfo()
            EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
EndFunc   ;==>WM_Notify_Events
;
Func _getinfo()
    $data = _GUICtrlListViewGetItemTextArray($mylist,-1)
    If Not IsArray($data) Then Return
    _setdata($label1,$data[1])  
    _setdata($label2,$data[2])  
    _setdata($label3,$data[3])  
EndFunc ;==>_getinfo()
;
Func _setdata($label,$field)
    GUICtrlSetData($label,$field)
EndFunc ;==>_setdata($field,$label)

This really seems to be the best solution to be sure the UP and DOWN key-presses are all detected inside the Listview.

The scroll speed is also great.

Thanks !


D2charkeeper = No more 'expired characters' in D2.File Date Changer = Change the file date(s), attributes and the filename case of multiple files @ once.Updater_full = Copy/Update your autoitscripts, pictures, .mp3, .avi etc ... subdirs from your PC to your memory stick or to your external harddisk. Now with scheduling and logging.Questmapper

Share this post


Link to post
Share on other sites

I am having "second thoughts" about using the $LVN_ITEMCHANGED event notification for this problem.

In the above simple example it works fine.

But in a larger application it gets messy.

The problem is : the $LVN_ITEMCHANGED notification comes ALOT !

When (re)populating the Listview with new values (GUICtrlListViewInsertItem), the $LVN_ITEMCHANGED is called all the time !

You could solve this by setting a switch (condition).

But also when pushing UP and DOWN, the $LVN_ITEMCHANGED notification comes 3 times for each keypress !

See also Here and Here

I went back to a variant of the "timer" (previous) solution.


D2charkeeper = No more 'expired characters' in D2.File Date Changer = Change the file date(s), attributes and the filename case of multiple files @ once.Updater_full = Copy/Update your autoitscripts, pictures, .mp3, .avi etc ... subdirs from your PC to your memory stick or to your external harddisk. Now with scheduling and logging.Questmapper

Share this post


Link to post
Share on other sites

Maybe:

;Autoit beta version v3.2.3.12(beta)
#include <GUIConstants.au3>
#include <GuiListView.au3>
;#include <Misc.au3>

;Global $ListView
Global Const $WM_NOTIFY = 0x004E
;Global Const $DebugIt = 1

;ListView Events
Global Const $NM_FIRST = 0
Global Const $NM_LAST = (-99)
Global Const $NM_OUTOFMEMORY = ($NM_FIRST - 1)
Global Const $NM_CLICK = ($NM_FIRST - 2)
Global Const $NM_DBLCLK = ($NM_FIRST - 3)
Global Const $LVN_FIRST = -100;
Global Const $LVN_ITEMCHANGED = ($LVN_FIRST-1);


$GUI =  GuiCreate("Listview",270,400,-1,-1)
$mylist =   GUICtrlCreateListView("Val1|Val2|Val3", 45, 50, 200, 310, _
            BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT), _
            BitOR($LVS_EX_FULLROWSELECT,$LVS_EX_CHECKBOXES, $LVS_EX_FLATSB ))
$label1 = GUICtrlCreateLabel("",70,10,50,20)
$label2 = GUICtrlCreateLabel("",110,10,50,20)
$label3 = GUICtrlCreateLabel("",150,10,50,20)
for $i = 1 to 50
    _GUICtrlListViewInsertItem($mylist,$i-1,$i&"|"&$i&"|"&$i)
next
           
GUISetState(@SW_SHOW,$gui)
;Register WM_NOTIFY  events
GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events")

While 1
    $msg = GuiGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case Else
    EndSelect
    ;If _IsPressed("26")and BitAnd(WinGetState("Listview", ""), 8) Then; UP key
    ;   _getinfo()
    ;EndIf
    ;If _IsPressed("28")and BitAnd(WinGetState("Listview", ""), 8) Then; DOWN key
    ;   _getinfo()
    ;EndIf
WEnd
;
; WM_NOTIFY event handler
Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int;uint;uint;uint;int;int", $lParam) ;     NMHDR hdr; iItem; iSubItem; uNewState; uOldState; uChanged; ptAction;

    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    Select
    Case $wParam = $mylist
        Select
            ;Case $event = $NM_CLICK
            ;    ListView_Click ()
            ;Case $event = $NM_DBLCLK
            ;    ListView_DoubleClick ()
                Case $event = $LVN_ITEMCHANGED
                If DllStructGetData($tagNMHDR, 6) = 3 And DllStructGetData($tagNMHDR, 7) = 0 And DllStructGetData($tagNMHDR, 8) = 8 Then _getinfo()
            EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
     Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_Notify_Events
;
Func _getinfo()
    ConsoleWrite("_getinfo" & @LF)
    $data = _GUICtrlListViewGetItemTextArray($mylist,-1)
    If Not IsArray($data) Then Return
    _setdata($label1,$data[1]) 
    _setdata($label2,$data[2]) 
    _setdata($label3,$data[3]) 
EndFunc ;==>_getinfo()
;
Func _setdata($label,$field)
    GUICtrlSetData($label,$field)
EndFunc ;==>_setdata($field,$label)

SciTE for AutoItDirections for Submitting Standard UDFs

 

Don't argue with an idiot; people watching may not be able to tell the difference.

 

Share this post


Link to post
Share on other sites

:D

Yes ! this is what I was looking for.

The _getinfo() is only called when needed (UP - DOWN - MOUSECLICK in the Listview)

only once and not during population of the Listview !

Very nice !

I am 'trying' to understand :

...
If DllStructGetData($tagNMHDR, 6) = 3 And DllStructGetData($tagNMHDR, 7) = 0 And DllStructGetData($tagNMHDR, 8) = 8 Then 
...

I found this

Please can you answer some of these questions ?

Is DllStructGetData($tagNMHDR, 6) = uChanged ,DllStructGetData($tagNMHDR, 7) = ptAction and DllStructGetData($tagNMHDR, 8) = lParam ?

How do you know what the respectively values 3,0 and 8 stands for ?

Where can I find more information about the values of the members inside a 'struct' ?

You are a great programmer ! :)


D2charkeeper = No more 'expired characters' in D2.File Date Changer = Change the file date(s), attributes and the filename case of multiple files @ once.Updater_full = Copy/Update your autoitscripts, pictures, .mp3, .avi etc ... subdirs from your PC to your memory stick or to your external harddisk. Now with scheduling and logging.Questmapper

Share this post


Link to post
Share on other sites

:)

Yes ! this is what I was looking for.

The _getinfo() is only called when needed (UP - DOWN - MOUSECLICK in the Listview)

only once and not during population of the Listview !

Very nice !

I am 'trying' to understand :

...
If DllStructGetData($tagNMHDR, 6) = 3 And DllStructGetData($tagNMHDR, 7) = 0 And DllStructGetData($tagNMHDR, 8) = 8 Then 
...
oÝ÷ Øèºwn®

NMHDR is 1 - 3

iItem - 4

iSubItem - 5

uNewState - 6

uOldState - 7

uChanged - 8

just did some testing to see what values I was looking for in which ones so it only fired 1 time.

Gary


SciTE for AutoItDirections for Submitting Standard UDFs

 

Don't argue with an idiot; people watching may not be able to tell the difference.

 

Share this post


Link to post
Share on other sites

just did some testing to see what values I was looking for in which ones so it only fired 1 time.

I understand :)

TNX !


D2charkeeper = No more 'expired characters' in D2.File Date Changer = Change the file date(s), attributes and the filename case of multiple files @ once.Updater_full = Copy/Update your autoitscripts, pictures, .mp3, .avi etc ... subdirs from your PC to your memory stick or to your external harddisk. Now with scheduling and logging.Questmapper

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
Sign in to follow this  
Followers 0