SkinnedControls plug-in
Download Link
SkinnedControls1.4.zip (236 KB) SkinnedControls1.4.exe (512 KB)
Description
This NSIS plug-in allows to skin all buttons and scroll bars of your installer and allows to select text colors on buttons even those on custom pages.
It was developed with an aim of integrate it in UltraModernUI, an new user interface with a style like the most recent installers for NSIS. (http://ultramodernui.sourceforge.net)
This plugin was used in early version of Graphical Installer: www.graphical-installer.com (see image below) so I (Slappy) fixed some bugs in version 1.2.
Two versions of the plugin are available: an ANSI and an UNICODE.
How To Use
See example and documentation in Examples\SkinnedControls\ from package
SkinnedControls::skinit Function
Skins the installer's buttons and scrollbars with selected bitmaps and sets colors for texts on buttons.
Syntax
; Skin the button Function .onInit InitPluginsDir ; Extract bitmaps for buttons File "/oname=$PLUGINSDIR\button.bmp" "${NSISDIR}\Contrib\SkinnedControls\skins\defaultbtn.bmp" File "/oname=$PLUGINSDIR\scrollbar.bmp" "${NSISDIR}\Contrib\SkinnedControls\skins\defaultsb.bmp" FunctionEnd Function myGUIInit ; start the plugin ; the /disabledtextcolor, /selectedtextcolor and /textcolor parameters are optionnal SkinnedControls::skinit /NOUNLOAD \ /disabledtextcolor=808080 \ /selectedtextcolor=000080 \ /textcolor=000000 \ "/scrollbar=$PLUGINSDIR\scrollbar.bmp" \ "/button=$PLUGINSDIR\button.bmp"
Parameters
- /SetReturn
- Force the method to return "success" on the stack or an error string if there was an error.
This parameter must be set first.
- /scrollbar=$PLUGINSDIR\scrollbar.bmp
- Scrollbar image (se below).
- /button=$PLUGINSDIR\button.bmp
- Button image (se below).
- /disabledtextcolor=808080
- Color of text when button is disabled (Format is in hex: RRGGBB as CSS colors).
- /selectedtextcolor=000080
- Color of text when button is being clicked (Format is in hex: RRGGBB as CSS colors).
- /textcolor=000000
- Color for normal state of button (Format is in hex: RRGGBB as CSS colors).
One of /scrollbar and /button parameter is required, other is optionnal.
If /SetReturn is set, the method returns "success" on the stack or an error string if there was an error. Else, error message boxes displayed automatically.
Parameter names are now ignore case.
SkinnedControls::setskin DLL Function
Modifiy parameter. Use the same parameters as skinit
SkinnedControls::unskinit DLL Function
Releases the plug-in resources (usually called in the (un).onGUIEnd function). This method is now optional thanks to the new NSIS plug-in API.
Syntax
Function .onGUIEnd ; stop the plugin SkinnedControls::unskinit FunctionEnd
Problems
- During the installation, the "Show Detail" button is unskinned:
You can insert this instruction on your script to workaround this bug, for classic UI:
ChangeUI IDD_INSTFILES "${NSISDIR}\Contrib\UIs\default_sb.exe"
for ModernUI:
ChangeUI IDD_INSTFILES "${NSISDIR}\Contrib\UIs\modern_sb.exe"
- When using the previous workaround the "Show Detail" button is invisible:
Modern UI set the XPStyle instruction to On automatically. XPStyle must be set to Off with the previous workaround otherwise the "Show Detail" button will disappear:
XPStyle Off
- When you use MessageBox function on some page (or some other pop-up windows like Banner plug-in), the some page buttons and scrollbars got unskinned:
You can use this tricky workaround to fix this:
MessageBox MB_OK "This message causes SkinnedControls bug..." ; After clicking OK the buttons lost their skin SendMessage $HWNDPARENT ${WM_MENUDRAG} 0 0 ; Do this to force reskin ;If you use UMUI or MUIEx interfaces, you can simply insert macro: !insertmacro UMUI_FIX_BUTTONS_SKIN
We used WM_MENUDRAG message (which is normally unused) to notify window to put another refresh message into queue -> to force redrawing. See the source code how it works.
- The plug-in does not work on Windows 95:
Plug-ins compiled with Visual Studio 2008 is not executed... Microsoft says: "Beginning with Visual C++ 2008, Visual C++ does not support targeting Windows 95, Windows 98, Windows ME, or Windows NT [4]."
- Scrollbars are not skinned on Windows 9x/Me:
The Cool Scrollbar Library, that the plug-in use, work only on Windows NT kernel.
TODO
Help wanted for improve this plug-in:
- Find better ways to fix buttons which unskin to avoid crappy workaround.
- Support transparency for buttons.
- Ability to skin checkboxes and radio buttons (transparency background required).
- Ability to skin dropdown scroll bars and arrow down button.
- Ability to skin MessageBox buttons and text and background colors.
Versions History
- 1.4 (December 25, 2016)
- Migrate to the new NSIS plug-in API;
- The unskinit function in now optional thanks to the new NSIS plug-in API;
- Parameter names now ignore case.
- 1.3 (August 27, 2016)
- Button image size are no more limited to allow smoother gradients (see above);
- "success" or error messages is no longer pushed in the stack by skinit and setskin methods unless the new /SetReturn parameter is set;
- Fix License text and other RichText scrollbars was not skinned in Unicode Build;
- Code cleanup;
- Rewritten documentation.
- 1.2 (2011)
- Fixed unskinning buttons after MessageBox is shown (see above)
- Project was converted to Visual Studio 2008 format
- 1.1 (2010)
- Little bug fixes & Unicode build
- 1.0 (2009)
- First public release.
- Replace the former SkinnedButton plug-in.
Credits
Based on [nsis.sourceforge.net/Wansis_plug-in wansis], a Plug-in written by Saivert that skins NSIS like Winamp
and use the wa_dlg.h courtesy of Nullsoft, Inc.
as well as the Cool Scrollbar Library Copyright (c) J Brown 2001.
- Version 1.0, 1.3, 1.4, written by SuperPat
- Version 1.1 by Tallmaris
- Version 1.2 by Slappy Graphical Installer: www.graphical-installer.com