NSIS onblur或onfocus事件等效

时间:2014-11-12 01:58:13

标签: nsis

我需要能够根据另一个(第一个)文本框中的内容填写第二个文本框,我需要在第一个文本框失去焦点时(或第二个文本框获得焦点时)执行此操作。

我无法使用OnChange做我需要做的事情,因为它是在每次按键后触发的,但是只有在用户完成输入后才需要评估第一个文本框的值。

我该怎么做?没有OnBlurOnFocus个事件处理程序,现有的OnChangeOnClickOnBackOnNotify似乎不会出现做这个工作。

1 个答案:

答案 0 :(得分:0)

我认为nsDialogs不能处理这个问题,你可能不得不使用WndSubclass plug-in

Page Custom MyPage
Page InstFiles

!include LogicLib.nsh
!include nsDialogs.nsh
!include WinMessages.nsh
!include WndSubclass.nsh

Var EditName
Var EditNick
Var NickSubProc

Function MyPage
nsDialogs::Create 1018
Pop $0

${NSD_CreateText} 7% 0 77% 12u "Joe Sixpack"
Pop $EditName

${NSD_CreateText} 7% 14u 77% 12u ""
Pop $EditNick
${WndSubclass_Subclass} $EditNick NickSubProc $NickSubProc $NickSubProc

nsDialogs::Show
FunctionEnd

Function NickSubProc
${If} $2 = ${WM_SETFOCUS}
    ${If} $3 = $EditName ; $EditName lost focus?
    ${OrIf} $3 = 0 ; or no previous focus?
        ${NSD_GetText} $EditName $4
        ${If} $4 != ""
            ${NSD_SetText} $EditNick "Foo $4 Bar"
            SendMessage $EditNick ${EM_SETSEL} 0 -1
        ${EndIf}
    ${EndIf}
${EndIf}
FunctionEnd

Section
SectionEnd