MAKEMSI quickly and reliably creates MSI files in a non-programmatic way
Have your say! Join the MAKEMSI discussion list or view archive! Suggest improvements. No question too simple or too complex.
[Bottom][Contents][Prev]: COMPANY.MMH[Next]: UISAMPLE.MSI
Have your say! Join the MAKEMSI discussion list or view archive! Suggest improvements. No question too simple or too complex.
\->MAKEMSI Installs...->Available Frameworks->Create New MSI Installers->Preferred MSI Interface for Building a Complete MSI->Department and Company Headers->UISAMPLE.MMH

UISAMPLE.MMH

Automatically included by "COMPANY.MMH" (logically a part of it), see "Preferred MSI Interface for Building a Complete MSI" for more details...

;----------------------------------------------------------------------------
;
;    MODULE NAME:   UISAMPLE.MMH
;
;        $Author:   USER "Dennis"  $
;      $Revision:   1.40  $
;          $Date:   12 Nov 2009 17:45:30  $
;       $Logfile:   C:/DBAREIS/Projects.PVCS/Win32/MakeMsi/uisample.mmh.pvcs  $
;      COPYRIGHT:   (C)opyright Dennis Bareis, Australia, 2003
;                   All rights reserved.
;
; This header file is only used by "COMPANY.MMH", you may include it yourself
; if you use "uisample.msi" as a template but don't use "COMPANY.MMH" etc.
;
; "COMPANY.MMH" includes this header after all YOUR script has executes for
; these main reasons:
;
;   1. If your script fails your time hasn't been wasted by any atandard
;      processing done by this header.
;   2. If you insert dialogs following the UISAMPLE.MSI look and feel they
;      can be adjusted exactly the same as occurs for the "standard" ones.
;
; Note that some "UISAMPLE" code was left in "COMPANY.MMH" where its was more
; appropriate that it remain there. This file should really only hold cosmetic
; type "UISAMPLE" changes.
;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;--- Allow user to disable this completely ----------------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_DISABLE_COMPLETELY       N          ;;Y/N
#if ['<$UISAMPLE_DISABLE_COMPLETELY>' <> 'N']
    #eof 1
#endif
#NextId
#NextId LOCK "UISAMPLE.MMH"


;----------------------------------------------------------------------------
;--- Allow user to insert dialogs etc WITH ORIGINAL Look and feel -----------
;----------------------------------------------------------------------------
#define? UISAMPLE_BEFORE_ANYTHING_DONE
<$UISAMPLE_BEFORE_ANYTHING_DONE>


;----------------------------------------------------------------------------
;--- Remove "Typical" button? -----------------------------------------------
;----------------------------------------------------------------------------
;--- [TIPS.DH-Example-TypicalButton] ----------------------------------------
#( ''
   #define DisableTypicalSetupButtonIfRequired

   ;--- Decide if we need the typical button --------------------------------
   dim DisableTypicalButton : DisableTypicalButton = true<?NewLine>
   #if ['<$UISAMPLE_DISABLE_TYPICAL_SETUP>' = 'S']
       ;--- May want to disable it... ---------------------------------------
       <$Table "Feature">
           #(
               <$Row
                   @WHERE=^<$UISAMPLE_DISABLE_TYPICAL_SETUP_IF_LEVEL>^
                   @Code="Y"
               >
           #)
               ;--- At least one feature that is deselected by default ----------
               DisableTypicalButton = false
           <$/Row>
       <$/Table>
   #endif

   ;--- Disable the button? -------------------------------------------------
   if  DisableTypicalButton then<?NewLine>
       ;--- Disable the "Typical" control (its the same as "Complete") ------
       <$Table "Control">
           ;--- Hide the "Typical" controls ---------------------------------
           #(
               <$Row    @Where="Dialog_ = 'SetupTypeDlg' AND Control = 'TypicalLabel'"
                           @OK=^? = 1^
                   *Attributes=^0^
               >
           #)
           #(
               <$Row    @Where="Dialog_ = 'SetupTypeDlg' AND Control = 'TypicalButton'"
                           @OK=^? = 1^
                   *Attributes=^0^
               >
           #)
           #(
               <$Row    @Where="Dialog_ = 'SetupTypeDlg' AND Control = 'TypicalText'"
                           @OK=^? = 1^
                   *Attributes=^0^
               >
           #)

           ;--- Move the "Custom" button up a bit to make it look better ----
           #(
               <$Row @Where="Dialog_ = 'SetupTypeDlg' AND Control = 'CustomButton'"
                   @OK='=1'
                     Y="70"      ;;Previous value = 118
               >
           #)
           #(
               <$Row @Where="Dialog_ = 'SetupTypeDlg' AND Control = 'CustomLabel'"
                   @OK='=1'
                     Y="70"      ;;Previous value = 118
               >
           #)
           #(
               <$Row @Where="Dialog_ = 'SetupTypeDlg' AND Control = 'CustomText'"
                   @OK='=1'
                     Y="83"      ;;Previous value = 131
               >
           #)

           ;--- Tweek the "Complete" button ---------------------------------
           #define? UISAMPLE_TWEEKED_COMPLETE_BUTTON_LABEL &Install
           #define? UISAMPLE_TWEEKED_COMPLETE_BUTTON_TEXT  Install the complete product in the default location.
           #(
               <$Row @Where="Dialog_ = 'SetupTypeDlg' AND Control = 'CompleteLabel'"
                        @OK='=1'
                       Text="[DlgTitleFont]<$UISAMPLE_TWEEKED_COMPLETE_BUTTON_LABEL>"
               >
           #)
           #(
               <$Row @Where="Dialog_ = 'SetupTypeDlg' AND Control = 'CompleteText'"
                        @OK='=1'
                       Text="<$UISAMPLE_TWEEKED_COMPLETE_BUTTON_TEXT>"
               >
           #)
       <$/Table>
   end if
#)
#define? UISAMPLE_DISABLE_TYPICAL_SETUP   S           ;;User A=Always, S=Sometimes or N=Never
#if    ['<$UISAMPLE_DISABLE_TYPICAL_SETUP>' <> 'N']
   ;--- (either "A" or "S") Disable button if any features have a level > 3 -
   #define? UISAMPLE_DISABLE_TYPICAL_SETUP_IF_LEVEL `Level` > 3  ;;Any matches mean that "Typical" <> "Complete"
   ;#OnExit #51 <$DisableTypicalSetupButtonIfRequired>
   <$DisableTypicalSetupButtonIfRequired>
#endif
;--- [TIPS.DH-Example-TypicalButton] ----------------------------------------




;----------------------------------------------------------------------------
;--- PROGRESS BAR: Add a 2nd text control for more detail in custom actions -
;----------------------------------------------------------------------------
#define? UISAMPLE_ADD_2ND_LINE_TO_PROGRESS_DIALOG Y
#if ['<$UISAMPLE_ADD_2ND_LINE_TO_PROGRESS_DIALOG>' = 'Y']
;--- User did not disable updating of the progress control ------------------
;--- [TIPS.DH-Example-ProgressBar2ndLine] -----------------------------------
<$Table "Control">
#(
   ;--- Add the progress control for the 2nd line ---------------------------
   <$Row
            Dialog_="ProgressDlg"
            Control="ActionData"
               Type="Text"
           Property=""
                  X="35"
                  Y="130"
              Width="300"
             Height="90"
        *Attributes="msidbControlAttributesNoPrefix or msidbControlAttributesVisible or msidbControlAttributesEnabled"
               Text=""
       Control_Next=""
               Help=""
   >
