2014-11-12 1 views
1

다른 텍스트 상자의 내용을 기반으로 두 번째 텍스트 상자를 채울 수 있어야하고 첫 번째 텍스트 상자가 포커스를 잃을 때 (또는 두 번째 텍스트 상자가 포커스를 얻음).NSIS onblur 또는 onfocus 이벤트 해당

모든 키 누르기 후에 트리거되기 때문에 OnChange을 사용하여 수행해야 할 작업을 수행 할 수 없지만 사용자가 입력을 마친 후에 만 ​​첫 번째 텍스트 상자의 값을 평가해야합니다.

어떻게하면됩니까? OnBlur 또는 OnFocus 이벤트 핸들러가없고 기존 이벤트 핸들러가 OnChange, OnClick, OnBack, OnNotify 인 것 같습니다.

내가 nsDialogs이 처리 수 있다고 생각하지 않습니다

답변

0

, 당신은 아마도 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