Set Focus to a Control
From NSIS Wiki
Jump to navigationJump to search
Author: deguix (talk, contrib) |
Description
Deprecated by: NSIS 2.24 - FOCUS InstallOptions flag.
Required: InstallOptions plug-in based resource file and System plug-in.
This function sets focus to a control using information from an InstallOptions plug-in based resource file.
Normally, InstallOptions used to set the focus to the first focusable control found in the INI file. This allows specifying another control without messing with the controls' order.
Function Call
Push "Page.ini" ;Page .ini file where the field can be found. Push "Handle" ;Page handle you got when reserving the page. Push "Number" ;Field number to set focus. Call SetFocus
Function Code
;---------------------------------------------------------------------------- ; Title : Set focus to a control ; Short Name : SetFocus ; Last Changed : 22/Feb/2005 ; Code Type : Function ; Code Sub-Type : One-way Input ;---------------------------------------------------------------------------- ; Required : InstallOptions and System plugins. ; Description : Sets focus to a control using InstallOptions. ;---------------------------------------------------------------------------- ; Function Call : Push "Page.ini" ; Page .ini file where the field can be found. ; ; Push "Handle" ; Page handle you got when reserving the page. ; ; Push "Number" ; Field number to set focus. ; ; Call SetFocus ;---------------------------------------------------------------------------- ; Author : Diego Pedroso ; Author Reg. Name : deguix ;---------------------------------------------------------------------------- Function SetFocus Exch $0 ; Control Number Exch Exch $2 ; Page Handle Exch Exch 2 Exch $3 ; Page INI File Exch 2 Push $1 Push $R0 Push $R1 Push $R2 Push $R3 Push $R4 Push $R5 IntOp $1 $0 + 1199 GetDlgItem $1 $2 $1 # Send WM_SETFOCUS message System::Call "user32::SetFocus(i r1, i 0x0007, i,i)i" ReadINIStr $R0 "$3" "Field $0" "Left" ReadINIStr $R1 "$3" "Field $0" "Right" ReadINIStr $R3 "$3" "Field $0" "Top" ReadINIStr $R4 "$3" "Field $0" "Bottom" IntOp $R2 $R1 - $R0 IntOp $R5 $R4 - $R3 System::Call "user32::CreateCaret(i r0, i, i R2, i R5)i" System::Call "user32::ShowCaret(i r0)i" Pop $R5 Pop $R4 Pop $R3 Pop $R2 Pop $R1 Pop $R0 Pop $1 Pop $0 Pop $2 Pop $3 FunctionEnd
Snippet of usage (without "ioFile.ini") - by Afrow UK
Page Custom ShowCustom1 Var HWND Function .onInit !insertmacro MUI_INSTALLOPTIONS_EXTRACT "ioFile.ini" FunctionEnd Function ShowCustom1 !insertmacro MUI_HEADERTEXT "blah" "blah" !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "ioFile.ini" Pop $HWND ;HWND (handle) of dialog Push "$PLUGINSDIR\ioFile.ini" ;Page .ini file where the field can be found. Push "$HWND" ;Page handle you got when reserving the page. Push "1" ;Field number to set focus. Call SetFocus !insertmacro MUI_INSTALLOPTIONS_SHOW FunctionEnd
This project or code is deprecated and is here for archival purposes only. |