#)
<$/Table>
<$Table "EventMapping">
#(
   ;--- Map the event to the control ----------------------------------------
   <$Row
         Dialog_="ProgressDlg"
        Control_="ActionData"
           Event="ActionData"
       Attribute="Text"
   >
#)
<$/Table>
;--- [TIPS.DH-Example-ProgressBar2ndLine] -----------------------------------
#endif


;----------------------------------------------------------------------------
;--- Need "no prefix" on first line text of progress bar! -------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_ADD_NOPREFIX_TO_1ST_LINE_OF_PROGRESS_DIALOG Y
#if ['<$UISAMPLE_ADD_NOPREFIX_TO_1ST_LINE_OF_PROGRESS_DIALOG>' = 'Y']
    <$Table "Control">
    #(
        <$Row
                @Where="`Dialog_` = 'ProgressDlg' AND `Control` = 'ActionText'"
                   @OK='=1'
              @SelfRef="{*}"
           *Attributes="{*} or msidbControlAttributesNoPrefix"
        >
    #)
    <$/Table>
#endif



;----------------------------------------------------------------------------
;--- PROGRESS BAR: Fix the "Installing : blah blah" text control ------------
;----------------------------------------------------------------------------
#define? UISAMPLE_LENGTHEN_TITLE_TEXT_CONTROL Y
#if ['<$UISAMPLE_LENGTHEN_TITLE_TEXT_CONTROL>' = 'Y']
    <$Table "Control">
       #(
           <$Row
               @Where="Dialog_ = 'ProgressDlg' AND Control = 'Title'"
                  @OK='=1'
                Width="300"      ;;Previous value = 200
               Height="30"       ;;Previous value = 15
           >
       #)
   <$/Table>
#endif


;----------------------------------------------------------------------------
;--- PROGRESS BAR: Want "continuous progress bar" (red bar - actually TitleBar color) ---
;----------------------------------------------------------------------------
#define? UISAMPLE_PROGRESSBAR_WANT_CONTINUOUS     Y
#if ['<$UISAMPLE_PROGRESSBAR_WANT_CONTINUOUS>' = 'Y']
    <$Table "Control">
       #(
           <$Row
                   @Where="Dialog_ = 'ProgressDlg' AND Control = 'ProgressBar'"
                      @OK='=1'
               Attributes="1"      ;;Previous value = 65537
           >
       #)
    <$/Table>
#endif


;----------------------------------------------------------------------------
;--- PROGRESS BAR: Better "status" (Cadebug() text line 1) ------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_PROGRESSBAR_CLOSER_AND_LONGER_ACTIONTEXT  Y
#if ['<$UISAMPLE_PROGRESSBAR_CLOSER_AND_LONGER_ACTIONTEXT>' = 'Y']
    <$Table "Control">
    #(
       ;--- Contains "status:" ----------------------------------------------
       <$Row
           @Where="`Dialog_` = 'ProgressDlg' AND `Control` = 'StatusLabel'"
              @OK='=1'
            Width="30"      ;;Previous value = 35 - Need to shorten or it overwrites the next control (below) afters its moved left
       >
    #)
    #(
       ;--- ActionText control that follows the "status:" text --------------
       <$Row
           @Where="`Dialog_` = 'ProgressDlg' AND `Control` = 'ActionText'"
              @OK='=1'
                X="65"       ;;Previous value = 70   - Move closer to "status:" (way to big a gap)
            Width="300"      ;;Previous value = 265  - Extend to edge of dialog to get as much of msg as possible
       >
    #)
    <$/Table>
#endif



;----------------------------------------------------------------------------
;--- Put version number into dialog titles ----------------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_ADD_VERSION_NUMBER_TO_DIALOG_TITLES Y
#if ['<$UISAMPLE_ADD_VERSION_NUMBER_TO_DIALOG_TITLES>' = 'Y']
;--- [TIPS.DH-Example-VersionNumberInDialogTitles] --------------------------
#define? UISAMPLE_LICENCE_SPELLING_C_OR_S   c     ;;Spelling - Licence OR License?
<$Table "Dialog">
    #(
        ;--- Change all dialogs to include the version number ---------------
        <$Row
              @Where=^`Title` = '[ProductName] [Setup]'^
                 @OK=^? > 0^
               Title="[ProductName] ([ProductVersion]) [Setup]"
        >
    #)
    #ifndef REMOVED_LicenseAgreementDlg
        #(
            ;--- Change all dialogs to include the version number ---------------
            <$Row
                  @Where=^`Title` = '[ProductName] License Agreement'^
                     @OK=^? > 0^
                   Title="[ProductName] ([ProductVersion]) Licen<$UISAMPLE_LICENCE_SPELLING_C_OR_S>e Agreement"
            >
        #)
    #endif
<$/Table>
;--- [TIPS.DH-Example-VersionNumberInDialogTitles] --------------------------
#endif


;----------------------------------------------------------------------------
;--- Fix "licence" spelling -------------------------------------------------
;----------------------------------------------------------------------------
;--- [TIPS.DH-Example-FixLicenceSpelling-GoodRowExample] ---
#if ['<$UISAMPLE_LICENCE_SPELLING_C_OR_S>' = 'c']
    ;--- We are changing spelling from "license" to "licence" ---------------
    #ifndef REMOVED_LicenseAgreementDlg
        <$Table "Control">
        #(
            ;--- Look at licence dialog rows ------------------------------------
            <$Row
                  @Where=^`Dialog_` = 'LicenseAgreementDlg'^
                @SelfRef="{*}"
                   *Text=^replace({*}, "icense", "icence")^
            >
        #)
        <$/Table>
    #endif
    <$Table "RadioButton">
    #(
        ;--- Look at all rows -----------------------------------------------
        <$Row
              @Where=^^
            @SelfRef="{*}"
               *Text=^replace({*}, "icense", "icence")^
        >
    #)
    <$/Table>
#endif
;--- [TIPS.DH-Example-FixLicenceSpelling-GoodRowExample] ---


;----------------------------------------------------------------------------
;--- Put MSI name into title bar of ERROR DIALOG ----------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_MODIFY_ERROR_DIALOG_TITLE Y
#if ['<$UISAMPLE_MODIFY_ERROR_DIALOG_TITLE>' = 'Y']
   <$Table "Dialog">
       #(
           ;--- Change all dialogs to include the version number ------------
           <$Row
                 @Where=^`Title` = 'Installer Information'^
                    @OK=^? > 0^
                  Title="[ProductName] ([ProductVersion]) - Installer Information"
           >
       #)
   <$/Table>
#endif


;----------------------------------------------------------------------------
;--- Work around to title text overwrite bug (in windows installer + sample) -
;----------------------------------------------------------------------------
#define SpaceToWorkAroundWindowsInstallerBug <?Space>
<$Table "Control">
   #(
        <$Row
              @Where=^`Dialog_` = 'VerifyRepairDlg' and `Control` = 'Title'^
            @SelfRef="{*}"
               *Text=^{*} & "<$SpaceToWorkAroundWindowsInstallerBug>"^
        >
   #)
   #(
        <$Row
              @Where=^`Dialog_` = 'VerifyRemoveDlg' and `Control` = 'Title'^
            @SelfRef="{*}"
               *Text=^{*} & "<$SpaceToWorkAroundWindowsInstallerBug>"^
        >
   #)
