Color Indicator for nsDialogs
From NSIS Wiki
| Author: Jan (talk, contrib) |
[edit] Description
An example for color indication in nsDialogs controls. Depending on the input in the text control, the background color will change to yellow (no input) or red (wrong input).
[edit] Function
OutFile ColorfulErrors.exe ;includes !include nsDialogs.nsh !include LogicLib.nsh ;variables Var Dialog Var Directory Var ButtonClear Var ButtonReset ;definitions !define YELLOW "0xfff799" !define RED "0xf69679" ;pages Page custom nsDialogsPage nsDialogsLeave Page InstFiles ;functions Function nsDialogsPage nsDialogs::Create /NOUNLOAD 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} ${NSD_CreateLabel} 0 0 100% 70% "This example uses colors to indicate a state of a text-control. To understand the behaviour, please try out the following:$\n$\n$\t1. add or delete characters from the path$\n$\t2. click the clear button$\n$\t3. click reset$\n$\nAs you can see, the background color of the control changes depending on the input. A wrong path will indicate red, a missing input will indicate yellow. Only the correct path of $$DESKTOP will show the default color." ${NSD_CreateText} 0 70% 75% 20 "$DESKTOP" Pop $Directory ${NSD_OnChange} $Directory OnChange ${NSD_CreateButton} 78% 70% 10% 20 "Clear" Pop $ButtonClear ${NSD_OnClick} $ButtonClear OnClickClear ${NSD_CreateButton} 90% 70% 10% 20 "Reset" Pop $ButtonReset ${NSD_OnClick} $ButtonReset OnClickReset ${NSD_CreateLabel} 0 85% 100% 10% "PS: Unfortunately you *might* have to leave a control to see the effect!" nsDialogs::Show FunctionEnd Function nsDialogsLeave ${NSD_GetText} $Directory $0 ${If} $0 == "" MessageBox MB_YESNO|MB_ICONEXCLAMATION "Enter the path to your Desktop. Ignore?" IDYES +2 Abort ${ElseIfNot} $0 == "$DESKTOP" MessageBox MB_YESNO|MB_ICONEXCLAMATION "Not the path to your Desktop. Ignore?" IDYES +2 Abort ${EndIf} FunctionEnd Function OnChange Pop $0 # HWND ${NSD_GetText} $Directory $0 ${If} $0 == "" SetCtlColors $Directory "" ${YELLOW} ${Else} ${If} ${FileExists} "$0\*.*" SetCtlColors $Directory "" "" ;reset colors ${Else} SetCtlColors $Directory "" ${RED} ${EndIf} ${EndIf} FunctionEnd Function OnClickClear Pop $0 # HWND ${NSD_SetText} $Directory "" FunctionEnd Function OnClickReset Pop $0 # HWND ${NSD_SetText} $Directory "$DESKTOP" FunctionEnd ;(dummy) section Section Quit SectionEnd

