Skip to content
⌘ NSIS Forum Archive

DoubleClick (ListBox)

3 posts

nashtor#

DoubleClick (ListBox)

Hello there!

Whenever a user DoubleClicks an entry in a ListBox I am trying to call a function.
Searching the documentation and this forum did not help me: found nothing concerning DoubleClicks ...
I tried intercepting LBN_DBLCLK (--> http://msdn.microsoft.com/en-us/library/ms997541.aspx) with NSD_OnNotify but it never fires ...
(NSD_OnClick is not working for me either ...)

At the moment I am using NSD_OnChange to simulate a very slow and bad 'Double'Click.

Is there any way to call a function if someone doubleclicks an entry in a ListBox?
(... Am I doing something stupid?)

;--------------------------------
;Include
    
    !include "MUI2.nsh"
    !include "nsDialogs.nsh"
;--------------------------------
;General
!define VERSION "0.1.1"
Name "LB DoubleClick Test"
OutFile "LB_DoubleClick_Test.exe"
RequestExecutionLevel user
;--------------------------------
;Variables
    
    Var LB_test
    Var CurrentString
    
    
;--------------------------------
;Pages
    
    Page custom nsDialogsMain
    
;--------------------------------
;Languages
    
    !insertmacro MUI_LANGUAGE "English"
    
    
;--------------------------------
;Descriptions
    ;Header
    LangString "^SetupCaption" ${LANG_ENGLISH} "$(^Name) v${VERSION}"
    LangString PAGEMAIN_TITLE ${LANG_ENGLISH} "ListBox DoubleClick Test"
    LangString PAGEMAIN_SUBTITLE ${LANG_ENGLISH} "Does a DoubleClick even work ?"
    
    
;--------------------------------
;Makros
    
    ;select (first, second, third ... last) item of a ListBox
    !macro _NSD_LB_SelectItem CONTROL ITEM
        SendMessage ${CONTROL} ${LB_SETCURSEL} ${ITEM} 0
    !macroend
    !define NSD_LB_SelectItem "!insertmacro _NSD_LB_SelectItem"
;--------------------------------
;Installer Sections
Section ""
SectionEnd
;--------------------------------
;Installer Functions
;PagesAndExitFunctions - START
Function nsDialogsMain
    !insertmacro MUI_HEADER_TEXT $(PAGEMAIN_TITLE) $(PAGEMAIN_SUBTITLE)
    
    nsDialogs::Create 1018
        Pop $0
    ${If} $0 == error
        Abort
    ${EndIf}
    
    ${NSD_CreateListBox} 30% 0 40% 60% ""
        Pop $LB_test
        ${NSD_OnNotify} $LB_test func_OnNotify
        ${NSD_OnClick} $LB_test func_OnClick
        ${NSD_OnChange} $LB_test func_OnChange
        Call func_fillListBox
    
    nsDialogs::Show
    
FunctionEnd
;PagesAndExitFunctions - END
Function func_fillListBox
    ${NSD_LB_Clear} $LB_test $0
    ${NSD_LB_AddString} $LB_test "testString1"
    ${NSD_LB_AddString} $LB_test "testString2"
    ${NSD_LB_AddString} $LB_test "testString3"
    ;select first item in ListBox
    ${NSD_LB_SelectItem} $LB_test 0
    
FunctionEnd
;this will never fire ...
Function func_OnNotify
    
    ${NSD_LB_GetSelection} $LB_test $CurrentString
    MessageBox MB_OK "$CurrentString:$\r$\nfunc_OnNotify fired ..."
    
    ; for func_OnChange:
    StrCpy $CurrentString ""
    
FunctionEnd
;this will never fire ...
Function func_OnClick
    
    ${NSD_LB_GetSelection} $LB_test $CurrentString
    MessageBox MB_OK "$CurrentString:$\r$\nfunc_OnClick fired ..."
    
    ; for func_OnChange:
    StrCpy $CurrentString ""
    
FunctionEnd
Function func_OnChange
    
    ;it fires even if clicked twice(slowly) on an empty field of ListBox ...
    
    ; just to imitate a very slow double click 1/2:
    ${NSD_LB_GetSelection} $LB_test $0
    StrCmp "$CurrentString" "$0" +3 0
        StrCpy $CurrentString $0
        Abort ###
        
    MessageBox MB_OK "$CurrentString:$\r$\nfunc_OnChange fired ..."
    
    ; just to imitate a very slow double click 2/2:
    StrCpy "$CurrentString" ""
    
FunctionEnd 
Anders#
nsDialogs is rather limited when it comes to which events are passed on and NSD_OnNotify is probably only for WM_NOTIFY (ListView)
nashtor#
What a shame! Seems like I have to get used to my 'Double'Click function...
Nonetheless: thank you for your really fast replay!