0
nsisインストーラのコンボボックスにonClickイベントを適用して、コンボボックスのボタンをクリックして機能を実行できるようにします。nsisのコンボボックスでonclickイベントを呼び出す方法
nsisインストーラのコンボボックスにonClickイベントを適用して、コンボボックスのボタンをクリックして機能を実行できるようにします。nsisのコンボボックスでonclickイベントを呼び出す方法
OnClickイベントは、コンボボックスには適していません、あなたはOnChangeイベントをしたいユーザーはなどの矢印キーでそれを変更することができますので、
変更イベントをトリガーするには、プログラムであなたが直接あなたのハンドラを呼び出すことができますかComboBoxコントロールをだます:私は、ユーザーが下向き矢印をクリックし、ドロップダウンが基づいて読み込まれますdown.Whenドロップの下矢印のクリック時にイベントを発生します迅速reply.Butため
!include nsDialogs.nsh
!include WinMessages.nsh
Page Custom MyPageCreate
Page InstFiles
Function OnComboChange
Pop $0
SendMessage $0 ${CB_GETCURSEL} "" "" $2
System::Call 'USER32::SendMessage(i$0,i${CB_GETLBTEXT},i$2,t.r2)'
MessageBox mb_ok "OnComboChange: $2"
FunctionEnd
Function EmulateChangeMethodA
Pop $0 ; Throw away parameter we don't care about
Push $1
Call OnComboChange
FunctionEnd
Function EmulateChangeMethodB
Pop $0 ; Throw away parameter we don't care about
FindWindow $0 "EDIT" "" $1
SendMessage $1 ${WM_COMMAND} 0x4000000 $0 ; Send WM_COMMAND,MAKELONG(0,EN_UPDATE),hwndEdit
FunctionEnd
Function EmulateChangeMethodC
Pop $0 ; Throw away parameter we don't care about
!ifndef CB_GETCOMBOBOXINFO
!define CB_GETCOMBOBOXINFO 0x0164
!endif
System::Call '*(&l4,&i16,&i16,i,i,i,i)i.r2'
SendMessage $1 ${CB_GETCOMBOBOXINFO} "" $2 ; This only works on Vista+?
System::Call '*$2(i,&i16,&i16,i,i,i,i.r0)'
System::Free $2
SendMessage $1 ${WM_COMMAND} 0x30000 $0 ; ; Send WM_COMMAND,MAKELONG(0,LBN_SELCANCEL),hwndList
FunctionEnd
Function MyPageCreate
nsDialogs::Create 1018
Pop $0
${NSD_CreateCombobox} 0 30u 100% 200u ""
Pop $1 ; This is the only control handle we care about in this example so make sure to never overwrite it!
${NSD_CB_AddString} $1 "Foo"
${NSD_CB_AddString} $1 "Bar"
SendMessage $1 ${CB_SETCURSEL} 0 ""
${NSD_OnChange} $1 OnComboChange
${NSD_CreateButton} 0 50u 33% 12u "Emulate change: A"
Pop $0
${NSD_OnClick} $0 EmulateChangeMethodA
${NSD_CreateButton} 33% 50u 33% 12u "Emulate change: B"
Pop $0
${NSD_OnClick} $0 EmulateChangeMethodB
${NSD_CreateButton} 66% 50u 33% 12u "Emulate change: C"
Pop $0
${NSD_OnClick} $0 EmulateChangeMethodC
nsDialogs::Show
FunctionEnd
感謝解雇されるイベント。 – Shrinidhi
ユーザーはリストを削除せずにコンボボックスを変更できます!私はnsDialogsがドロップダウンイベントをとにかくサポートしているとは思わない。あなたはデザインを考え直すべきです... – Anders