No announcement yet.

[Release] SKINbedder V3 - Preview

  • Filter
  • Time
  • Show
Clear All
new posts

  • [Release] SKINbedder V3 - Preview

    EDIT: V3 - Preview #2 is out... get it here:


    Screen-Shots: Below and in other threads (

    Note: This is not ready for in-car use until the iGuidance skin is completed. There are also problems with transparency (both in embedded windows and in PNG graphics). See the "Status" header in the 3rd post for details.

    This release is mainly for people who want to start skinning other apps or want to help complete the iGuidance skin.

    SKINbedder V3 - Preview Release
    Readme File
      SKINbedder V3 allows users to easily create a custom touchscreen-friendly
    UI for any application or group of applications.  With it you will be able to 
    auto-size, position, trim, and embed any group of windows to your own 
    custom layout.  Hot-Spot graphics can then be overlaid allowing you to 
    control the windows through your own custom UI.  Embedded windows can 
    be made transparent by "deleting" one color and/or semi-transparent by 
    alpha-blending the window.  Graphics are PNG which supports transparency 
    and alpha-blending.  Hot-Spot controls (as well as responses to open, close, 
    hibernate, and resume) are defined using a simple scripting language.
      Extract the entire contents of the .zip distribution file to the 
    folder "c:\program files\SKINbedder".  You can then run SKINbedder.exe or 
    SKINbedder_NOEX.exe from that folder (SKINbedder is distributed for use with
    iGuidance.  iGuidance must be installed in its default location
    "c:\program files\iNAV\iGuidance").
    Note: SKINbedder should run from any folder as long as it has the proper
    sub-folders and INI files.
      All configuration is done by editing INI files (and PNG graphics).  These
    INI files (and PNG graphics) are organized in subfolders of SKIN\Window.  
    Here are some examples of the type of settings you will find in the 
    configuration files on each level.
      Skinbedder.ini - Sets the default "SKIN" to iGuidance and specifies re-draw refresh-rate.
      iGuidance\iGuidance.ini - Sets SKINbedders size/position/window name/startup-script/etc.
      iGuidance\iGMap\iGMap.ini - Sets the map size/position/nudging/etc.
      iGuidance\iGMap\Bookmark_Left.ini - Sets the actions/positions of the 4 left buttons.
      iGuidance\iGMap\BookmarkLeft_Down.png - The graphic of the 4 left buttons that you see.
    Note: To change the location of iGuidance, you would edit the Run() 
    command in the [Scripts], Startup= section of iGuidance\iGuidance.ini.
    Making a new "SKIN":
      Make a copy of the SKINbedder\iGuidance folder and rename it to the name 
    of your new SKIN.  Edit SKINbedder.ini and change the "DefaultProgram" to 
    the name of your new SKIN.  Go into your new folder and rename its 
    iGuidance.ini to the name of your new SKIN.  Edit its INI file, change the top 
    section name to the name of your new SKIN.  Change the Startup script in 
    the INI file to run your program, embed your main window sub-folder, and 
    load your skin-layer.  Rename the iGMap sub-folder to the name of your main 
    window.  Go into it, rename its iGMap.ini, rename the section at the top of that INI file.  Edit the rest of the INI file to configure 
    sizing/positioning/nudging/transparency/etc.  Rename BookMark_Left.ini to 
    the name of your Skin-Layer.  Rename the section at the top of it and then 
    edit the rest of it to configure graphics/action hot-spots/button commands.
    Folder Structure:
     \_ SKINbedder.ini     Default SKIN Sub-Folder & Refresh-Rate.
     \_ [SKIN]             Sub-Folders (one per SKINbedder instance).
        \_ SKIN.ini        Startup/Shutdown/Hibernate Scripts & Form Settings.
        \_ LoadingPIC      Displays while SKINbedder is loading.
        \_ [Window]        Sub-Folders (one per window type to embed).
           \_ Window.ini   Window Size/Position/Trim/Transparent Settings.
           \_ Layer.ini    Layer Graphics/Position/Hot-Spots Settings
           \_ Up.png       Image with all Hot-Spot buttons "up".
           \_ Down.png     Image with all Hot-Spot buttons "down".
      SKINbedder V3 is designed so that you can use multiple instances of it to 
    embed multiple different applications.  Each application layout is defined in 
    a "SKIN" sub-folder.  SKINbedder V3 is distributed with an iGuidance SKIN.  
    To launch SKINbedder with a different SKIN than iGuidance, simply pass the 
    SKIN name as a parameter to SKINbedder.exe.  You can also change the 
    default SKIN by editing SKINbedder.ini (used when double-clicking 
    SKINbedder.exe or launching it without a parameter).  Through a SKINs INI 
    file, you can set a the SKINbedder window name/size/position and the 
    Startup/Shutdown/Hibernate/Resume scripts.
    Window Containers:
      Anything you want to embed is contained in a TWindowContainer.
    Through a window container INI file, you can set the windows class, 
    name, size, position, nudging, and transparency.  You size/position the 
    window by specifying a Width, Height, TopBorder, BottomBorder, LeftBorder, 
    and/or RightBorder (usually only 2, 3, or 4 of the 6).  Borders are the 
    distance between the edge of the main SKINbedder form, and the edge of 
    your embedded window.  If you do not specify any borders, you must specify 
    width and height and your window will be centered.  If you specify all 4 
    boarders are 0, you do not need to specify width and height and your 
    window will be stretched to fit the entire area of the main SKINbedder form. 
     Borders are respected even when the main SKINbedder form is resized.  
    See the table below for all possible combinations:
      Horizontal:  Width only:  Center
                   Width+LeftBorder:  Left edge is LeftBorder pixels from left edge of main form.
                   Width+RightBorder:  Right edge is RightBorder pixels from right edge of form.
                   Width+LeftBorder+RightBorder:  Same as Width+Left except width will shrink if needed to respect right border.
      Vertical:    Height only:  Center
                   Height+TopBorder:  Top edge is TopBorder pixels from top edge of main form.
                   Height+BottomBorder:  Bottom edge is BottomBorder pixels from bottom edge of form.
                   Height+TopBorder+BottomBorder:  Same as Width+Top except height will shrink if needed to respect bottom border.
      The window title-bar and border are automatically removed when it is 
    embeded.  To remove a button-bar, status-bar or to only view a specific 
    rectangle of the window, use the nudge settings.
    Skin Layers:
      Each set of graphics are contained in a TSkinLayer.  Through a skin layer 
    INI file, you can set the all-buttons-up image, the all-buttons-down image, 
    the position of the skin layer, the coordinates for each button, and a 
    OnButtonDown and/or OnButtonUp Command.  If you specify both commands, 
    the button will function as a toggle button (it will stay down after one press, 
    and run the OnButtonUp command on the second press).  The layer is 
    positioned using Borders just like window containers are (but the width and 
    height are determined by the all-buttons-up image).
      SKINbedder works purely by executing its own scripting language.
      In the main ini there is a startup script, shutdown script, hibernate script, 
    and resume script.  Also in each skin ini, each button has a command script.  
    Scripts are a list of commands (see below) separated by commas.  There can 
    be no spaces in the script.
    Current Status

  • #2
      - Closes a window container (should be done after window it was containing is closed).
      - Embeds a window.  Will give up window not found within [ms] milliseconds.
      - Sets windows focus to an embedded window (must use before using Send([Key])).
      - Hides a skin layer.
      - Will end-task any process.
      - Loads or unhides a skin layer. Layers are paired with the windows they control. 
      - Sets SKINbedder to always on top or not.  WARNING: Changing this kills all embedded windows.
      - Plays a sound file using MMSystem in the windows API.
      - Will run the file.  Filename can specify a complete path.
      - Will run the file and pause the SKINbedder until the process terminates.
      - This will simulate a key press (see below)
      Wait([ms]), Delay([ms]), Sleep([ms]), or Pause([ms])
      - This will pause the script for [ms] milliseconds.
      A - Z
      0 - 9
      F1 - F12
      ESC or ESCAPE or EXIT
      PLUS or +
      MINUS or - or DASH
      UP or UPARROW
      PGUP or PAGEUP
      INS or INSERT
      DEL or DELETE


    • #3
        SKINbedder V3 is not complete.  This preview release has the following 
      known bugs/limitations.
        -Buttons disappear when map is updated.  The current work-around is 
      repainting them on a timer.  This causes any semi-transparent effect to fade 
      up.  An alternate exe (SKINbedder_NOEX.exe) does not have this problem, 
      but the transparent part will not be updated when the window behind the 
      buttons updates itself.
        -Transparent/Alpha-Blended windows will not refresh.  You must close and 
      re-open them to have them update.
        -The iGuidance SKIN is not complete.  Many sub-windows will not embed 
      right or not exit right.  The OSK does not work.  This is not a usable release 
      until the skin is complete.  If you have the desire to continue my SKINing 
      effort or make your own skin, you can make it usable.  Please contact me 
      (RPM_VR4 on if you have successfully skinned additional iG sub-
      SKINbedder was written by Ryan McCormick (RPM_VR4) and David Burban (0l33l).
      Delphi source code available upon request.
      Visit the SKINbedder forum on MP3Car:
      Attached Files


      • #4
        wow looks great
        how often does the route list refresh
        | '_ |__\___
        [(o)|___(o)] XB
        | I__I I_I|_\__I
        [(o)______(o)]b VanPimpin'

        LostReceptions Apps D/L Here

        GPSGasoline- Rewriting

        Draw- SkribblePad for Touchscreens

        iGQwerty-iG3.0 Qwerty Keyboard



        • #5
          Well if you keep it transparent, it never refreshes unless you close it and re open it using one of the right-side menus.

          If you edit the iGuidance\iGRoute\iGRoute.ini file, you can make it non-transparent and then it will be updated whenever iGuidance updates it.

          Note: The "refresh bug" is just repainting the buttons to keep them visable. Also the SKINbedder_NOEX.exe does not have this problem (but it does not redraw the map in its transparent part). For any API programmers reading this, the _NOEX build does not use ExStyle = ExStyle || WS_EX_TRANSPARENT, where as the main build does.


          • #6
            Setup hints:

            Open iGuidance\iGuidance.ini
            Find the [Scripts] section
            Find the Startup= variable.
            Edit "Run(c:\progra~1\iNAV\iGuidance\iGuidance.exe) " to your path (no spaces).
            If using it embedded in a front-end, add ",OnTop(True)" after the above.

            Note: If you turn on Always-On-Top (using "OnTop(True)"), all sub-windows will have to be embedded or you will not see them. The iGuidance SKIN is not complete yet, so not all sub-windows are embedded.

            Also Note: Using "OnTop(False)" seems to kill any embedded window for some reason???


            • #7
              Apparently you can only use the 8.3 DOS filename in the RUN portion of the script. Why won't this accept long gpath names? I cannot get it to run

              Originally posted by RPM_VR4
              Setup hints:

              Open iGuidance\iGuidance.ini
              Find the [Scripts] section
              Find the Startup= variable.
              Edit "Run(c:\program files\iNAV\iGuidance\iGuidance.exe)" to your path.
              If using it embedded in a front-end, add ",OnTop(True)" after the above.

              Note: If you turn on Always-On-Top (using "OnTop(True)"), all sub-windows will have to be embedded or you will not see them. The iGuidance SKIN is not complete yet, so not all sub-windows are embedded.

              Also Note: Using "OnTop(False)" seems to kill any embedded window for some reason???
              2002 Honda CR-V
              Carputer progress: 90% [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ -]
              Spent so far: $1105.90

              Download the NEXUS Skin for Centrafuse
              ...or even Listen to my music


              • #8
                Got it to work in my laptop...

                I AM VERY IMPRESSED!!!!!!!
                2002 Honda CR-V
                Carputer progress: 90% [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ -]
                Spent so far: $1105.90

                Download the NEXUS Skin for Centrafuse
                ...or even Listen to my music


                • #9
                  I was thinking over your blending bug the other day... am I correct to assume that the blending bug blends whatever its drawing over with the new image with some kind of function you write? If so, it may take some altering of the code but you could pull off a trick like igzoom v2:

                  -put all of your interface on a new window
                  -set the new window to layered transparency (with no borders or caption)
                  -use BitBlt to copy the contents of iguidances window into memory somehow so you have a fresh copy of the iguidance display every time you refresh
                  -Have the new window follow around the status changes (minimize, zorder changes, ect) of iguidance/skinbedder (with set parent or something) by making it a modal window
                  -Have the new window follow around the size/position of iguidance/skinbedder

                  And then you have buttons that appear to be in the window, and arent affected by iguidances redraw. Its alot of codeing though
                  Current projects: iGmod reloaded (Latest release) (put on hiatus indefinatly)

                  Unlimited Internet and gps tracking for $6 a month with boost mobile!

                  Carputer 2:


                  • #10
                    Looking at this preveiw...Very very nice, and its not done yet.

                    <--- Wants, can't wait...

                    Once again thanks guys. Keep it up...
                    RideRunner...The #1 FE, PERIOD.

                    Current Project: DFXVoice [v1.0 Released]
                    Next in line: RRMedia v2.0

                    DFX 5.1.1 Skin
                    Appstore Link

                    My RideRunner Plugins

                    "There are no bugs - only undocumented features."


                    • #11
                      JIT: Sorry... it does accept long path names, but it doesn't accept spaces. Therefore you have to use progra~1. I don't think I can fix that except by not using INI files. A future version may use XML.


                      • #12
                        I'm at work, so I can't test it right now, but what about using quotations marks? Would that work around the space issue? Like this: "C:\Program Files\iNav\iGuidance"

                        Gen 1: Pentium 3 1GHz - ATX - 2005
                        Gen 2: Pentium M 1.6GHz - ITX - 2006
                        Gen 3: Pentium M 2.0GHz - 5.25" SBC - 2007
                        Gen 4: (coming soon: Core2 Duo - 3.5" SBC - 2009)
               never ends


                        • #13
                          I don't think so. Maybe putting quotes around the entire Startup="Run(....),..." line, but I doubt that too. The problem is not how I am handling the RUN command, the problems is that I am reading a long comma-delimited list from an INI file, and if you have Startup=Run(c:\program files\iNav\..... then my INIFile.ReadString(Statup) function only returns "Run(c:\program".


                          • #14
                            I must be doing something wrong, because even with the 8.3 format (progra~1 etc) it is failing on me.

                            I use the command:
                            dir /x to list the 8.3 names... so I know I am using the right ones. Will try again tonite.
                            2002 Honda CR-V
                            Carputer progress: 90% [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ -]
                            Spent so far: $1105.90

                            Download the NEXUS Skin for Centrafuse
                            ...or even Listen to my music


                            • #15
                              OK, I tried just now...

                              Path to my exe:
                              D:\General Programs\iNav\iGuidanceiGuidance.exe

                              this is what I am using:
                              StartUp=Run(D:\GENERA~1\INAV\IGUIDA~1>IGUIDA~1.EXE )

                              ...and I get:
                              Run Error: D:\GENERA~1\INAV\IGUIDA~1>IGUIDA~1.EXE Not Found!

                              Any ideas?
                              2002 Honda CR-V
                              Carputer progress: 90% [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ -]
                              Spent so far: $1105.90

                              Download the NEXUS Skin for Centrafuse
                              ...or even Listen to my music