Announcement

Collapse
No announcement yet.

nsdialogs combobox problem

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • nsdialogs combobox problem

    Hello,

    I am having a problem with a nsdialogs combo box list which seems to behave differently when i type something in to when i click and select an option from the list.

    I add A, B , and C to the list and have ${NSD_OnChange} bring up a message when it is changed. If i type C in to the box the ${NSD_OnChange} messagebox says "C", whereas if i select "C" in the drop down box it still says "A".

    I cant figure out what im doing wrong however.

    Here is some example code..

    code:
    Name test
    OutFile test.exe
    !include nsDialogs.nsh
    XPStyle on
    Page custom nsDialogsPage
    Page instfiles

    var /global Dialog
    var /global COMBOBOX


    Function nsDialogsPage

    nsDialogs::Create 1018
    Pop $Dialog
    ${If} $Dialog == error
    Abort
    ${EndIf}


    ${NSD_CreateComboBox} 0 30 80% 12u "test"
    pop $COMBOBOX

    ${NSD_CB_AddString} $COMBOBOX A
    ${NSD_CB_AddString} $COMBOBOX B
    ${NSD_CB_AddString} $COMBOBOX C
    ${NSD_CB_SelectString} $COMBOBOX A

    ${NSD_OnChange} $COMBOBOX SourceChanged

    nsDialogs::Show

    FunctionEnd


    Function SourceChanged
    ${NSD_GetText} $COMBOBOX $0
    messagebox mb_ok "selection is $0"
    FunctionEnd


    Section ""
    SectionEnd

    Thanks for any help!

  • #2
    Use a "leave" function to retrieve the combo box selection
    code:
    Name test
    OutFile test.exe

    RequestExecutionLevel "user"

    !include nsDialogs.nsh
    XPStyle on
    Page custom nsDialogsPage nsDialogsPageLeave
    Page instfiles

    var /global Dialog
    var /global COMBOBOX


    Function nsDialogsPage

    nsDialogs::Create 1018
    Pop $Dialog
    ${If} $Dialog == error
    Abort
    ${EndIf}


    ${NSD_CreateComboBox} 0 30 80% 12u "test"
    pop $COMBOBOX

    ${NSD_CB_AddString} $COMBOBOX A
    ${NSD_CB_AddString} $COMBOBOX B
    ${NSD_CB_AddString} $COMBOBOX C
    ${NSD_CB_SelectString} $COMBOBOX A

    nsDialogs::Show

    FunctionEnd


    Function nsDialogsPageLeave
    ${NSD_GetText} $COMBOBOX $0
    messagebox mb_ok "selection is $0"
    FunctionEnd


    Section ""
    SectionEnd

    Comment


    • #3
      Hey thanks alot for the suggestion.

      Unfortunately i wanted to work some stuff out on that page and display the results on that page (I am filling the combobox with drive letters / directories and want to display the sizes using getsize/drivespace to get of the selected / entered one on that page before continuing.)

      I have looked in to using Winmessages.nsh but cant quite figure it out either. I might just resort to using a droplistbox which seems to work.

      Many thanks !

      Comment


      • #4
        Hy there, I had the same problem. I have solved it by using messages, such as CB_GETCURSEL & CB_GETLBTEXT.
        Here is a full text:

        code:

        Var hCombo
        Var PrevIdx

        Function OnComboChange
        SendMessage $hCombo ${CB_GETCURSEL} 0 0 $0
        ${If} $PrevIdx == $0
        ${NSD_GetText} $hCombo $2
        ${Else}
        System::Alloc 64
        Pop $1
        SendMessage $hCombo ${CB_GETLBTEXT} $0 $1
        System::Call "*$1(&t32.r2)"
        System::Free $1
        ${EndIf}
        StrCpy $PrevIdx $0
        MessageBox MB_OK $2
        FunctionEnd

        Function Create

        ; ...

        ${NSD_CreateComboBox} 75% 85% 20% 20 ""
        Pop $hCombo
        ${NSD_CB_AddString} $hCombo "x"
        ${NSD_CB_AddString} $hCombo "y"
        SendMessage $hCombo ${CB_GETCURSEL} 0 0 $PrevIdx
        ${NSD_OnChange} $hCombo OnComboChange

        ; ...

        FunctionEnd


        Comment

        Working...
        X
        😀
        🥰
        🤢
        😎
        😡
        👍
        👎