<$/Table>


;----------------------------------------------------------------------------
;--- Increase the size of the ERROR DIALOG (workaround Windows Installer 2.0 bug) ---
;----------------------------------------------------------------------------
#define? UISAMPLE_INCREASE_ERROR_DIALOG_SIZE Y
#if ['<$UISAMPLE_INCREASE_ERROR_DIALOG_SIZE>' = 'Y']
;--- [TIPS.DH-Example-ErrorDialogChanges] -----------------------------------
;--- Make how much bigger? User can override size increase ------------------
#define? UISAMPLE_ERRDLG_INCREASE_WIDTH  150
#define? UISAMPLE_ERRDLG_INCREASE_HEIGHT  80
#define? UISAMPLE_ERRDLG_TYPE             Text
;**    [CommentBlockStart     (September 25, 2003 5:41:48 PM EST, Dennis)
;**+----------------------------------------------------------------------
;**|#define? UISAMPLE_ERRDLG_TYPE             ScrollableText    ;;Adds vertical scrollbar if required (lines wrap)
;**+----------------------------------------------------------------------
;**    CommentBlockEnd]       (September 25, 2003 5:41:48 PM EST, Dennis)
#DefineRexx ''
    HalfIncreaseWidth  = <$UISAMPLE_ERRDLG_INCREASE_WIDTH> / 2
#DefineRexx

;--- Normally Width=270, Height=105 -----------------------------------------
<$Table "Dialog">
    #(
       ;--- Adjust height and width as requested ----------------------------
        <$Row
              @Where=^`Dialog` = 'ErrorDlg'^
            @SelfRef="{*}"
                 @OK=^? = 1^
              *Width=^{*} + <$UISAMPLE_ERRDLG_INCREASE_WIDTH>^
             *Height=^{*} + <$UISAMPLE_ERRDLG_INCREASE_HEIGHT>^
        >
    #)
<$/Table>
<$Table "Control">
    #(
        ;--- Move all the buttons down/right --------------------------------
        <$Row
              @Where=^`Dialog_` = 'ErrorDlg' and `Type`='PushButton'^
            @SelfRef="{*}"
                 @OK=^? > 0^
                  *X=^{*} + <??HalfIncreaseWidth>^     ;;Buttons centered
                  *Y=^{*} + <$UISAMPLE_ERRDLG_INCREASE_HEIGHT>^
        >
    #)
    #(
        ;--- Fix up the Text control ----------------------------------------
        dim ErrorTextControlAttr<?NewLine>
        #if ['<$UISAMPLE_ERRDLG_TYPE>' = 'Text']
            ErrorTextControlAttr = msidbControlAttributesNoPrefix
        #elseif
            ErrorTextControlAttr = 0
        #end if
        <?NewLine>
        <$Row
                @Where=^`Dialog_` = 'ErrorDlg' and `Control`='ErrorText'^
              @SelfRef="{*}"
                   @OK=^? = 1^
                   Type="<$UISAMPLE_ERRDLG_TYPE>"
           *Attributes=^{*} or ErrorTextControlAttr^
                *Width=^{*} + <$UISAMPLE_ERRDLG_INCREASE_WIDTH>^
               *Height=^{*} + <$UISAMPLE_ERRDLG_INCREASE_HEIGHT>^
        >
    #)
<$/Table>
;--- [TIPS.DH-Example-ErrorDialogChanges] -----------------------------------
#endif


;----------------------------------------------------------------------------
;--- Better Welcome Dialog message ------------------------------------------
;----------------------------------------------------------------------------
#(
   ;--- Better welcome information ------------------------------------------
   #define? UISAMPLE_WELCOME_VB_EXPRESSION_FIRST_PARA

   "This will install ""[ProductName]"" (version [ProductVersion],
   dated  [<$COMPANY_PROPERTY_BUILDTIME>]) onto your computer."
#)
#define? UISAMPLE_WELCOME_VB_EXPRESSION_BEFORE_CLICK_NEXT_PARA   ;;User can "insert" extra info
#(
   ;--- Want click text in new paragraph ------------------------------------
   #define? UISAMPLE_WELCOME_VB_EXPRESSION_CLICK_NEXT_PARA
   & vbCRLF & vbCRLF
   & "Click ""Next"" to continue."
#)
<$Table "Control">
   #(
       <$Row
             @Where=^`Dialog_` = 'WelcomeDlg' and `Control`='Description'^
                @OK=^? = 1^
             Height="165"          ;;Might as well define all the space to allow for very long messages.
              *Text=^<$UISAMPLE_WELCOME_VB_EXPRESSION_FIRST_PARA><$UISAMPLE_WELCOME_VB_EXPRESSION_BEFORE_CLICK_NEXT_PARA><$UISAMPLE_WELCOME_VB_EXPRESSION_CLICK_NEXT_PARA>^
       >
   #)
<$/Table>


;----------------------------------------------------------------------------
;--- Remove the "MaintenanceWelcomeDlg" -------------------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_REMOVE_MaintenanceWelcomeDlg Y
#if ['<$UISAMPLE_REMOVE_MaintenanceWelcomeDlg>' = 'Y']
;--- [TIPS.DH-Example-DialogRemoval-MaintenanceWelcomeDlg] ------------------
<$Table "InstallUISequence">
   ;--- "Skip" the welcome dialog -------------------------------------------
   #(
       <$Row
           @Where=^`Action` = 'MaintenanceWelcomeDlg'^
              @OK=^? = 1^
           Action="MaintenanceTypeDlg"
       >
   #)
<$/Table>

;--- There is now no "previous" dialog (could have deleted control as well) -
<$Table "Control">
   #(
       <$Row
              @Where=^`Dialog_` = 'MaintenanceTypeDlg' and `Control`='Back'^
            @SelfRef="{*}"
                 @OK=^? = 1^
         *Attributes=^{*} and not (msidbControlAttributesVisible or msidbControlAttributesEnabled)^  ;;Reset these bits
       >
   #)
<$/Table>
;--- [TIPS.DH-Example-DialogRemoval-MaintenanceWelcomeDlg] ------------------
#endif


;----------------------------------------------------------------------------
;--- Don't need "CD KEY -----------------------------------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_ASK_FOR_CDKEY     N           ;;Normally I don't want to...
#if    ['<$UISAMPLE_ASK_FOR_CDKEY>' <> 'Y']
   ;--- Remove CD-KEY related stuff -----------------------------------------
   <$Table "Control">
       ;--- Fix "UserRegistrationDlg" & "AdminRegistrationDlg" --------------
       #(
           #define RemoveCdKey

           <$RowsDelete WHERE="Dialog_ = '{$#1}' AND Control = 'CDKeyLabel'">
           <$RowsDelete WHERE="Dialog_ = '{$#1}' AND Control = 'CDKeyEdit'">
           #(
               <$Row @Where="Dialog_ = '{$#1}' AND Control = 'OrganizationEdit'" @OK='=1'
                   Control_Next="Back"      ;;Previous value = CDKeyLabel
               >
           #)
       #)
       #ifndef REMOVED_UserRegistrationDlg
               <$RemoveCdKey "UserRegistrationDlg">
       #endif
       <$RemoveCdKey "AdminRegistrationDlg">
   <$/Table>
