Set Focus to a Control: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
m (Corrected link to System plug-in.)
m (Added snippet from Afrow UK.)
Line 84: Line 84:
   Pop $2
   Pop $2
   Pop $3
   Pop $3
FunctionEnd
</highlight-nsis>
== Snippet of usage (without "ioFile.ini") - by [[User:Afrow UK|Afrow UK]] ==
<highlight-nsis>
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
FunctionEnd

Revision as of 15:27, 26 December 2005

Author: deguix (talk, contrib)


Description

Required: InstallOptions or InstallOptionsEx and System plugins.

This function 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

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