Customisable In-Car Dashboard Display
This feature of DeltaDash allows custom screens to be created for display of data from the ECU (and any external sensors that may be present). Design and sharing of screen designs may be discussed with other DeltaDash users on the EcuTek forums.
This article describes how to create custom in car dashboard screens with DeltaDash. Customisable in car screens are intended to allow use of in car LCD screens such as DVD and SatNav screens. Screen layouts may be fully customised to allow display of virtually any engine (and external sensor) data including analogue, digital and fault code data simultaneously.
This feature is currently under development and so is subject to change, in order to refine the functionality. The creation of custom screens requires thought and effort. Experience will be built up as the user explores the features and options available. If you get into difficulty, visit the EcuTek forums where other users will be able to assist you - support of this feature is via the EcuTek forum only. Well designed screens (with permission from the author) may be incorporated into DeltaDash as some of the standard screens, so get designing !
The earliest DeltaDash version supporting in car dashboard screens is 1.37. Download the latest version from the web site for the most up to date features support.
DeltaDash allows up to 10 custom dashboard screens to be created, numbered from 0 to 9. When the in car dash screen is selected from the tools menu of DeltaDash, the display will default to screen 0. The user may then switch between screens by using the number keys 0 to 9 or the cursor keys. Hitting 'Enter' reloads the current dashboard screen - this is useful when designing screens.
Each dashboard screen is stored in directory named '0' to '9' within a subdirectory named 'InCarDashScreens' within the DeltaDash directory. E.g. A typical directory for a custom screen would be: 'C:\DeltaDash\InCarDashScreens\0\'. All files relating to a single dash screen must be present in its numbered directory. At a minimum, a custom dashboard screen consists of a single configuration file named 'Form.cfg', though other files may be present, such as bitmaps and sounds.
When DeltaDash is run for the first time on a PC without any custom screens defined, it will generate 10 sample screens that may then more easily be edited by the user.
This file contains all configuration information for a single custom dashboard screen. In order to create each custom dash screen, a form.cfg file must be edited. The format of the file is described below.
The form configuration file defines a number of objects. Each object corresponds to one of the components on the dashboard screen. Each object has a class that defines what 'class' of dashboard component the object is, such as a 'RoundGauge' or an 'LedBarGauge'. Based on this class, the object has a number of properties that may be adjusted to alter the gauge's function and appearance, such as 'Colour', 'NeedleWidth' and 'Font'. Furthermore, each property has a type that defines the type of data that the property holds, such as 'Integer', 'Real Number' and 'String'.
Comments may be placed in the file by starting the line with a hash '#' character. This character must be the first on the line, with no spaces preceding it.
The example below shows the structure of an object within the form.cfg file. Each object always begins with the word 'object', followed by the object's name. The name only serves as description to remind the designer what the object is for e.g. CoolantTempGauge. Following the name of the object is a colon ':' followed by the class of the object such as TLedBarGauge. Note that the object class always begins with a capital 'T'. Following this are a number of lines, each setting the value of a single property. Finally, the object ends with the word 'end'.
object <Name>: T<ObjectClass> <AnIntegerProperty> = <Integer> <ARealNumberProperty> = <Real Number> <AStringProperty> = <String> <ABooleanProperty> = <Boolean> <AnOptionListProperty> = <Option> ... end
Below is the current list of object classes available to the dashboard designer when designing custom screens. Each of these is described in more detail later on.
The list of properties that may be set for each object class are detailed later in this document. There are many properties that are common to all classes, such as properties relating to an object's position on the screen (top, left, width & height) and general appearance (color, font & transparent). There are also properties that are specific to certain object classes such as NeedleWidth for a RoundGauge object.
An integer is a whole number i.e. a number without any digits after the decimal point.
Top = 25
An integer can also be specified in hexadecimal notation by preceding the number with a '$' symbol.
Top = $19
A real number is a number that may contain a fractional component i.e. digits after the decimal point.
Density = 0.8
A string is a line of text. The string can contain any alphanumeric characters and punctuation but must begin and end with a single quote character.
Caption = 'Coolant Temp.'
A Boolean property can only have one of two values - True or False.
Transparent = True
An option list property can take one of set list of values. (Programmers may know this as an enumerated type). When each property is explained further on in the document, the list of available options will be listed.
DataSource = ddsExternal
A font property has a number of sub properties that define the exact format of text
Font.Charset = DEFAULT_CHARSET Font.Color = clOlive Font.Height = -16 Font.Name = 'MS Sans Serif' Font.Style = [ fsBold, fsItalic,fsUnderline ]
A colour property is really the same as an integer. A colour is specified as $BBGGRR where RR, GG and BB are the hexadecimal red, green and blue components of the colour. E.g Bright red would be $0000FF, whilst a light grey would be $C0C0C0.
Color = $00FF00
This is a list of general properties that are available on several components.
|Top||Integer||Y co-ordinate of top of component.|
|Left||Integer||X co-ordinate of left of component|
|Height||Integer||Height of component in pixels|
|Width||Integer||Width of component in pixels|
|Transparent||Boolean||Specifies whether the background can be seen through the component or not. It is slightly slower to draw transparent components than opaque ones, though some interesting effects can be produced with this feature.|
|Color||Integer||Background colour of the component when it has not been specified as transparent.|
|Font||Font||Specifies the format of any text displayed by the object.|
|UpdateInterval||Integer||Specifies how often the value of a gauge is updated. This may be used to prioritise the display of engine parameters. E.g. Retrieve RPM on every request (=1), whilst retrieving vehicle speed and coolant temperature on every other request (=2).|
|UpdateOffset||Integer||Specifies an offset for data retrieval. E.g. for the above
UpdateInterval example, set the offset for RPM and vehicle speed to 0,
and the offset for coolant temperature to 1. This would result in
2nd RPM + Coolant Temp
3rd RPM + Vehicle Speed
|MinVal||Real Number||Specifies the minimum value that the control is intended to display.|
|MaxVal||Real Number||Specifies the maximum value that the control is intended to display.|
|TextDivide||Real Number||Divides the gauge value before displaying the text. E.g. for an RPM gauge, specifying 1000 would cause the numbers 0 to 8 to be displayed instead of 0 to 8000. This may also be used to convert between units. E.g. Pressures are displayed in PSI by default. To display in bar, set this property to 14.5.|
|DataSource||Option List||Specifies whether the data source for the component is the ECU or an
external sensor. Options are:
|DataChannelECUAnalogue||Option List||Specifies the analogue ECU parameter that the component will
display. Not all parameters are available for all ECUs. View the live
data capture screen of DeltaDash to see which parameters are relevant to
your vehicle. Options are:
|DataChannelECUDigital||Option List||Specifies the digital ECU switch that the component will display.
Not all switches are available for all ECUs. View the live data capture
screen of DeltaDash to see which switches are relevant to your vehicle.
|DataChannelExternal||Option List||Specifies the external sensor channel that the component will
display. Options are:
|PeakShow||Boolean||If true, displays a peak value for the gauge.|
|PeakPeriod||Integer||The period in milliseconds for which the peak display is held.|
|TroughShow||Boolean||If true, displays a trough value for the gauge.|
|TroughPeriod||Integer||The period in milliseconds for which the trough display is held.|
This is the surface on which all dashboard components are placed. Note from the example below that all other components are 'nested' within the DashGaugeForm.
|ClientWidth||Integer||The width of the window that will contain the dashboard controls|
|ClientHeight||Integer||The height of the window that will contain the dashboard controls|
|Screen||Integer||The screen on which the dashboard will be displayed. This is useful for systems with multiple monitors, such as a laptop with an second dash mounted screen. 0 is the first screen, 1 the second etc etc.|
|Color||Colour||The background colour of the dashboard window.|
object DashGaugeForm: TDashGaugeForm ClientHeight = 480 ClientWidth = 640 Color = $000000 Screen = 0 object DashBackground : TDashBackground ... end object rgVehSpd: TRoundGauge ... end end
Allows a background image to be specified. If used, this should be the first component specified to ensure that it appears beneath all other components.
|Position||Option List||Specifies how the background should be placed on the screen. Options
|BitmapFile||String||Specifies the name of the bitmap file. This may be in raw bitmap (bmp) format or compressed portable network graphics (png) format. Png is a lossless compression format, so using that file format simply saves disk space.|
object DashBackground: TDashBackground Left = 0 Top = 0 Width = 640 Height = 480 Transparent = False Position = dbTiled BitmapFile = 'Background.bmp' end
Displays a bar graph component, mimicking a line of LEDs.
|SegCount||Integer||Specifies the number of segments (LEDs) in the component.|
|Density||Real Number||Specifies the density of the bar segments. E.g. a density of 0.8 would specify 80% of the length of the component is used by segments, whilst 20% is used by the space in between each segment.|
|Rounded||Boolean||Specifies whether the corners of each segment are rounded.|
|SegmentColoursOn||List of integers||Specifies a list of comma separated colours used when the segments are illuminated.|
|SegmentColoursOff||List of integers||Specifies a list of comma separated colours used when the segments are not illuminated.|
|SegmentColourIdxs||List of integers||Specifies the zero based indices of the segments at which the above colours are used. Colours for unspecified segments will be interpolated from the colours for other, adjacent segments colour definitions in the colour lists.|
|Invert||Boolean||When the width of the component is greater than the height, a horizontal bar graph is drawn. Conversely, when the height is greater then the width, a vertical bar graph is drawn. When 'Invert' is set to true, the bar graph is drawn from right to left (instead of left to right) or top to bottom (instead of bottom to top).|
|SingleSegment||Boolean||When True, only a single segment is illuminated for the value, rather than a 'bar' of segments up to and including the current value. When SingleSegment is True, both Peak and Trough may be displayed. When false, only the peak value is visible, since the trough will be obscured by the vale bar.|
object LedBarGaugeForMAP: TLedBarGauge Left = 568 Top = 8 Width = 65 Height = 402 Transparent = False Caption = 'LedBarGauge1' Color = clBlack Invert = False UpdateInterval = 1 UpdateOffset = 0 DataSource = ddsECU DataChannelECUAnalogue = epMap DataChannelExternal = lj0 MaxVal = 50 SegCount = 40 Density = 0.8 Rounded = False PeakShow = True PeakPeriod = 5000 SegmentColoursOn = '$FF2020,$20FF20,$20FF20,$2020FF,$2020FF' SegmentColoursOff = '$800000,$008000,$008000,$000080,$000080' SegmentColourIdxs = '0,20,28,34,39' end
Displays a highly configurable round gauge, suitable for displaying parameters such as engine RPM, vehicle speed, water temperature etc.
Note that for the round gauge, the values for the MinVal and MaxVal properties may be reversed in order to cause the needle to move anti-clockwise for increasing values. The normal behaviour would be a clockwise movement of the needle for increasing values, though this feature may be useful for gauges which only use a portion of the available 360 degrees available, such as 20 to 160 degrees.
|AngleStart||Integer||The angle at which the gauge scale begins. The angle is specified in degrees, relative to the 12 o'clock position.|
|AngleEnd||Integer||The angle at which the gauge scale ends.|
|AxleRadius||Integer||The radius of the centre circle covering the axis of the needle.|
|AxleColour||Colour||The colour of the centre circle|
|NeedleWidth||Integer||The width of the needle or pointer.|
|NeedleColour||Colour||The colour of the needle|
|NeedleStart||Integer||The starting radius of the needle.|
|NeedleEnd||Integer||The ending radius of the needle|
|TickCount||Integer||The number of major ticks around the gauge. E.g. for an RPM gauge of 0-8000RPM, specify 9 or 17 ticks. Set to 0 for no ticks at all.|
|TickWidth||Integer||The width of each tick line.|
|TickColour||Colour||The colour of the tick lines.|
|TickStart||Integer||The starting radius of the tick lines.|
|TickEnd||Integer||The ending radius of the tick lines.|
|SmallTicks||Integer||The number of minor ticks between adjacent major ticks.|
|TickWidthSmall||Integer||The width of the small tick lines.|
|TickColourSmall||Integer||The colour of the small tick lines.|
|TickStartSmall||Integer||The starting radius of the small tick lines.|
|TickEndSmall||Integer||The ending radius of the small tick lines.|
|TickTextRadius||Integer||The radius of the tick text from the centre of the gauge.|
|TextInterval||Integer||The number of ticks between each text tick label. E.g. for a 0-8000 RPM gauge with 17 ticks (500 RPM intervals), specifying an interval of 2 would cause text to be displayed only at 1000 RPM intervals.|
|TextDPs||Integer||The number of decimal places shown of tick text.|
|TickFont||Font||The font used to display the tick text.|
|BandStart||Integer||The starting radius of the colour band.|
|BandEnd||Integer||The ending radius of the colour band.|
|BandColours||List of Colours||The list of colours used to draw the colour band.|
|BandIndices||List of Reals||The list of values at which these colours are used. Colours for values in between those specified are interpolated from the colours specified above.|
object rgRPM: TRoundGauge Left = 64 Top = 102 Width = 297 Height = 297 Transparent = True Caption = 'Engine RPM' Color = clBlack Font.Charset = DEFAULT_CHARSET Font.Color = clOlive Font.Height = -16 Font.Name = 'MS Sans Serif' Font.Style =  Invert = False UpdateInterval = 1 UpdateOffset = 0 DataSource = ddsECU DataChannelECUAnalogue = epEngspd DataChannelExternal = lj0 MaxVal = 8000 AngleStart = -135 AngleEnd = 135 AxleRadius = 20 AxleColour = clGray SmallTicks = 4 TickCount = 17 TickWidth = 2 TickWidthSmall = 0 TickColourSmall = clOlive TickColour = clYellow TickTextRadius = 87 TickStart = 100 TickEnd = 135 TickStartSmall = 120 TickEndSmall = 135 NeedleStart = 22 NeedleEnd = 76 NeedleWidth = 4 NeedleColour = clRed TextDivide = 1000 TextInterval = 2 TextDPs = 0 TickTextFont.Charset = DEFAULT_CHARSET TickTextFont.Color = clOlive TickTextFont.Height = -19 TickTextFont.Name = 'MS Sans Serif' TickTextFont.Style =  BandStart = 138 BandEnd = 144 BandColours = '$20FF20,$20FF20,$2020FF,$2020FF' BandIndices = '0,5500,6500,7200' PeakShow = True PeakPeriod = 5000 TroughShow = True TroughPeriod = 2000 end
This component is used to display the state of a digital parameter of the ECU, such as the rear defog switch. The indicator may be set to one of a number of shapes and will change colour depending on the state of the digital parameter. Furthermore, bitmaps and sounds may be specified to provide further indications.
|Shape||Option List||Specifies the shape of the indicator when displaying a simple coloured
indicator. Options are:
|ColourTrue||Colour||The colour of the indicator when displaying a True or 'On' condition.|
|ColourFalse||Colour||The colour of the indicator when displaying a False or 'Off' condition.|
|BitmapsUse||Boolean||Specfies whether Bitmaps are used instead of colours to represent to True and False states.|
|BitmapTrue||String||The filename of the bitmap to use when displaying a True or 'On' condition.|
|BitmapFalse||String||The filename of the bitmap to use when displaying a False or 'Off' condition.|
|SoundUse||Boolean||Specifies whether sounds are played on state transitions.|
|SoundTrue||String||The filename of the sound played when the state changes from False to True.|
|SoundFalse||String||The filename of the sound played when the state changes from True to False.|
|RedrawScreen||Boolean||When set to true, this causes the entire screen to be redrawn when the switch changes state. This is for use when the switch is placed behind other controls e.g. for backlight control based on the state of the headlights switch.|
object SwitchDashGauge1: TSwitchDashGauge Left = 456 Top = 72 Width = 97 Height = 33 Transparent = False Caption = 'SwitchDashGauge1' Invert = False UpdateInterval = 1 UpdateOffset = 0 Shape = dsRoundedRectangle ColourTrue = clRed ColourFalse = clGray BitmapsUse = False SoundUse = False DataSource = ddsECU DataChannelECUDigital = esDefogSw End
The threshold gauge indicates when the value of an analogue parameter exceeds the specified threshold. It is based on the SwitchDashGauge and so inherits its properties for colours, bitmaps and sounds.
|Threshold||Real Number||This is the parameter threshold value at which the gauge's state changes from False to True and back again. This is point at which the colour or bitmap will change, or the sound will be played.|
object ThresholdGauge1: TThresholdGauge Left = 456 Top = 8 Width = 97 Height = 33 Transparent = False Invert = False UpdateInterval = 1 UpdateOffset = 0 Shape = dsRoundedRectangle ColourTrue = clRed ColourFalse = clGray BitmapsUse = False SoundUse = False Threshold = 30 DataSource = ddsECU DataChannelECUAnalogue = epMap DataChannelExternal = lj0 End
Displays a line of static text at any angle. Useful for labelling dashboard components.
|Caption||String||Text to be displayed|
|Angle||Integer||Angle at which the text is displayed, zero being standard horizontal text alignment.|
object DashText2: TDashText Left = 573 Top = 411 Width = 56 Height = 17 Transparent = True Caption = 'Boost' Font.Charset = DEFAULT_CHARSET Font.Color = clWhite Font.Height = -13 Font.Name = 'MS Sans Serif' Font.Style =  end
This component displays an analogue ECU parameter as a text string. For example, it may be used to display the value of a parameter below a bar graph for the same parameter.
|Angle||Integer||The angle at which the text is displayed, zero being standard horizontal text alignment.|
|DecimalPlaces||Integer||The number of digits after the decimal point.|
|TextBefore||String||This text is displayed before the value. E.g. 'Boost pressure: '.|
|TextAfter||String||This text is displayed after the value. E.g. ' Bar'.|
object AnalogueTextGauge: TAnalTextGauge Left = 568 Top = 424 Width = 65 Height = 17 Transparent = False Caption = 'AnalTextGauge2' Font.Charset = DEFAULT_CHARSET Font.Color = clWhite Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style =  Invert = False UpdateInterval = 1 UpdateOffset = 0 DataSource = ddsECU DataChannelECUAnalogue = epMap DataChannelExternal = lj0 DecimalPlaces = 0 end
Displays any current and historic trouble codes present in a single line of text. If more than one trouble code is present, the component will cycle through all codes present. Note that due to the way in which this component is implemented (so as not to impact on the performance of other gauges) it may take a few seconds before a new trouble code is displayed.
|CycleDelay||Integer||Specifies in milliseconds the period for which each trouble code will be displayed before cycling to the next code present.|
object DashDtcText1: TDashDtcText Left = 8 Top = 448 Width = 625 Height = 25 Transparent = True Color = clBlack Font.Charset = DEFAULT_CHARSET Font.Color = clYellow Font.Height = -16 Font.Name = 'MS Sans Serif' Font.Style =  UpdateInterval = 2 UpdateOffset = 0 CycleDelay = 3000 End
Copyright © 2002 -
All rights reserved.