#endif



;----------------------------------------------------------------------------
;--- Want ADMIN REGISTRATION DIALOG? ----------------------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_WANT_ADMIN_REGISTRATION_DIALOG  N
#if    ['<$UISAMPLE_WANT_ADMIN_REGISTRATION_DIALOG>' <> 'Y']
    <$Table "ControlEvent">
       ;--- Correct Next Link -----------------------------------------------
       #(
           <$Row
                @Where=^Dialog_ = 'AdminWelcomeDlg' AND Control_ = 'Next' AND Event = 'NewDialog' AND Argument = 'AdminRegistrationDlg' AND Condition = '1'^
                   @OK=^=1^
                Argument="AdminInstallPointDlg"
           >
       #)

       ;--- Correct "Back Link ----------------------------------------------
       #(
           <$Row
                @Where=^Dialog_ = 'AdminInstallPointDlg' AND Control_ = 'Back' AND Event = 'NewDialog' AND Argument = 'AdminRegistrationDlg' AND Condition = '1'^
                   @OK=^=1^
                Argument="AdminWelcomeDlg"
           >
       #)
   <$/Table>
#endif


;----------------------------------------------------------------------------
;--- Add message to bottom bar (on left) ------------------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_ADD_MSG_TO_BOTTOM_BAR  Y
#if ['<$UISAMPLE_ADD_MSG_TO_BOTTOM_BAR>' = 'Y']
   ;--- Define some options -------------------------------------------------
   ;---[4Doco-UISAMPLE_ADD_MSG_TO_BOTTOM_BAR]---
   #define?  UISAMPLE_BLINE_TEXT           MakeMsi by Dennis Bareis
   #define?  UISAMPLE_BLINE_TEXT_INDENT    2          ;;Tiny bit in
   #define?  UISAMPLE_BLINE_TEXT_HEIGHT    10
   #define?  UISAMPLE_BLINE_TEXT_STYLE     0
   #ifdef    UISAMPLE_BLINE_SIMPLE
       ;--- You chose "simple" ----------------------------------------------
       #define?  UISAMPLE_BLINE_TEXT_FONT      Arial
       #define?  UISAMPLE_BLINE_TEXT_FONT_SIZE 8
       #define?  UISAMPLE_BLINE_TEXT_COLOR     &H7F7F7F   ;;BGR (only Microsoft... For the last 20 or so years every company on Earth has used RGB including MS...)
       #define?  UISAMPLE_BLINE_TEXT_WIDTH     102        ;;You'll need to do a bit of "Trial and Error" to get this right...
   #elseif
       ;--- I think this mechanism looks better -----------------------------
       #define?  UISAMPLE_BLINE_TEXT_FONT      Tahoma
       #define?  UISAMPLE_BLINE_TEXT_FONT_SIZE 8
       #define?  UISAMPLE_BLINE_TEXT_WIDTH     95         ;;You'll need to do a bit of "Trial and Error" to get this right...
   #endif
   ;---[4Doco-UISAMPLE_ADD_MSG_TO_BOTTOM_BAR]---
   #(
       #define?  UISAMPLE_BLINE_EXCEPTION_DIALOGS    ;;These have the graphic on the left
       and (`Dialog_` <> 'AdminWelcomeDlg')
       and (`Dialog_` <> 'ExitDialog')
       and (`Dialog_` <> 'FatalError')
       and (`Dialog_` <> 'MaintenanceWelcomeDlg')
       and (`Dialog_` <> 'PrepareDlg')
       and (`Dialog_` <> 'ResumeDlg')
       and (`Dialog_` <> 'UserExit')
       and (`Dialog_` <> 'WelcomeDlg')
   #)

   <$Table "Control">
       ;--- Modify existing bottom line record ------------------------------
       #(
           <$Row
                 @Where=^`Control`='BottomLine' and `Type`='Line' <$UISAMPLE_BLINE_EXCEPTION_DIALOGS>^
               @SelfRef="{*}"
                    @OK=^? >= 1^
                     *X='{*} + <$UISAMPLE_BLINE_TEXT_WIDTH> + <$UISAMPLE_BLINE_TEXT_INDENT>'
                 *Width='{*} - <$UISAMPLE_BLINE_TEXT_WIDTH> - <$UISAMPLE_BLINE_TEXT_INDENT>'
           >
       #)
   <$/Table>

   ;--- Insert the new branding text ----------------------------------------
   #ifdef    UISAMPLE_BLINE_SIMPLE
       ;--- Use the simple format (one color) -------------------------------
       <$Table "TextStyle">
       #(
           ;--- Set up the font type and color ------------------------------
           <$Row
               TextStyle="BrandingLineText"
               FaceName="<$UISAMPLE_BLINE_TEXT_FONT>"
                   Size="<$UISAMPLE_BLINE_TEXT_FONT_SIZE>"
                   Color="<$UISAMPLE_BLINE_TEXT_COLOR>"
               StyleBits="<$UISAMPLE_BLINE_TEXT_STYLE>"
           >
       #)
       <$/TABLE>
       <$Table "Control">
           ;--- Insert "Bottom Line" Text -----------------------------------
           #(
               <$Row
                   @Where=^`Control`='BottomLine' and `Type`='Line' <$UISAMPLE_BLINE_EXCEPTION_DIALOGS>^
                   @Method="INSERT"
                   @SelfRef="{*}"
                       @OK=^? >= 1^
                   Control="BrandingLineText"
                       Type="Text"
                       X=^<$UISAMPLE_BLINE_TEXT_INDENT>^
                   Height=^<$UISAMPLE_BLINE_TEXT_HEIGHT>^
                       Y=^{*} - (<$UISAMPLE_BLINE_TEXT_HEIGHT>\2)^   ;;Y (line goes in middle)
               Attributes=^{*} or msidbControlAttributesTransparent^
                       Text=^{&BrandingLineText}<$UISAMPLE_BLINE_TEXT>^
               Control_Next=""
                       Help=""
               >
           #)
       <$/Table>
   #elseif
       ;--- Use more complex embossed form ----------------------------------
       <$Table "TextStyle">
           #(
               ;--- Lower right text (applied first) ------------------------
               <$Row
                   TextStyle="BrandingLR"
                    FaceName="<$UISAMPLE_BLINE_TEXT_FONT>"
                        Size="<$UISAMPLE_BLINE_TEXT_FONT_SIZE>"
                       Color="&HFFFFFF"               ;;White
                   StyleBits="<$UISAMPLE_BLINE_TEXT_STYLE>"
               >
           #)
           #(
               ;--- Upper Left (applied second) -----------------------------
               <$Row
                   TextStyle="BrandingUL"
                    FaceName="Tahoma"
                        Size="<$UISAMPLE_BLINE_TEXT_FONT_SIZE>"
                       Color=""
                   StyleBits="<$UISAMPLE_BLINE_TEXT_STYLE>"
               >
           #)
       <$/Table>
       <$Table "Control">
           #(
               ;--- Lower right line (APPLIED FIRST) ------------------------
               <$Row
                     @Where=^`Control`='BottomLine' and `Type`='Line' <$UISAMPLE_BLINE_EXCEPTION_DIALOGS>^
                    @Method="INSERT"
                   @SelfRef="{*}"
                        @OK=^? >= 1^
                    Control="BrandingLR"        ;;Slightly lower and righter
                       Type="Text"
                          X=^<$UISAMPLE_BLINE_TEXT_INDENT> + 1^
                          Y=^{*} - (<$UISAMPLE_BLINE_TEXT_HEIGHT>\2)+1^   ;;Y (line goes in middle)
                     Height=^<$UISAMPLE_BLINE_TEXT_HEIGHT>^
                      Width="<$UISAMPLE_BLINE_TEXT_WIDTH>"
                 Attributes="msidbControlAttributesVisible or msidbControlAttributesNoPrefix"
                       Text="{&BrandingLR}<$UISAMPLE_BLINE_TEXT>"
               Control_Next=""
                       Help=""
               >
           #)
           #(
               ;--- Upper Left line (APPLIED SECOND - over "BrandingLR") ----
               <$Row
                     @Where=^`Control`='BottomLine' and `Type`='Line' <$UISAMPLE_BLINE_EXCEPTION_DIALOGS>^
                    @Method="INSERT"
                   @SelfRef="{*}"
                        @OK=^? >= 1^
                    Control="BrandingUL"
                       Type="Text"
                   Property=""
                          X=^<$UISAMPLE_BLINE_TEXT_INDENT>^
                          Y=^{*} - (<$UISAMPLE_BLINE_TEXT_HEIGHT>\2)^   ;;Y (line goes in middle)
                     Height=^<$UISAMPLE_BLINE_TEXT_HEIGHT>^
                      Width="<$UISAMPLE_BLINE_TEXT_WIDTH>"
                 Attributes="msidbControlAttributesVisible or msidbControlAttributesTransparent or msidbControlAttributesNoPrefix"
                       Text="{&BrandingUL}<$UISAMPLE_BLINE_TEXT>"
               Control_Next=""
                       Help=""
               >
           #)
       <$/Table>
   #endif
#endif


;----------------------------------------------------------------------------
;--- MS "CustomizeDlg" has problems (things don't fit by default!) ----------
;----------------------------------------------------------------------------
#define? UISAMPLE_ADJUST_CustomizeDlg Y
#if ['<$UISAMPLE_ADJUST_CustomizeDlg>' = 'Y']
   #define? UISAMPLE_FeatureDirFont {&FeatureDirFont}
   <$Table "Control">
       ;--- Make group box etc wider so things fit. Also looks better! ------
       #(
           <$Row
               @Where="Dialog_ = 'CustomizeDlg' AND Control = 'Description'"
               @OK='=1'
                   X="15"       ;;Previous value = 25
               Width="290"      ;;Previous value = 280
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'CustomizeDlg' AND Control = 'Text'"
               @OK='=1'
                   X="15"       ;;Previous value = 25
               Width="330"      ;;Previous value = 320
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'CustomizeDlg' AND Control = 'Tree'"
               @OK='=1'
                   X="10"       ;;Previous value = 25
                   Y="77"       ;;Previous value = 85
               Width="189"      ;;Previous value = 175
               Height="123"      ;;Previous value = 95
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'CustomizeDlg' AND Control = 'Box'"
               @OK='=1'
                   X="207"      ;;Previous value = 210
                   Y="73"       ;;Previous value = 81
               Width="153"      ;;Previous value = 140
               Height="127"      ;;Previous value = 98
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'CustomizeDlg' AND Control = 'LocationLabel'"
               @OK='=1'
                   X="15"       ;;Previous value = 25
                   Y="203"      ;;Previous value = 200
               Width="37"       ;;Previous value = 50
               Height="11"       ;;Previous value = 10
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'CustomizeDlg' AND Control = 'Location'"
               @OK='=1'
                   X="55"       ;;Previous value = 75
                   Y="203"      ;;Previous value = 200
               Width="243"      ;;Previous value = 215
               Height="31"       ;;Previous value = 20
               Text="<$UISAMPLE_FeatureDirFont><The feature's path>"
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'CustomizeDlg' AND Control = 'Browse'"
               @OK='=1'
                   Y="208"      ;;Previous value = 200
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'CustomizeDlg' AND Control = 'ItemDescription'"
               @OK='=1'
                   X="212"      ;;Previous value = 215
                   Y="79"       ;;Previous value = 90
               Width="144"      ;;Previous value = 131
               Height="65"       ;;Previous value = 30
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'CustomizeDlg' AND Control = 'ItemSize'"
               @OK='=1'
                   X="212"      ;;Previous value = 215
                   Y="147"      ;;Previous value = 130
               Width="144"      ;;Previous value = 131
               Height="51"       ;;Previous value = 45
           >
       #)

   <$/Table>
   #ifndef UISAMPLE_FeatureDirFont_DONT_CREATE
       ;--- The user wants this item (not overriding etc) -------------------
       <$Table "TextStyle">
           #(
               <$Row
                   TextStyle="FeatureDirFont"
                   FaceName="Tahoma"
                       Size="8"
                       Color="16711680"
               >
           #)
       <$/Table>
   #endif
#endif



;----------------------------------------------------------------------------
;--- Replace the custom setup icon with a better one ------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_NEW_custicon  MmCustomSetup.ico
#if ['<$UISAMPLE_NEW_custicon>' <> '']
    <$Binary "<$UISAMPLE_NEW_custicon>" KEY="custicon" DOCO="N" @Validate="FIELD">
#end if



;----------------------------------------------------------------------------
;--- Replace long horizontal white bar (on top) with graphic by 2 new -------
;----------------------------------------------------------------------------
#define? UISAMPLE_CHANGE_bannrbmp  Y
#if ['<$UISAMPLE_CHANGE_bannrbmp>' = 'Y']
;--- [TIPS.DH-Example-WhiteBarWithLogo] -------------------------------------
;--- MAKEMSI MSI smaller, use smaller banner graphic ------------------------
#define? UISAMPLE_BITMAP_WHITE_BANNER        white.bmp                                             ;;Pure white banner (no graphic)
<$Binary "<$UISAMPLE_BITMAP_WHITE_BANNER>"   KEY="bannrbmp"          DOCO="N" @Validate="FIELD">   ;;Very small image gets sized to fill area

;--- If user wants a small graphic on the banner (like original) then add it ---
#define? UISAMPLE_BITMAP_BANNER_GRAPHIC
#if ['<$UISAMPLE_BITMAP_BANNER_GRAPHIC>' <> '']
    ;--- User wants the small right hand side graphic -----------------------
    <$Binary "<$UISAMPLE_BITMAP_BANNER_GRAPHIC>" KEY="BannerGraphic.BMP" DOCO="N">                     ;;Will place fixed size bitmap on right of filled area
    <$Table "Control">
    #(
       ;--- Add new control for fixed size logo on right --------------------
       <$Row
            @Where="`Control` = 'BannerBitmap'"
           @Method="INSERT"
               @OK=^? > 0^
           Control="CompanyLogo"
                 X="330"
                 Y="10"
             Width="26"
            Height="26"
        Attributes="&H00100001"            ;;Fixed size bitmap
              Text="BannerGraphic.BMP"
      Control_Next=""
       >
    #)
    <$/Table>
#end if
;--- [TIPS.DH-Example-WhiteBarWithLogo] -------------------------------------
#endif


;----------------------------------------------------------------------------
;--- Replace Left Side (Whole dialog actually) graphic if wanted ------------
;----------------------------------------------------------------------------
#define? UISAMPLE_DIALOG_FILE_dlgbmp LeftSide.bmp     ;;"" = No change!
#if  ['<$UISAMPLE_DIALOG_FILE_dlgbmp>' <> '']
   ;--- Replace standard bitmap on left side of welcome and other dialogs ---
   <$Binary "<$UISAMPLE_DIALOG_FILE_dlgbmp>" KEY="dlgbmp" DOCO="N" @Validate="FIELD">

   ;--- If you have left the top of the new graphic clear, put text there? ---
   #define? UISAMPLE_LEFTSIDE_TEXT Developed by <$DEPT_NAME> - <$DEPT_ADDRESS>.
   #if ['<$UISAMPLE_LEFTSIDE_TEXT>' <> '']
        ;--- Set some defaults ----------------------------------------------
        #define? UISAMPLE_LEFTSIDE_TEXT_FONT_NAME  Tahoma
        #define? UISAMPLE_LEFTSIDE_TEXT_FONT_SIZE  12
        #define? UISAMPLE_LEFTSIDE_TEXT_FONT_COLOR &H007F00   ;;Color in BGR (believe it or not... Only MS could do this...)
        #define? UISAMPLE_LEFTSIDE_TEXT_FONT_STYLE 1
        #define? UISAMPLE_LEFTSIDE_TEXT_X          5          ;;Trial and error will be required for all coordinates (don't match pixels either...)
        #define? UISAMPLE_LEFTSIDE_TEXT_Y          5
        #define? UISAMPLE_LEFTSIDE_TEXT_WIDTH      110
        #define? UISAMPLE_LEFTSIDE_TEXT_HEIGHT     185        ;;How much of bitmap is "clear"?

        ;--- Create the font -------------------------------------------------
        <$Table "TextStyle">
            #(
                <$Row
                     TextStyle="UISAMPLE_LEFTSIDE_TEXT"
                      FaceName="<$UISAMPLE_LEFTSIDE_TEXT_FONT_NAME>"
                          Size="<$UISAMPLE_LEFTSIDE_TEXT_FONT_SIZE>"
                         Color="<$UISAMPLE_LEFTSIDE_TEXT_FONT_COLOR>"
                     StyleBits="<$UISAMPLE_LEFTSIDE_TEXT_FONT_STYLE>"
                >
            #)
        <$/Table>

        ;--- Insert "Left Hand GRAPHIC TEXT" control into all relevant dialogs ---
        <$Table "Control">
            #(
                <$Row
                       @Where=^`Text`='[DialogBitmap]'^
                      @Method="INSERT"
                     @SelfRef="{*}"
                          @OK=^? >= 1^
                      Control="BrandingOnLeftSideBitmap"
                         Type="Text"
                            X="<$UISAMPLE_LEFTSIDE_TEXT_X>"
                            Y="<$UISAMPLE_LEFTSIDE_TEXT_Y>"
                        Width="<$UISAMPLE_LEFTSIDE_TEXT_WIDTH>"
                       Height="<$UISAMPLE_LEFTSIDE_TEXT_HEIGHT>"
                   Attributes="&H10003"
                     Property=""
                         Text="{&UISAMPLE_LEFTSIDE_TEXT}<$UISAMPLE_LEFTSIDE_TEXT>"
                 Control_Next=""
                         Help=""
                >
            #)
        <$/Table>
   #endif
#endif




;----------------------------------------------------------------------------
;--- Fix some Microsoft UISAMPLE.MSI formatting/sizing errors ---------------
;----------------------------------------------------------------------------
#define? UISAMPLE_FIX_WELCOME_LIKE_SIZING_PROBLEMS   Y
#if    ['<$UISAMPLE_FIX_WELCOME_LIKE_SIZING_PROBLEMS>' = 'Y']
   <$Table "Control">
       #(
           <$Row
               @Where="Dialog_ = 'AdminWelcomeDlg' AND Control = 'Description'"
               @OK='=1'
                   Y="85"      ;;Previous value = 70
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'ExitDialog' AND Control = 'Description'"
               @OK='=1'
                   Y="85"      ;;Previous value = 70
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'FatalError' AND Control = 'Description1'"
               @OK='=1'
                   Y="85"      ;;Previous value = 70
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'FatalError' AND Control = 'Description2'"
               @OK='=1'
                   Y="130"      ;;Previous value = 115
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'PrepareDlg' AND Control = 'Description'"
               @OK='=1'
                   Y="85"      ;;Previous value = 70
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'PrepareDlg' AND Control = 'ActionText'"
                  @OK='=1'
                    Y="130"      ;;Previous value = 100
                 Text="Initialising... Please wait..."
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'PrepareDlg' AND Control = 'ActionData'"
                  @OK='=1'
                    Y="155"      ;;Previous value = 125
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'UserExit' AND Control = 'Description1'"
               @OK='=1'
                   Y="85"      ;;Previous value = 70
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'UserExit' AND Control = 'Description2'"
               @OK='=1'
                   Y="130"      ;;Previous value = 115
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'MaintenanceWelcomeDlg' AND Control = 'Description'"
               @OK='=1'
                   Y="85"      ;;Previous value = 70
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'ResumeDlg' AND Control = 'Description'"
               @OK='=1'
                   Y="85"      ;;Previous value = 70
           >
       #)
       #(
           <$Row
               @Where="Dialog_ = 'WelcomeDlg' AND Control = 'Description'"
               @OK='=1'
                   Y="85"      ;;Previous value = 70
           >
       #)
   <$/Table>
#endif



;**    [CommentBlockStart     (September 9, 2005 5:36:56 PM EST, Dennis)
;**+----------------------------------------------------------------------
;**|;----------------------------------------------------------------------------
;**|;--- Want all dialogs positioned in the CENTRE of the screen ----------------
;**|;----------------------------------------------------------------------------
;**|#define? UISAMPLE_ALL_DIALOGS_IN_CENTER_OF_SCREEN   Y
;**|#if    ['<$UISAMPLE_ALL_DIALOGS_IN_CENTER_OF_SCREEN>' = 'Y']
;**|   <$Table "Dialog">
;**|       #(
;**|           ;--- Change all dialogs to include the version number ---------------
;**|           <$Row
;**|                   @Where=^`HCentering` <> 50 or `VCentering` <> 50^
;**|                      @OK=^? > 0^
;**|               HCentering="50"
;**|               VCentering="50"
;**|           >
;**|       #)
;**|   <$/Table>
;**|#endif
;**+----------------------------------------------------------------------
;**    CommentBlockEnd]       (September 9, 2005 5:36:56 PM EST, Dennis)




;----------------------------------------------------------------------------
;--- Want to reposition some dialogs? ---------------------------------------
;----------------------------------------------------------------------------
#(
    ;--- Define empty list to disable ---------------------------------------
    #define? UISAMPLE_REPOSITION_THESE_DIALOGS
    CancelDlg
    ErrorDlg
    WaitForCostingDlg

#)
#define? UISAMPLE_REPOSITION_DIALOGS_H  60      ;;Just a bit to the right
#define? UISAMPLE_REPOSITION_DIALOGS_V  75      ;;Down enough for progress info to be visible
#(
    ;--- Another macro example, not really required... ----------------------
    #define RepositionDialog
    <$Table "Dialog">
       #(
           ;--- Reposition the specified dialog -----------------------------
           <$Row
                   @Where=^`Dialog` = '{$#1}'^
                      @OK=^? = 1^
               HCentering="{$H=^<$UISAMPLE_REPOSITION_DIALOGS_H>^}"
               VCentering="{$V=^<$UISAMPLE_REPOSITION_DIALOGS_V>^}"
           >
       #)
   <$/Table>
#)
#{ SET "@@Dlg={ }<$UISAMPLE_REPOSITION_THESE_DIALOGS>"
    ;--- Reposition each configured Dialog ----------------------------------
    <$RepositionDialog "<??SET_@@Dlg>">
#}



;----------------------------------------------------------------------------
;--- Reduce the UI (a better "basic" UILevel) -------------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_REDUCED_UI_PROPERTY_NAME MM_REDUCED_UI   ;;Blank means don't add support! Upper Case = can be set on command line
#define? UISAMPLE_REDUCED_UI_VALUE         0               ;;0 = normal, 1 = reduced UI (on install only)
#if ['<$UISAMPLE_REDUCED_UI_PROPERTY_NAME>' <> '']
   ;--- Create the property as requested ------------------------------------
   <$Property "<$UISAMPLE_REDUCED_UI_PROPERTY_NAME>" Value="<$UISAMPLE_REDUCED_UI_VALUE>">

   ;--- Update the UI information to look at the above property -------------
   <$Table "InstallUISequence">
       #(
           ;--- The condition is normally "" --------------------------------
           <$Row
                  @Where="Action = 'ExitDialog'"
                     @OK='=1'
               Condition="Installed or (<$UISAMPLE_REDUCED_UI_PROPERTY_NAME> = 0)"
           >
       #)
       #(
           ;--- The condition is normally "NOT Installed" -------------------
           <$Row
                  @Where="Action = 'WelcomeDlg'"
                     @OK='=1'
               Condition="NOT Installed and (<$UISAMPLE_REDUCED_UI_PROPERTY_NAME> = 0)"
           >
       #)
   <$/Table>
#endif



;----------------------------------------------------------------------------
;--- Fix Spelling errors ----------------------------------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_FIX_SPELLING_REPAIRES     N       ;;Mispelt in older versions of "uisample.msi".
#if ['<$UISAMPLE_FIX_SPELLING_REPAIRES>' = 'Y']
    <$Table "ControlEvent">
       #(
           <$Row
                  @WHERE="Dialog_ = 'MaintenanceTypeDlg' AND Control_ = 'RepairButton' AND Event = '[Progress2]' AND Argument = 'repaires' AND Condition = '1'"
                     @OK=^=1^
                 @METHOD="Replace"
                Argument="repairs"
           >
       #)
    <$/Table>
#endif


;----------------------------------------------------------------------------
;--- Fix ICE45 Issue with new attributes (ElevationShield etc) --------------
;----------------------------------------------------------------------------
#define? UISAMPLE_FIX_ICE45_VERIFY_BUTTON_ATTRIBUTES   Y
#if ['<$UISAMPLE_FIX_ICE45_VERIFY_BUTTON_ATTRIBUTES>' = 'Y']
    ;--- Microsoft's bug in latest validation CUB files (_ReservedBits table) ---
    #define+ @@REASON Work around Microsoft's bug in latest validation CUB files (_ReservedBits table)
    <$MsiValFilter "Row 'VerifyRepairDlg.Repair' in table 'Control' has bits set in the 'Attributes' column that are reserved" Comment=^<$@@REASON>^>
    <$MsiValFilter "Row 'VerifyRemoveDlg.Remove' in table 'Control' has bits set in the 'Attributes' column that are reserved" Comment=^<$@@REASON>^>
    <$MsiValFilter "Row 'VerifyReadyDlg.Install' in table 'Control' has bits set in the 'Attributes' column that are reserved" Comment=^<$@@REASON>^>
#endif



;----------------------------------------------------------------------------
;--- For now take care of ICE06/ICE46 messages about new Shortcut Columns ---
;----------------------------------------------------------------------------
#if ['<$TABLES_SHORTCUT_DEFINE_WI_4_COLS $$UPPER>' = 'N']
    ;--- We haven't defined the extra columns, so care about warnings? ------
    #define? UISAMPLE_IGNORE_MISSING_WI_4_SHORTCUT_COLUMNS   Y
    #if ['<$UISAMPLE_IGNORE_MISSING_WI_4_SHORTCUT_COLUMNS>' = 'Y']
        #define+ @@REASON No biggy if _Validation table is missing these "Shortcut" columns
        <$MsiValFilter Comment=^<$@@REASON>^ "DescriptionResourceDLL of Table: Shortcut is not defined in database">
        <$MsiValFilter Comment=^<$@@REASON>^ "DescriptionResourceId of Table: Shortcut is not defined in database">
        <$MsiValFilter Comment=^<$@@REASON>^ "DisplayResourceDLL of Table: Shortcut is not defined in database">
        <$MsiValFilter Comment=^<$@@REASON>^ "DisplayResourceId of Table: Shortcut is not defined in database">
        <$MsiValFilter Comment=^<$@@REASON>^ "Error retrieving values from column DescriptionResourceDLL in table Shortcut">
        <$MsiValFilter Comment=^<$@@REASON>^ "Error retrieving values from column DisplayResourceDLL in table Shortcut">
    #endif
#endif



;----------------------------------------------------------------------------
;--- Remove these unwanted "UISAMPLE.MSI" bits ------------------------------
;----------------------------------------------------------------------------
<$Table "Property">
   <$RowsDelete where=^`Property` = 'ComponentDownload'^>
<$/Table>








;----------------------------------------------------------------------------
;--- No  "UserExit" dialog after "YES" pressed on Cancel Dialog! ------------
;----------------------------------------------------------------------------
#define? UISAMPLE_NO_USEREXIT_DIALOG_AFTER_CANCEL_CONFIRMATION Y
#if ['<$UISAMPLE_NO_USEREXIT_DIALOG_AFTER_CANCEL_CONFIRMATION>' = 'Y']
    <$Table "ControlEvent">
       ;--- Modify existing row to change ordering --------------------------
       #(
           <$Row
                 @Where="Dialog_ = 'CancelDlg' AND Control_ = 'Yes' AND Event = 'EndDialog' AND Argument = 'Exit' AND Condition = '1'"
                    @OK='=1'
               Ordering="2"
           >
       #)

       ;--- Add new row to set property if "YES" selected -------------------
       #(
           <$Row
                 Dialog_="CancelDlg"
                Control_="Yes"
                   Event="[UserPressedYesOnCancelDlg]"
                Argument="YES"
               Condition="1"
                Ordering="1"
           >
       #)

    <$/Table>
    <$Table "InstallUISequence">
       ;--- Change "UserExit" dialog to not appear if "YES" selected on "CancelDlg" ---
       #(
           <$Row
                  @Where="Action = 'UserExit'"
                     @OK='=1'
               Condition="not UserPressedYesOnCancelDlg"
           >
       #)
    <$/Table>
#endif



;----------------------------------------------------------------------------
;--- "Install Instructions" button  on "WelcomeDlg" -------------------------
;----------------------------------------------------------------------------
;---[ForDoco.INSTALL_INSTRUCTIONS.Options]---
#define? UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_URL                                      ;;URL (blank=no button)
#define? UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_DLG_LIST       PrepareDlg WelcomeDlg     ;;List of dialogs to apply to (space separated)
#define? UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_TEXT           &Install Instructions
#define? UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_TEXTSTYLE      {&FeatureDirFont}         ;;Doesn't seem to work
#define? UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_BUTTON_X       20
#define? UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_BUTTON_Y       243
#define? UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_BUTTON_WIDTH   80
#define? UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_BUTTON_HEIGHT  17
#define? UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_TOOLTIP        <$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_URL>
;---[ForDoco.INSTALL_INSTRUCTIONS.Options]---
#if ['<$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_URL>' <> '']
    ;--- For each dialog... -------------------------------------------------
    #{ set ^@@Dlg={ }<$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_DLG_LIST>^
        ;--- Add the control to the dialog ----------------------------------
        <$Table "Control">
        #(
            <$Row
                    Dialog_="<??SET_@@Dlg>"
                    Control="InstallInstructions"
                       Type="PushButton"
                 Attributes="msidbControlAttributesVisible or msidbControlAttributesEnabled"
                       Text="<$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_TEXTSTYLE><$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_TEXT>"
                       Help="<$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_TOOLTIP>|"
                          X="<$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_BUTTON_X>"
                          Y="<$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_BUTTON_Y>"
                      Width="<$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_BUTTON_WIDTH>"
                     Height="<$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_BUTTON_HEIGHT>"
            >
        #)
        <$/Table>
        <$Table "ControlEvent">
        #(
            ;--- Handle button click -------------------------------------
            <$Row
                 Dialog_="<??SET_@@Dlg>"
                Control_="InstallInstructions"
                   Event="DoAction"
                Argument="InstallInstructions"
               Condition="1"
            >
        #)
        <$/Table>
    #}

    ;--- Look for IEXPLORE.EXE, if not found then disable the above control! ---
    <$RegistryRead Property="IE_EXE" HKEY="LOCAL_MACHINE" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\IEXPLORE.EXE" DEFAULT="">
    <$Table "ControlCondition">
        #{ set ^@@Dlg={ }<$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_DLG_LIST>^
            #if ['<??SET_@@Dlg>' <> 'PrepareDlg']     ;;Prepare dialog may appear before "AppSearch", if so "AppSearch" happens while dialog is up...
                ;--- "AppSearch" well and truely over... --------------------
                <$Row Dialog_="<??SET_@@Dlg>" Control_="InstallInstructions" Action="Disable" Condition="not IE_EXE" >
            #endif
        #}
    <$/Table>

    ;--- Define the action --------------------------------------------------
    <$Table "CustomAction">
       #(
           ;--- Invoke IE to display install instructions -------------------
           <$Row
               Action="InstallInstructions"
                 Type="50 or msidbCustomActionTypeAsync or msidbCustomActionTypeContinue"
               Source="IE_EXE"
               Target=^"<$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_URL>"^
           >

;**    [CommentBlockStart     (22 April 2006 18:27:07, Dennis)
;**+----------------------------------------------------------------------
;**|           ;--- Invoke IE to display install instructions -------------------
;**|           <$Row
;**|               Action="InstallInstructions"
;**|                 Type="34 or msidbCustomActionTypeAsync or msidbCustomActionTypeContinue"
;**|               Source="<$AnyDir>"
;**|               Target=^"[IE_EXE]" "<$UISAMPLE_ADD_INSTALL_INSTRUCTIONS_BUTTON_URL>"^
;**|           >
;**|       #)
;**+----------------------------------------------------------------------
;**    CommentBlockEnd]       (22 April 2006 18:27:07, Dennis)
       #)
    <$/Table>
#endif



;----------------------------------------------------------------------------
;--- Make "FatalError" dialog more obvious ----------------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_MAKE_FatalError_DIALOG_MORE_OBVIOUS Y
#if ['<$UISAMPLE_MAKE_FatalError_DIALOG_MORE_OBVIOUS>' = 'Y']
    ;--- Make the larger text red -------------------------------------------
    <$Table "Control">
       #(
           <$Row
               @Where="`Dialog_` = 'FatalError' AND `Control` = 'Title'"
                  @OK='=1'
                 Text="{\VerdanaBold13Red}[ProductName] [Wizard] ended prematurely"      ;;Previous value = {\VerdanaBold13}[ProductName] [Wizard] ended prematurely
           >
       #)
    <$/Table>
    <$Table "TextStyle">
       #(
           <$Row
               TextStyle="VerdanaBold13Red"
                FaceName="Verdana"
                    Size="13"
                   Color="255"              ;;RED in BGR format (only Microsoft...)
               StyleBits="1"
           >
       #)
    <$/Table>
#endif



;-------------------------------------------------------------------------------------
;--- Allow more Verification Text (perhaps when translated to other languages etc) ---
;-------------------------------------------------------------------------------------
#define? UISAMPLE_NEWSIZE_VerifyReadyDlg.Text  160      ;;0 = No change
#if [<$UISAMPLE_NEWSIZE_VerifyReadyDlg.Text> <> 0]
    ;--- No reason why it shouldn't be bigger -------------------------------
    <$Table "Control">
    #(
        <$Row
               @Where="Dialog_ = 'VerifyReadyDlg' AND Control = 'Text'"
               @OK='=1'
               Height="<$UISAMPLE_NEWSIZE_VerifyReadyDlg.Text>" ;;Previous value = 20
        >
    #)
    <$/Table>
#endif


;----------------------------------------------------------------------------
;--- Add Dialog Identification? MUST BE LAST THING DONE! --------------------
;----------------------------------------------------------------------------
;---[ForDoco.AddDialogNameToDialogTitle]---
#define? UISAMPLE_DIALOGS_ID_IN_TITLE.D  N   ;;In developer mode?
#define? UISAMPLE_DIALOGS_ID_IN_TITLE.P  N   ;;In production mode? - probably not!
#if ['<$UISAMPLE_DIALOGS_ID_IN_TITLE.[MMMODE]>' = 'Y']
    ;--- We wish to add the dialog name to the title ------------------------
    <$Table "Dialog">
        <$Row @Where="" @OK=^? > 0^ *Title=^"[\[]" & <$COLSTR.Dialog.Dialog> & "[\]] - " & <$COLSTR.Dialog.Title>^>
    <$/Table>
#endif
;---[ForDoco.AddDialogNameToDialogTitle]---


;----------------------------------------------------------------------------
;--- HOOK after all UISAMPLE stuff done -------------------------------------
;----------------------------------------------------------------------------
#define? UISAMPLE_HOOK_FINISHED_UI_UPDATES
<$UISAMPLE_HOOK_FINISHED_UI_UPDATES>

#NextId UNLOCK "UISAMPLE.MMH"


Microsoft awarded me an MVP (Most Valuable Professional award) in 2004, 2005, 2006, 2007, 2008 & 2009 for the Windows SDK (Windows Installer) area.Please email me any feedback, additional information or corrections.
See this page online (look for updates)

[Top][Contents][Prev]: COMPANY.MMH[Next]: UISAMPLE.MSI


MAKEMSI© is (C)opyright Dennis Bareis 2003-2008 (All rights reserved).
Friday October 13 2017 at 2:08pm
Visit MAKEMSI's Home Page
Microsoft awarded me an MVP (Most Valuable Professional award) in 2004, 2005, 2006, 2007, 2008 & 2009 for the Windows SDK (Windows Installer) area.